在学习了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个方向,并分别通过按钮的旋转位置控制主角的朝向位置。
最后实现结果为: