Unity插件EasyToucu安卓平台的个人开发实例

本文介绍如何使用EasyTouch插件优化Unity开发的手游操作体验。通过创建Joystick按钮控制角色移动和面向,详细解释了按钮属性的调整方法及脚本编写技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习了NightmareShooter这款游戏开发案例之后,我打算把它发布到安卓平台,但是原来的案例的安卓平台的角色控制脚本并不满足我的需求,然后,我找到了EasyTouch这款插件。


一、创建按钮

首先,导入EasyTouch插件,然后,在Hierachy上右键点击EasyTouch Controls


EasyTouch一共有几种按钮样式:分别是Joystick,D-Pad,Button,TouchPad,Area

Joystick:可以360度的旋转。


D-Pad:只有左右前后。


Button:只能点击一次。


TouchPad:设置一个区域,触摸该区域调用。


Area:设置你的按钮触摸范围,范围内只会触发按钮而不会触发其他方法,类似于一个遮罩。



而在该游戏里,我只用到Joystick,其他的按钮其实可以说是大同小异的。



我创建了两个Joystick,左边按钮控制移动,右边控制主角的面向(即射击方向)




二、按钮的属性修改及功能的添加

1.左边的按钮控制主角的移动


首先设置它的类型Type是static,即静态的,按钮就不会改变位置。如果设置成动态,该按钮就会出现在你触摸屏幕的位置。

然后设置Anchor为BottomLeft左下,并设置一下大小。



接着我勾选了Horizontal axis和Vertical axis,分别是按钮的垂直和水平方向。


首先是Horizonal(水平方向)的修改


Inverted axis:反方向翻转

Dead lenght:触摸位置离开按钮多远按钮停止触发

On/Off Threshold:不清楚什么功能,故不做讨论

Speed:速度



Action on 为Press(按压方式触发)

Direct action to选择你所要控制的物体,这里我控制的是主角Player。

Action这里有几种选项:

分别是控制旋转(围绕世界坐标),控制旋转(围绕本地坐标),控制移动(世界坐标),控制移动(本地坐标),控制大小,添加一个方向的力,添加一个方向的力(相对的),添加一个扭力,添加一个扭力(相对的)。

在这里控制的是主角的移动,所以我选择了Translate




Affected axis 指的是控制那个坐标

我这里选择的是x,即控制主角x轴的移动



Enable inertia:是否具有惯性

Positive key:正方向的控制按键

Negative key:反方向的控制按键

这里我是左右移动



然后是Vertical(垂直方向)的修改


Affected axis选择控制z轴的移动

Positive key选择上方向

Negative key选择下方向

这里控制上下方向的移动

其他选项设置与水平方向相同





Sprites设置的是按钮的贴图,EasyTouch有自带的贴图,你也可以选择其他贴图




再往下看可以看到四种事件,分别是:

Move Events:移动事件

Touch Events:触摸事件

Down Events:按钮按下事件

Press Events:按钮按压事件

在这里我仅仅使用了MoveEvents,其他三种有什么不同不清楚,仅仅看字面上的意思感觉一样呢



我设置了移动开始和移动结束的事件


分别对应的是角色的行走动画,和行走动画停止。


该按钮功能实现完成,完成结果:




2.右边的按钮控制主角的转向


设置Anchor为Bottom Right(右下)


勾选垂直和水平方向,但是Direct action to不选择。

只需要用到它的按钮的旋转,并不用它来控制主角


然后在该按钮下的Thumb物体上绑定一个脚本,该物体就是按钮上旋转的物体

脚本里输入以下代码:Player设置为主角

 public GameObject Player;

    // Update is called once per frame
    void Update()
    {
        if (GetComponent<RectTransform>().localPosition == new Vector3(0, 0, 0)) 
        {
            return;
        }
        //西
        if (GetComponent<RectTransform>().localPosition.x < 0 && GetComponent<RectTransform>().localPosition.y >= -10 && GetComponent<RectTransform>().localPosition.y <= 10) 
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x - 10, Player.transform.position.y, Player.transform.position.z));
            //Debug.Log("e");
        }
        //东
        if (GetComponent<RectTransform>().localPosition.x > 0 && GetComponent<RectTransform>().localPosition.y >= -10 && GetComponent<RectTransform>().localPosition.y <= 10)
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x + 10, Player.transform.position.y, Player.transform.position.z));
            //Debug.Log("w");
        }
        //南
        if (GetComponent<RectTransform>().localPosition.y < 0 && GetComponent<RectTransform>().localPosition.x >= -10 && GetComponent<RectTransform>().localPosition.x <= 10)
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x, Player.transform.position.y, Player.transform.position.z - 10));
            //Debug.Log("s");
        }
        //北
        if(GetComponent<RectTransform>().localPosition.y > 0 && GetComponent<RectTransform>().localPosition.x >= -10 && GetComponent<RectTransform>().localPosition.x <= 10)
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x, Player.transform.position.y, Player.transform.position.z + 10));
            //Debug.Log("n");
        }
        
        //东北
        if (GetComponent<RectTransform>().localPosition.y > 10 && GetComponent<RectTransform>().localPosition.x > 10) 
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x + 10, Player.transform.position.y, Player.transform.position.z + 10));
            //Debug.Log("wn");
        }
        //西北
        if (GetComponent<RectTransform>().localPosition.y > 10 && GetComponent<RectTransform>().localPosition.x < -10) 
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x - 10, Player.transform.position.y, Player.transform.position.z + 10));
            //Debug.Log("en");
        }
        //东南
        if (GetComponent<RectTransform>().localPosition.y < -10 && GetComponent<RectTransform>().localPosition.x > 10)
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x + 10, Player.transform.position.y, Player.transform.position.z - 10));
            //Debug.Log("ws");
        }
        //西南
        if (GetComponent<RectTransform>().localPosition.x < -10 && GetComponent<RectTransform>().localPosition.y < -10)
        {
            Player.transform.LookAt(new Vector3(Player.transform.position.x - 10, Player.transform.position.y, Player.transform.position.z - 10));
            //Debug.Log("es");
        }
        
    }


在该游戏里我仅仅控制主角的8个方向,并分别通过按钮的旋转位置控制主角的朝向位置。

最后实现结果为:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值