对象没有正确定向

本文关键字:对象 | 更新日期: 2023-09-27 18:02:25

我有一个小脚本,可以使对象来回弹跳。它是一种向上滚动的无限奔跑的鸟。所以它代表了它的飞行路线。这个脚本将它从一端移动到另一端,当它到达末端时,它会翻转2D精灵并朝相反的方向移动。这在大多数情况下都有效。但问题是,有时图像翻转了两次,所以现在它看起来像是在向后飞,直到它再次翻转。每一次都是随机的。

public class Fly : MonoBehaviour  {
private bool dirRight = false;
public float speed;
public bool facingRight = false;
void Start (){
    speed = Random.Range (15.0f, 22.0f);
}
void Update () {
    if(transform.position.x >= 25.0f) {
        dirRight = false;
        Flip();
    }
    if(transform.position.x <= -25.0f) {
        dirRight = true;
        Flip();
    }
    if (dirRight)
        transform.Translate (Vector2.right * speed * Time.deltaTime);
    else
        transform.Translate (-Vector2.right * speed * Time.deltaTime);
}
void Flip()
{
    // Switch the way the player is labelled as facing
    facingRight = !facingRight;
    // Multiply the player's x local scale by -1
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}

我修改了if语句,并使用了我的bool和位置:

if(transform.position.x >= 25.0f && dirRight == true) {
        dirRight = false;
        Flip();
    }
    if(transform.position.x <= -25.0f && dirRight == false) {
        dirRight = true;
        Flip();
    }

我现在正在运行它,等着看它是否有效。

对象没有正确定向

您正在基于位置调用Flip()方法。位置每帧更新一次。所以从>=25<25需要时间,所以在位置为>= 25<= -25的每一帧中,它调用Flip()。因此,您需要为调用Flip()添加另一个检查。可能facingright == true会工作