对象没有正确定位

时间:2015-07-13 05:39:22

标签: c# unity3d

我有一个小脚本会导致对象来回弹跳。这是一只向上滚动无尽的赛跑者的鸟。所以它代表了它的飞行路径。此脚本将其从一端移动到另一端,当它到达末尾时,它会翻转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();
    }

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

1 个答案:

答案 0 :(得分:1)

您正在根据位置调用Flip()方法。并且每帧更新位置。因此,从>=25<25的Lerp需要一段时间,因此在位置为>= 25<= -25的每一帧中,它都会调用Flip()。因此,您需要添加另一个检查来调用Flip()。可能facingright == true可以使用。