天天看點

[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動

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

[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動
        此時,我們能夠在遊戲場景中看到EasyTouch預設的虛拟搖杆外觀:
[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動
       接下來,我們來解說下EasyJoystick的屬性:
[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動
[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動
       好了。假設大家對于這些屬性沒有什麼問題的話,接下來我們就能夠開始編寫腳本了:

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]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動

       這裡我們再來說一下使用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");
    }
  }
}      

       官方提供的這個虛拟搖杆元件無法在電腦上測試,須要安裝到手機上執行,我們來看看實際的效果吧:

[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動

    在手機上EasyTouch插件能夠完美執行,官方提供的Joystick沒有反映。眼下不知道是為什麼,有時間的話繼續研究下啊。

  每日箴言:決心走一條路的時候,就不要左顧右盼。風景再美也别流連

[Unity3D]Unity3D遊戲開發之使用EasyTouch虛拟搖杆控制人物移動

、本文作者:秦元培,