我有一个小脚本会导致对象来回弹跳。这是一只向上滚动无尽的赛跑者的鸟。所以它代表了它的飞行路径。此脚本将其从一端移动到另一端,当它到达末尾时,它会翻转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();
}
我现在正在运行它,等着它是否有效。
答案 0 :(得分:1)
您正在根据位置调用Flip()
方法。并且每帧更新位置。因此,从>=25
到<25
的Lerp需要一段时间,因此在位置为>= 25
或<= -25
的每一帧中,它都会调用Flip()
。因此,您需要添加另一个检查来调用Flip()
。可能facingright == true
可以使用。