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、还需要为角色提供地形,否则会一直坠落。