簡體   English   中英

如何在 Unity 2D 中旋轉 object,然后在該方向旋轉 go?

[英]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.

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