我有一個虛擬運動操縱桿,我用它來控制播放器物件的運動,它作業正常,代碼如下。
我遇到的問題是,當我在游戲模式(或設備)中旋轉相機時,方向不會根據相機的旋轉進行調整,就像我在
請注意,我只是在那里放了一些隨機值,但你明白了。
現在,您的問題是,您從原始輸入獲得的這個角度在方向上是靜態的,這意味著它不依賴于相機的面部方向。您可以通過“將其鎖定到相機”來解決此問題,或者換句話說,根據相機旋轉來旋轉輸入方向。這是一個簡單的例子:
//Get the input direction
float inputX = joystick.Horizontal();
float inputY = joystick.Vertical();
Vector3 inputDirection = new Vector3(inputX, 0, inputY);
//Get the camera horizontal rotation
Vector3 faceDirection = new Vector3(cameraTransform.forward.x, 0, cameraTransform.forward.z);
//Get the angle between world forward and camera
float cameraAngle = Vector3.SignedAngle(Vector3.forward, faceDirection, Vector3.up);
//Finally rotate the input direction horizontally by the cameraAngle
Vector3 moveDirection = Quaternion.Euler(0, cameraAngle, 0) * inputDirection;
重要提示:上面的代碼應該在更新周期中呼叫,因為這是您獲取輸入資訊的地方。
在此之后,您可以使用moveDirection
來移動您的播放器。(我建議使用物理移動,而不是修改它的位置)
簡單的移動示例:
public RigidBody rigidbody;
public Vector3 moveDirection;
public float moveSpeed = 5f;
void FixedUpdate()
{
rigidbody.velocity = moveDirection * moveSpeed;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/483200.html
上一篇:DryIoc:使用不同的建構式引數注冊相同實作的依賴項集合
下一篇:無法通過MassTransit中IPublishEndpoint的Publish方法發送自定義物件串列(訊息型別不得為系統型別)