虚拟键盘的方位映射到游戏世界空间的计算

以EasyTouch和EasyJoystick为例,在响应虚拟摇杆的事件方法里会传来虚拟摇杆当前方位的x轴和y轴坐标值:
QQ图片20190717145847.png

QQ图片20190717150029.png

设当前虚拟摇杆传过来的纵轴值为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值即可。

你可能感兴趣的:(虚拟键盘的方位映射到游戏世界空间的计算)