[英]In unity 2D after applying force to a rigid body how do I make it rotate to face the direction of travel
[英]How do I rotate an object in Unity 2D and then go in that direction?
我是 unity 和 C# 的新手,但現在正在制作一個小游戲,你是海中的水母。 我想讓你主要用箭頭鍵控制玩家面向不同的方向。 下面的代碼是我現在擁有的,我認為它會起作用,但它沒有。 我需要徹底改變某些東西還是我的一個小錯誤? 這是一個2D游戲。
float tpx = transform.position.x;
float tpy = transform.position.y;
if (Input.GetKey("up")){
if (face_up){
transform.position = new Vector2 (tpx, tpy + speed/1000);
animation.SetBool("swim", true);
}
if (face_right){
transform.position = new Vector2 (tpx + speed/1000, tpy);
animation.SetBool("swim", true);
}
if (face_down){
transform.position = new Vector2 (tpx, tpy + speed/1000);
animation.SetBool("swim", true);
}
if (face_left){
transform.position = new Vector2 (tpx - speed/1000, tpy);
animation.SetBool("swim", true);
}
}
else{
animation.SetBool("swim", false); gameObject.transform.position = new Vector2 (transform.position.x, transform.position.y - speed/10000);
}
if (Input.GetKey("left")){
if (face_up){
transform.eulerAngles = Vector3.forward * 90;
face_up = false;
face_right = false;
face_down = false;
face_left = true;
}
if (face_right){
transform.eulerAngles = Vector3.forward * 0;
face_up = true;
face_right = false;
face_down = false;
face_left = false;
}
}
if (Input.GetKey("right")){
if (face_up){
transform.eulerAngles = Vector3.forward * -90;
face_up = false;
face_right = true;
face_down = false;
face_left = false;
}
if (face_left){
transform.eulerAngles = Vector3.forward * 0;
face_up = true;
face_right = false;
face_down = false;
face_left = false;
}
}
你的代碼確實有很多缺陷。
首先,你不應該通過直接改變它的 position 來移動你的精靈。Unity 中有不同的工具可以這樣做,查看Translate function。它會對你有很大幫助,因為你不需要知道你的精靈的當前旋轉(你似乎誤解了什么是 Vector3.forward)。 另請查看 Time.deltaTime 在此 function 中的工作原理。
其次,當旋轉你的精靈時,你應該相對於它當前的旋轉角度來做,即增加或減少 90 度。 看看Quaternion.Euler
最后你不需要那么多布爾值。 在編程時,您應該盡量避免重復,因此當您一遍又一遍地編寫大量相同的代碼時,這是一個好兆頭,表明您可以將代碼寫得更好。
解決方案可能是沿着這些路線的。 請記住,雖然我沒有測試它,但 Quaternion.Euler 中的 Vector3.up 和 Vectors (0, 0, 90f) 可能是錯誤的,具體取決於您如何定位游戲玩法:
if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.Translate(Vector3.up * Time.deltaTime);
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
transform.rotation *= Quaternion.Euler(0, 0, 90f);
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
transform.rotation *= Quaternion.Euler(0, 0, -90f);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.