大家好,歡迎大家關注我的博客,我是秦元培,我的博客地址是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的屬性:
好了。假設大家對於這些屬性沒有什么問題的話,接下來我們就能夠開始編寫腳本了:
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找不到類,就是這個原因。
這里博主使用的是國外朋友依據官方的腳本改寫的C#腳本。我們編寫一個C#腳本來響應虛擬搖桿:
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沒有反映。眼下不知道是為什么,有時間的話繼續研究下啊。
參考文章:
1、Unity手游之路<五>虛擬搖桿之Unity內置插件實現
2、Unity手游之路<六>游戲搖桿之Easy Touch 3教程
每日箴言:決心走一條路的時候,就不要左顧右盼。風景再美也別流連
喜歡我的博客請記住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei
轉載請注明出處,本文作者:秦元培,本文出處:http://blog.csdn.net/qinyuanpei/article/details/26204177