你们好,欢迎你们关注个人博客,我是秦元培,个人博客地址是blog.csdn.net/qinyuanpei。今天呢,咱们来一块儿学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动。虽然Unity3D内置了一个Joystick组件(事实上就是一个GUITexture和一个Js脚本文件啦),可是博主在实际使用的时候发现这个内置的Joystick存在没法适应屏幕大小的问题,因此博主在这里向你们推荐使用EasyTouch这个插件,经过这个插件。咱们可以高速地在应用中集成虚拟摇杆功能,而且可以经过改变贴图的方式来本身定义摇杆的外观,因此总体来讲,这个插件是在触摸交互这部分功能中最好的一个插件。首先咱们导入EasyTouch的资源包,而后经过Hedgehog Team->Extension->Adding a new joystick加入一个虚拟摇杆。此时会在层级视图中生成EasyTouch 和 Easy Joystick两个对象。如图:学习
此时,咱们可以在游戏场景中看到EasyTouch默认的虚拟摇杆外观:动画
接下来,咱们来解说下EasyJoystick的属性:spa
好了。假设你们对于这些属性没有什么问题的话,接下来咱们就可以開始编写脚本了:.net
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"); } } }咱们将这个脚本绑定到咱们的人物模型上面。而后执行程序:
这里咱们再来讲一下使用Unity3D自带的Joystick来实现人物移动控制。咱们首先需要导入Standard Assets(Mobile)资源包,在这个资源包里咱们可以发现两个实用的文件:Joystick.js和JoystickThumb.psd,它们各自是虚拟摇杆的脚本组件和外观贴图。咱们手动建立一个GUITexture,并调整到合适的位置(悲剧就是从这里開始的),将这张贴图赋给GUITexture。而后绑定Joystick.js脚本。插件
博主习惯使用C#,对于Js脚本使用得很少,听说在Unity中Js脚本需要放到Standard Assets、 Pro Standard Assets和Plugins中的不论什么一个文件件里才干正常使用,因此很是多朋友反映的使用Unity内置的Joystick找不到类,就是这个缘由。code
这里博主使用的是国外朋友依据官方的脚本改写的C#脚本。咱们编写一个C#脚原本响应虚拟摇杆:orm
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"); } } }官方提供的这个虚拟摇杆组件没法在电脑上測试,需要安装到手机上执行,咱们来看看实际的效果吧:
在手机上EasyTouch插件可以完美执行,官方提供的Joystick没有反映。眼下不知道是为何,有时间的话继续研究下啊。对象
參考文章:blog
一、Unity手游之路<五>虚拟摇杆之Unity内置插件实现
教程
二、Unity手游之路<六>游戏摇杆之Easy Touch 3教程
每日箴言:决心走一条路的时候,就不要左顾右盼。风景再美也别流连
喜欢个人博客请记住个人名字:秦元培,个人博客地址是blog.csdn.net/qinyuanpei 转载请注明出处,本文做者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/26204177