废话不说上代码
void StickMovement_NotFixed()
{
if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickUp)||OVRInput.Get(OVRInput.Button.PrimaryThumbstickDown) ||
OVRInput.Get(OVRInput.Button.PrimaryThumbstickLeft)||OVRInput.Get(OVRInput.Button.PrimaryThumbstickRight))
{
//if(OVRInput.Get(OVRInput.Button.PrimaryThumbstick)){
Quaternion ort = CameraRig.centerEyeAnchor.rotation;
Vector3 ortEuler = ort.eulerAngles;
ortEuler.z = ortEuler.x = 0f;
ort = Quaternion.Euler(ortEuler);
Vector3 moveDir = Vector3.zero;
Vector2 primaryAxis = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick);
moveDir += ort * (primaryAxis.x * Vector3.right);
moveDir += ort * (primaryAxis.y * Vector3.forward);
//_rigidbody.MovePosition(_rigidbody.transform.position + moveDir * Speed * Time.fixedDeltaTime);
//这个按上摇杆前进是顺着VR看着的前方前进的
_rigidbody.MovePosition(_rigidbody.position + moveDir * Speed * Time.deltaTime);
//这个不能顺着VR看着的前方前进,是固定一个移动方向的,原因是translate默认是space.self
this.transform.Translate(moveDir*Speed*Time.deltaTime);
//这个就能和第一个效果一样了
this.transform.Translate(moveDir*Speed*Time.deltaTime,Space.World);
}
}
当我使用_rigidbody.MovePosition(_rigidbody.position + moveDir * Speed * Time.deltaTime);
的时候,摇杆控制前推,角色可以顺着VR的前进方向移动
当我使用this.transform.Translate(moveDir*Speed*Time.deltaTime);的时候
,摇杆前推,但是并不能使得角色向VR看着的方向移动
当我使用 this.transform.Translate(moveDir*Speed*Time.deltaTime,Space.World);的时候
摇杆前推,角色可以向VR看着的方向移动,和第一个效果一样
原因,translate接口第二个参数省缺的时候默认是Space.self,因此导致移动方向是按照自己的坐标,所以移动方向都是相对于自己来说的,所以都是固定的
但使用Space.world的时候,就是相对的世界坐标,自然就可以随着VR视线改变的方向进行对应的移动了
文章来源
发表评论