你們好,歡迎你們關注個人博客,我是秦元培,個人博客地址是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