簡體   English   中英

固定對角線運動

[英]Fixing diagonal movement

我需要幫助統一我的對角線運動。 它對角線的速度比水平或垂直的快。

我正在開發等距 3D 游戲。 我正在使用 Unity 2019.4

無論如何,這是我的代碼:

if (canMove)
{
 Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
 Vector3 rightMovement = right * moveSpeed * Time.deltaTime * Input.GetAxis("Horizontal");
 Vector3 upMovement = forward.normalized * moveSpeed * Time.deltaTime * Input.GetAxis("Vertical");

 Vector3 heading = Vector3.Normalize(rightMovement + upMovement);

 transform.forward = heading;
 transform.position += rightMovement;
 transform.position += upMovement;
}

您的問題的第一個主要線索應該是您計算了一個direction向量,但隨后從未實際使用它。 這不會那么糟糕(浪費但不是世界末日),除了另一個主要問題是您以不同的方式計算rightMovementupMovement值。

在我看來,代碼可以大大簡化,有兩個好處:提高效率,更容易正確。 如果沒有一個最小的、可重現的示例,就不可能確定正確的代碼是什么,但我希望這適用於您的情況:

if (canMove)
{
    transform.forward = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
    transform.position += transform.forward * moveSpeed * Time.deltaTime;
}

重要提示:代碼並不總是通過向其添加更多代碼而變得更好。 在調試過程中嘗試性地添加一些語句以進行嘗試是可以的,但是繼續添加越來越多的語句通常是一個壞主意。 如果某些事情不起作用,請查看已經存在的陳述並找出如何使它們變得更好(即使其發揮作用),而不是試圖用更多的陳述來解決它們的任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM