[Unity3D]Unity3D游戲開發之使用EasyTouch虛擬搖桿控制人物移動


       大家好,歡迎大家關注我的博客,我是秦元培,我的博客地址是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


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM