標籤:des style blog class c code
大家好,歡迎大家關注我的部落格,我是秦元培,我的部落格地址是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 () {//擷取JoystickmJoystick=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