Unity 2D Platforms Показать на столкновение - PullRequest
0 голосов
/ 10 мая 2018

Как я могу заставить группу платформ появляться при столкновении с ее триггером?

Я хотел бы войти в триггер, который включит «StarPlatforms» в инспекторе, раскрывая все, что является его потомком. Я только получил, чтобы сделать прямо противоположное:

До столкновения

После столкновения

Дети СтарПлатфромс

Скрипт на StarPlatforms :

public class AppearTrigger : MonoBehaviour {

    private GameObject StarPlatforms;

    void Start() {
        StarPlatforms = GameObject.Find("StarPlatforms");
        StarPlatforms.gameObject.SetActive (true);
    }

    void OnTriggerStay2D (Collider2D col) {
        if (col.gameObject.tag == "Player") {
            StarPlatforms.gameObject.SetActive (false);

        }               
    }
}

Я пытался поменять .SetActives слишком ложным, чем true, и он отключился в инспекторе при воспроизведении, но остался скрытым при столкновении с триггером.

Спасибо за ваше время.

пс: это мой первый выход в Unity & C #

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Я бы хотел войти в триггер, который включит «StarPlatforms» в инспекторе.Я попытался поменять .SetActives слишком ложным, чем true

Вы, кажется, догадались, какой из них работает.Вот как работает SetActive:

Чтобы включить или активировать объект, передайте true в SetActive.Чтобы выключить или деактивировать его, передайте ему false.Кроме того, это должно быть сделано в функции OnTriggerEnter2D, а не OnTriggerStay2D.

Функция OnTriggerStay2D вызывается, когда столкновение при каждом столкновении кадров все еще касается.Функция OnTriggerEnter2D вызывается при столкновении.OnTriggerExit2D вызывается, когда нет больше столкновения.

void OnTriggerEnter2D (Collider2D col) 
{
    if (col.CompareTag("Player")) 
    {
        StarPlatforms.gameObject.SetActive (true);
    } 
}

Если вы также хотите включить или отключить его, когда они больше не касаются, передайте false в функцию SetActive в функции OnTriggerExit.

void OnTriggerExit2D(Collider2D col)
{
    if (col.CompareTag("Player")) 
    {
        StarPlatforms.gameObject.SetActive (false);
    } 
}

Не относится к вашей проблеме, но рекомендуется использовать CompareTag вместо gameObject.tag.

0 голосов
/ 10 мая 2018

Вот что сработало:

public class AppearTrigger : MonoBehaviour {

GameObject[] StarPlatfromArray;

void Start() {
    StarPlatfromArray = GameObject.FindGameObjectsWithTag("Cave");
    for (int i = 0; i < StarPlatfromArray.Length; i=i+1) {
        StarPlatfromArray [i].gameObject.GetComponent<BoxCollider2D> ().enabled = false;
        StarPlatfromArray [i].gameObject.GetComponent<SpriteRenderer> ().enabled = false;
    }
}

void OnTriggerEnter2D (Collider2D col) {
    StarPlatfromArray = GameObject.FindGameObjectsWithTag("Cave");
    for (int i = 0; i < StarPlatfromArray.Length; i++) {
        StarPlatfromArray [i].gameObject.GetComponent<BoxCollider2D> ().enabled = true;
        StarPlatfromArray [i].gameObject.GetComponent<SpriteRenderer> ().enabled = true;
    }

}

}

0 голосов
/ 10 мая 2018

SetActive просто устанавливает, является ли он частью основного игрового цикла или нет.Чтобы сделать платформу невидимой или видимой, используйте ее компонент Renderer и деактивируйте ее.

gameObject.GetComponent<SpriteRenderer>().enabled = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...