using UnityEngine;
using System.Collections;
public class AvatarJoystickCtrl
{
protected CAnimator myAnimator;
Transform myTransform;
eActionState nowActionState;
public Camera myCamera;
public AvatarJoystickCtrl(Avatar avatar,Camera ca)
{
EasyJoystick.On_JoystickMove += OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;
nowActionState = eActionState.None;
myCamera = ca;
//stStateData.Init();
myTransform = avatar.GetTransform();
myAnimator = avatar.GetCAnimator();
}
public AvatarJoystickCtrl(Transform myTrans,CAnimator myAnima, Camera ca)
{
EasyJoystick.On_JoystickMove += OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd;
nowActionState = eActionState.None;
myCamera = ca;
//stStateData.Init();
myTransform = myTrans;
myAnimator = myAnima;
}
public void Relese()
{
EasyJoystick.On_JoystickMove -= OnJoystickMove;
EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
myTransform = null;
myAnimator = null;
}
public void Update()
{
//Debug.Log ("!!");
myAnimator.Update();
}
//移动摇杆结束
void OnJoystickMoveEnd(MovingJoystick move)
{
//停止时,角色恢复idle
if (move.joystickName == "MoveJoystick")
{
//animation.CrossFade("idle");
myAnimator.PlayAction("idle", 1f);
}
}
//移动摇杆中
void OnJoystickMove(MovingJoystick move)
{
if (move.joystickName != "MoveJoystick")
{
return;
}
//获取摇杆中心偏移的坐标
float joyPositionX = move.joystickAxis.x;
float joyPositionY = move.joystickAxis.y;
if (joyPositionY != 0 || joyPositionX != 0)
{
Transform camTrans = CCamera.GetInst().GetCameraObj().transform;
Vector3 start = myTransform.position;
Vector3 end = camTrans.position;
end.y = start.y;
Vector3 dir = (start - end);
Debug.Log("dir:"+dir);
Vector3 cosx = Vector3.Cross(myTransform.up, dir);
Debug.Log("cosX:" + cosx);
Vector3 add = (dir * joyPositionY + cosx * joyPositionX).normalized;
//设置角色的朝向(朝向当前坐标+摇杆偏移量)
//myTransform.LookAt(new Vector3(myTransform.position.x + dir.x, myTransform.position.y, myTransform.position.z + dir.y));
Vector3 mDir = new Vector3(myTransform.position.x + add.x, myTransform.position.y, myTransform.position.z + add.z);
myTransform.LookAt(mDir);
//移动玩家的位置(按朝向位置移动)
myTransform.Translate(add * Time.deltaTime * 5, Space.World);
//播放奔跑动画
//animation.CrossFade("run");
myAnimator.PlayAction("run", 1f);
}
}
}
在unity3d中用EasyTouch的操纵杆控制相对于不同角度的摄像机的第三人物视角的相对位移的代码段
最新推荐文章于 2024-08-21 16:04:19 发布