Unity3D 第三人稱角色控制器結合easytouch
阿新 • • 發佈:2019-01-01
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、還需要為角色提供地形,否則會一直墜落。