如何在Unity中使用欧拉角翻转2D角色

问题描述 投票:0回答:1

我想让我的角色在另一个方向上翻转,并在这个方向上前进,但我得到的是,我的角色只能在一个方向上行走,即使角色转身,你能帮助解决它吗?

这是我的代码

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个回答
1
投票

Transform.Translate会考虑到你的鸟所面对的方向。你要让2个动作相互配合。

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);

或者要求Translate使用全局坐标。

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;
}

另外,在你的例子中,方括号的方式,flip是update的一个嵌套函数。是这样的吗?

© www.soinside.com 2019 - 2024. All rights reserved.