设当前虚拟摇杆传过来的纵轴值为ver,横轴值为hor,实际的虚拟摇杆的当前方位应该为两坐标轴的向量相加:
Vector2 direction = new Vector2(hor, 0)+ new Vector2(0, ver);
即
direction = new Vector2(hor, ver).normalized;
这个方位是标准的空间映射方位,有时候可能需要进一步映射到模型的方位上,比如映射到游戏角色模型上,设跟随角色的相机transform为camTransform:
//转化角色纵轴到世界空间
Vector3 forward = camTransform.TransformDirection(Vector3.forward);
forward.y = 0f;
forward = forward.normalized;
//转化角色横轴到世界空间
Vector3 right = camTransform.TransformDirection(Vector3.right);
right.y = 0;
right = right.normalized;
m_direction = new Vector2(right.x, forward.z).normalized;
m_direction即为当前角色的控制方位。
虚拟摇杆的各轴力矩应用到角色方位:
direction = new Vector3(hor* m_direction.x, 0, ver* m_direction.y).normalized;
设速度为speed:
Vector3 targetPosition = camTransform.position+ Speed * Time.deltaTime * direction;
同理使用按键时,调用方法Input.GetAxisRaw("Horizontal")和Input.GetAxisRaw("Vertical")分别代替虚拟摇杆传回hor和ver值即可。