笔者在使用虚拟摇杆的过程中,不仅需要遥杆控制物体前后左右移动,还用按钮控制物体左右旋转,因为摄像机在物体上,这就产生了一个问题,在旋转之前,物体移动的方向跟视角方向一样,但是一旦开始旋转几次后,物体的移动依然是按着摇杆控制的世界坐标的方向移动,可是由于视角改变,造成摇杆的方向跟物体移动的视角方向不一致。
于是笔者就对物体的移动进行了一定的改动,达到了想要的结果。
public void Move(Vector3 dir)
{
Vector3 moveDir=Vector3.zero;
if (dir.x >= dir.z && Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
{
moveDir = transform.right;
}
if(dir.x>=dir.z&& Mathf.Abs(dir.x) < Mathf.Abs(dir.y))
{
moveDir = -transform.forward;
}
if(dir.x < dir.z && Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
{
moveDir = -transform.right;
}
if (dir.x < dir.z && Mathf.Abs(dir.x) < Mathf.Abs(dir.y))
{
moveDir = transform.forward;
}
transform.position +=moveDir.normalized * speed * Time.deltaTime;
}
{
Vector3 moveDir=Vector3.zero;
if (dir.x >= dir.z && Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
{
moveDir = transform.right;
}
if(dir.x>=dir.z&& Mathf.Abs(dir.x) < Mathf.Abs(dir.y))
{
moveDir = -transform.forward;
}
if(dir.x < dir.z && Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
{
moveDir = -transform.right;
}
if (dir.x < dir.z && Mathf.Abs(dir.x) < Mathf.Abs(dir.y))
{
moveDir = transform.forward;
}
transform.position +=moveDir.normalized * speed * Time.deltaTime;
}
笔者在摇杆方向改变的时候传递了摇杆的方向坐标,再根据坐标计算出摇杆的方向,用方向来控制物体移动,最终解决了旋转后视角方向改变的问题。