1. 程式人生 > >Unity3D 第三人稱角色控制器結合easytouch

Unity3D 第三人稱角色控制器結合easytouch

1、首先了解角色控制器
2、myjoystick.cs(EasyJoystick的指令碼)

using UnityEngine;
using System.Collections;

public class myjoystick : MonoBehaviour {

    protected Transform m_player;   

    void Awake()
    {   //獲得人物元件物件
        GameObject obj=GameObject.FindGameObjectWithTag("myMan");
        if ( obj!=null )
        {
            m_player=obj.transform
; } } //當搖桿可用時註冊事件 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) { //停止時,角色恢復idle if (move.joystickName
== "EasyJoystick") { m_player.animation.CrossFade("idle"); print("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) { print("move"); //判斷搖桿活動範圍(圓的計算) double rsqrt = joyPositionY*joyPositionY + joyPositionX*joyPositionX; if(rsqrt<2*0.7*0.7) { //設定角色的朝向(朝向當前座標+搖桿偏移量) m_player.transform.LookAt(new Vector3(m_player.transform.position.x + joyPositionX, m_player.transform.position.y, m_player.transform.position.z + joyPositionY)); //移動玩家的位置(按朝向位置移動) m_player.transform.Translate(Vector3.forward * Time.deltaTime * 5); //播放奔跑動畫 m_player.animation.Play("walk"); } else { //設定角色的朝向(朝向當前座標+搖桿偏移量(可以乘數來增大移動位移)) m_player.transform.LookAt(new Vector3(m_player.transform.position.x + joyPositionX, m_player.transform.position.y, m_player.transform.position.z + joyPositionY)); //移動玩家的位置(按朝向位置移動) m_player.transform.Translate(Vector3.forward * Time.deltaTime * 5); //播放奔跑動畫 m_player.animation.Play("run"); } } } }

3、跳躍按鈕設定(參考)
注意:事件驅動、接收事件物件及其呼叫方法的設定,jump方法放在與物件關聯的(第三人稱控制器)指令碼中。

function  jump()
{
    print("jump");
    lastJumpButtonTime = Time.time;
}

4、註釋第三人稱的角色控制器指令碼的關於移動的動畫,否則與搖桿的動畫結合混亂;另外,註釋角色面向方位更新,避免移動操作,方位回到原來方向。

//更新角色控制器的移動面向方位(角色移動操作不是使用角色控制器的,而是用搖桿的,所以控制器中預設未發生移動,即方向不變)
//transform.rotation = Quaternion.LookRotation(moveDirection);

5、還需要為角色提供地形,否則會一直墜落。