我正在使用 Cinemachine 狀態驅動程式在圍繞我的播放器運行的 8 個定向攝像機之間進行轉換。現在我的播放器腳本設定為基本的等距角色控制器:
播放器.cs
public float speed = 5f;
Vector3 forward;
Vector3 right;
// Start is called before the first frame update
void Start()
{
forward = Camera.main.transform.forward;
forward.y = 0;
forward = Vector3.Normalize(forward);
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
}
// Update is called once per frame
void Update()
{
if (Input.anyKey)
{
Move();
}
}
void Move ()
{
Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Vector3 rightMovement = right * speed * Time.deltaTime * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * speed * Time.deltaTime * Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement upMovement);
transform.forward = heading;
transform.position = rightMovement;
transform.position = upMovement;
}
我希望玩家移動方向以反映相機的方向。例如,使用 W(來自 WASD)將始終向上移動播放器。我可以編輯腳本以獲取每個虛擬攝像機的方向并將其添加到我的播放器控制器還是有更好的方法?
uj5u.com熱心網友回復:
要解決此問題,您必須根據相機的角度更改鍵的移動。這是通過以下方式完成的transform.TransformDirection
。當移動與攝像機的方向同步時,它會導致W按鍵將角色壓向地面,因為攝像機前方的角度在地面內部。為了解決這個問題,我們將 y 設定為零,然后對軸進行歸一化。
public float speed = 10f;
void Update()
{
var moveInput = new Vector3(Input.GetAxis("Horizontal"), 0f , Input.GetAxis("Vertical"));
moveInput = Camera.main.transform.TransformDirection(moveInput);
moveInput.y = 0;
moveInput = moveInput.normalized;
transform.position = moveInput * Time.deltaTime * speed;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480217.html
上一篇:VisualStudio2022->嘗試安裝Microsoft.DataTools.AnalysisServices.vsix失敗并出現用戶和服務錯誤