我想在Unity中製作一個簡單的2D自上而下射手。我有鼠標的基本動作和跟隨,但運動中存在問題。無論何時按下Up和Right的同時,它都會像您期望的那樣沿對角方向移動,但是當您放開Up鍵時,它會沿着對角線方向繼續向右移動。我處理的運動代碼爲:統一2D自上而下射手運動問題C#
void Update() {
if(Input.GetKey(Up)){
Debug.Log("UP");
Vector3 velUp = rigidbody2D.velocity;
velUp.y = walkSpeed;
rigidbody2D.velocity = velUp;
}
else if(Input.GetKey(Down)){
Vector3 velDown = rigidbody2D.velocity;
velDown.y = walkSpeed*-1;
rigidbody2D.velocity = velDown;
}
else if(Input.GetKey(Left)){
Vector3 velLeft = rigidbody2D.velocity;
velLeft.x = walkSpeed*-1;
rigidbody2D.velocity = velLeft;
}
else if(Input.GetKey(Right)){
Vector3 velRight = rigidbody2D.velocity;
velRight.x = walkSpeed;
rigidbody2D.velocity = velRight;
}
else{
Vector3 velStop = rigidbody2D.velocity;
velStop.x = 0;
velStop.y = 0;
rigidbody2D.velocity = velStop;
}
//rotation
Vector3 mousePos = Input.mousePosition;
Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
我怎樣才能獲得的運動表現正如我所說?隨着它像對角線移動一樣,這使得運動看起來不錯。 任何幫助,不勝感激。謝謝。
這完美!謝謝。如果你解釋了最後一部分,它會好嗎?我對整體和C#都很陌生,我不太瞭解'vel.magnitude'和'Normalize'部分。 –
'vel.magnitude'獲取速度的「大小」。如果你的速度是(1,1),那麼'幅度'將會是〜1.4(正如梅內所說的「兔子跳躍」問題)。這是基本的三角函數(Sin(ang)= 1/hyp)。 'Normalize'減少了一個矢量,使它的最大分量是1.也就是說, (2,4)將歸一化爲(0.5,1) – anothershrubery
這是不正確的。 'Normalize'會給你一個大小爲1的矢量。 – Mene