Примените одно и то же движение ко всем префабам возрождения (со списком)

Скрипт создает движущиеся стены неограниченный, созданные префабами (кубами) с InvokeRepeating. Как поместить префабы спауна в список во время выполнения и остановить их, если они сталкиваются с проигрывателем?

стена

enter image description here

public Vector3[] positions=new Vector3[4];
public GameObject barrier;

float speed=1f;

void Start () 
{
    InvokeRepeating("SpawnBarrier",1f,speed);
}

void SpawnBarrier()
{
    for(int i=0;i<=3;i++)
    {
        Instantiate (barrier,positions[i],Quaternion.identity);
    }
}


void OnTriggerEnter(Collider other)
{
    if(other.gameObject.CompareTag("Player"))
    {
        Debug.Log ("Trigger");  
    }
}
1
0
47
1

Ответы 1

Создайте новый скрипт для Movement и прикрепите его к префабу барьера, который содержит метод OnTriggerEnter и static event Action:

bool canMove = true;

void OnEnable()
{
    PlayerTriggered += StopMoving;
}

void OnDisable()
{
    PlayerTriggered -= StopMoving;
}

void StopMoving()
{
    canMove = false;
}

void Update()
{
    if(canMove)
        // movement code
}

public static event System.Action PlayerTriggered;
void OnTriggerEnter(Collider other)
{
    if(other.gameObject.CompareTag("Player"))
    {
        if(PlayerTriggered != null)
            PlayerTriggered();
    }
}

Он будет применяться ко всем стенам (префабам) или только к префабу, который сталкивается с игроком?

Don_Huan 11.04.2018 14:42

Ко всем стенам

Umair M 11.04.2018 14:51

Не работает, вы уверены, что работает с InvokeRepeating?

Don_Huan 11.04.2018 14:59

куда ты скрипт прикрепил?

Umair M 11.04.2018 15:02

К сборному! И написал если canMove то gameObject.transform.Translate (0f, 0f, -0.7f)

Don_Huan 11.04.2018 15:04

он будет двигаться только тогда, когда игрок активирует любой из барьеров

Umair M 11.04.2018 15:06

Если сборные элементы перемещаются, и я нажимаю в инспекторе canMove = false, они все еще перемещаются!

Don_Huan 11.04.2018 15:06

Ооо, а хочется наоборот))

Don_Huan 11.04.2018 15:07

Что ты все равно пытаешься сделать? Четко сформулируйте, чего вы хотите достичь, чтобы я мог вам помочь :)

Umair M 11.04.2018 15:08

Я написал, что я делаю: сборные элементы движутся, и когда игрок столкнется с ними, я хочу, чтобы он остановил их!

Don_Huan 11.04.2018 15:11

В любом случае, я думаю, мне следует поместить все префабы спауна в список!

Don_Huan 11.04.2018 15:15

Ваш комментарий в коде говорит об обратном. Проверить обновленный код

Umair M 11.04.2018 15:15

Ага, моя вина, я имею ввиду там применить стоп-движение!

Don_Huan 11.04.2018 15:17

В любом случае мой обновленный ответ должен сработать для вас. Если вы хотите прекратить нерест, когда игрок активирует барьер. Просто добавьте CancelInvoke() в метод StopMoving

Umair M 11.04.2018 15:19

Я бы порекомендовал вам посмотреть несколько уроков от Unity и изучить основы :)

Umair M 11.04.2018 15:36

Другие вопросы по теме