Как исправить мой текущий код перемещения спрайта полностью за пределы экрана?

В настоящее время я пытаюсь написать сценарий, чтобы мой gameobject/sprite в Unity полностью перемещался за пределы экрана, а затем уничтожался. Но на данный момент с моим текущим кодом спрайт не полностью перемещается за пределы экрана.

Вот мой текущий код:

void MoveObstacle()
{
    this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);

}

void CheckIfOffscreen()
{
    Vector3 spriteSize = this.GetComponentInChildren<Renderer>().bounds.size;
    Debug.Log(spriteSize);

    Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);

    if(screenPos.y < 0 - spriteSize.y/2)
    {
        this.DestroyObstacle();
    }
}

void DestroyObstacle()
{
    Destroy(gameObject);
}

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

Я знаю, что просто что-то упускаю или неправильно использую spriteSize. Кто-нибудь знает, как решить проблему?

Спасибо


person aresz    schedule 08.04.2015    source источник
comment
spriteSize.y/2 — это взрыв в середине спрайта, так что, может быть, просто spriteSize.y без деления на 2.   -  person Catwood    schedule 08.04.2015
comment
Спасибо за комментарий, но я пробовал и это. Все равно пропадает на полпути. Я думаю, что могу неправильно использовать bounds.size с координатами экрана.   -  person aresz    schedule 08.04.2015
comment
Понятно, GetComponentInChildren должно быть просто GetComponent. Но я бы все равно избавился от деления на 2.   -  person Catwood    schedule 08.04.2015


Ответы (1)


Прежде всего, я верю этой строке:

this.transform.position -= new Vector3(this.transform.position.x, speed * Time.deltaTime, this.transform.position.z);

Должно быть:

this.transform.position -= new Vector3(0, speed * Time.deltaTime, 0);

И чтобы решить вашу проблему, попробуйте следующее:

Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position + spriteSize);

if(screenPos.y < 0)
{
    this.DestroyObstacle();
}
person Galman33    schedule 08.04.2015
comment
Спасибо, теперь у меня все работает. Теперь он полностью уходит за пределы экрана, и спасибо, что указали на мою ошибку в строке transform.position. - person aresz; 09.04.2015