废话不说上代码

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视线改变的方向进行对应的移动了

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: