天呢,我們來一起學習在Unity3D中使用EasyTouch虛拟搖杆來控制人物移動。雖然Unity3D内置了一個Joystick元件(事實上就是一個GUITexture和一個Js腳本檔案啦),但是部落客在實際使用的時候發現這個内置的Joystick存在無法适應螢幕大小的問題,是以部落客在這裡向大家推薦使用EasyTouch這個插件,通過這個插件。我們能夠高速地在應用中內建虛拟搖杆功能,并且能夠通過改變貼圖的方式來自己定義搖杆的外觀,是以整體來說,這個插件是在觸摸互動這部分功能中最好的一個插件。首先我們導入EasyTouch的資源包,然後通過Hedgehog Team->Extension->Adding a new joystick加入一個虛拟搖杆。此時會在層級視圖中生成EasyTouch 和 Easy Joystick兩個對象。如圖:

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沒有反映。眼下不知道是為什麼,有時間的話繼續研究下啊。
每日箴言:決心走一條路的時候,就不要左顧右盼。風景再美也别流連
、本文作者:秦元培,