对象没有正确定向
本文关键字:对象 | 更新日期: 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
会工作