【问题标题】:How to Flip 2D character in Unity using Euler Angles如何使用欧拉角在 Unity 中翻转 2D 字符
【发布时间】:2020-05-06 08:58:14
【问题描述】:

我想让我的角色向另一个方向翻转并朝着那个方向前进,但是我得到的是,我的角色只能向一个方向走,即使角色转身,你能帮忙解决吗

这是我的代码

public class BirdMovement : MonoBehaviour
{
Rigidbody2D jump;
public bool reverse;

void Start()
{
    jump = GetComponent<Rigidbody2D>();
}

void Update()
{
int jumpstrength = 50;
transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);
    if (Input.GetAxis("Horizontal") > 0 && !reverse)
    {
        flip();
    }
    if (Input.GetAxis("Horizontal") < 0 && reverse)
    {
        flip();
    }

    if (Input.GetKey(KeyCode.Mouse0))
    {
        jump.AddForce(new Vector2(0, jumpstrength));
    }

void flip()
{
    reverse = !reverse;
    transform.eulerAngles = new Vector3(0,180,0);
    return;
}
}

【问题讨论】:

    标签: c# unity3d visual-studio-2010 euler-angles


    【解决方案1】:

    Transform.Translate 会考虑您的小鸟面对的方向。你让这两个动作相互对抗。

    transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);
    

    如果轴值低于负值,你告诉鸟在 x 上向后走,但这是鸟的局部 x,而不是世界的全局 x。同时,你告诉它翻转,它就会翻转,它的向后变成了它曾经的向前。

    您可以通过使用轴的绝对值来解决此问题。

    transform.Translate(Mathf.Abs(Input.GetAxis("Horizontal")) * 5f * Time.deltaTime, 0f, 0f);
    

    或者要求翻译使用全局坐标,

    transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f, Space.World);
    

    话虽如此,我现在想知道您的翻转功能是如何工作的,而您所做的只是每次都在 y 上分配 180。这将无法多次翻转您的角色。请改用 transform.Rotate。

    void flip()
    {
        reverse = !reverse;
        transform.Rotate(0,180,0);
        return;
    }
    

    在您的示例中括号的方式也是如此,翻转是更新的嵌套函数。这是故意的吗?

    【讨论】:

    • Mann 可以了,谢谢先生的帮助,我可以继续我的工作了,非常感谢,Arigato :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多