2015-07-13 5 views
0

У меня есть небольшой скрипт, который заставляет объект возвращаться назад и вперед. Это птица для прокручивания вверх по бесконечному бегуну. Таким образом, он представляет собой траекторию полета. Этот скрипт перемещает его с одного конца на другой, и когда он достигает конца, он переворачивает 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; 
} 

я модифицировал, если заявления и использовать мои Bools, а также положение, как например:

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

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

Я бегу сейчас и ждать, чтобы увидеть, если он работает.

+0

Вы пытались log 'transform.position' всякий раз, когда звонки« Flip »? – NeverHopeless

ответ

1

вы вызываете Flip() способ, основанный на положении. и позиция обновляется за кадр. Поэтому для Лерпа требуется время от >=25 до <25, поэтому в каждом кадре, когда позиция >= 25 или <= -25, она вызывает Flip(). Поэтому вам нужно добавить еще одну проверку для звонка Flip(). Может быть facingright == true будет работать.

+0

Я добавил свое изменение выше, основываясь на вашем ответе. Я просто запускаю его сейчас, чтобы убедиться, что он работает. Похоже, что это так, но я хочу, чтобы он пробежал еще около 20 минут, прежде чем я скажу gtg. – th3ramr0d

+0

Честно говоря, я думал о том, чтобы делать это, как это на работе раньше, но я не был точно уверен, что это сработает, и если это будет, почему это сработает. Спасибо за объяснение =) – th3ramr0d

Смежные вопросы