尽管Unity3D内置了一个Joystick组件(其实就是一个GUITexture和一个Js脚本文件啦),可是在实际使用的时候发现这个内置的Joystick存在无法适应屏幕大小的问题,所以在这里向大家推荐使用EasyTouch这个插件,通过这个插件,我们可以快速地在应用中集成虚拟摇杆功能,而且可以通过改变贴图的方式来自定义摇杆的外观,所以总体来说,这个插件是在触摸交互这部分功能中最好的一个插件。首先我们导入EasyTouch的资源包,然后通过Hedgehog Team->Extension->Adding a new joystick添加一个虚拟摇杆,此时会在层级视图中生成EasyTouch 和 Easy Joystick两个对象。如图:
此时,我们可以在游戏场景中看到EasyTouch默认的虚拟摇杆外观:
接下来,我们来讲解下EasyJoystick的属性:
好了,如果大家对于这些属性没有什么问题的话,接下来我们就可以开始编写脚本了:
[csharp]using UnityEngine;
using System.Collections;
public class MoveController : MonoBehaviour {
//当摇杆可用时注册事件
void OnEnable()
{
EasyJoystick.On_JoystickMove += OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;
}
//当摇杆不可用时移除事件
void OnDisable()
{
EasyJoystick.On_JoystickMove -= OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
}
//当摇杆销毁时移除事件
void OnDestroy()
{
EasyJoystick.On_JoystickMove -= OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
}
//当摇杆处于停止状态时,角色进入待机状态
void OnJoystickMoveEnd(MovingJoystick move)
{
if (move.joystickName == "EasyJoystick")
{
animation.CrossFade("idle");
}
}
//当摇杆处于移动状态时,角色开始奔跑
void OnJoystickMove(MovingJoystick move)
{
if (move.joystickName != "EasyJoystick")
{
return;
}
//获取摇杆偏移量
float joyPositionX = move.joystickAxis.x;
float joyPositionY = move.joystickAxis.y;
if (joyPositionY != 0 || joyPositionX != 0)
{
//设置角色的朝向(朝向当前坐标+摇杆偏移量)
transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY));
//移动玩家的位置(按朝向位置移动)
transform.Translate(Vector3.forward * Time.deltaTime * 7.5F);
//播放奔跑动画
animation.CrossFade("Run");
}
}
}
我们将这个脚本绑定到我们的人物模型上面,然后运行程序:
[csharp]
using UnityEngine;
using System.Collections;
public class JoystickController : MonoBehaviour {
private Joystick mJoystick;
private float mSpeed=7.5F;
void Start ()
{
//获取Joystick
mJoystick=GameObject.Find("UnityJoystick").GetComponent<Joystick>();
}
void Update ()
{
//获取摇杆响应值
float mX=mJoystick.position.x;
float mY=mJoystick.position.y;
//移动角色
if(mX!=0||mY!=0)
{
Vector3 mPos=new Vector3(transform.position.x+mX,transform.position.y,
transform.position.z+mY);
transform.LookAt(mPos);
//移动玩家的位置(按朝向位置移动)
transform.Translate(Vector3.forward * Time.deltaTime * 5F);
//播放奔跑动画
animation.Play("Run");
}else
{
animation.Play("idle");
}
}
}
官方提供的这个虚拟摇杆组件无法在电脑上测试,需要安装到手机上运行,我们来看看实际的效果吧: