Как добавить Delay перед поиском GameObject - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь сделать игру, в которой вы можете нанести удар врагу, противник борется около секунды и падает замертво.(ragdoll);

я думаю, что лучше всего показать мой скрипт, и вы поймете, что я имею в виду:

В триггере при включении введите скрипт:

if(other.tag == "enemy"){
    other.transform.parent.gameObject.name = ("enemy" + currentEnemy);
    print(other.name);
    gameObject.Find("enemy" + currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse();
    BloodParticle.emit = true;
    Stabbed = true;
    Character.GetComponent("MouseLook").enabled = false;
    Character.GetComponent("CharacterMotor").enabled = false;

}

и вфункция обновления:

if(Stabbed == true){
    StopBleeding ++;
}

if(StopBleeding > 50){
    Stabbed = false;
    StopBleeding = 0;
    currentEnemy ++;
    Character.GetComponent("MouseLook").enabled = true;
    Character.GetComponent("CharacterMotor").enabled = true;
    BloodParticle.emit = false;
}

Теперь, когда мой нож вступает в столкновение с врагом, противник немедленно падает на пол.Я попытался вставить:

gameObject.Find("enemy" + currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse();

в функцию обновления в if(StopBleeding > 50).

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

В основном мой вопрос таков: есть ли способ исправить эту ошибку, чтобы дать ей 50 кадровую задержку (все остальное в StopBleeding работает)?

Или есть ли способ, которым я могуположить простую задержку до того, как Ragdoll активируется?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 21 апреля 2011

Поскольку вы спрашиваете конкретно о Unity JS, а не C #, вы будете использовать ключевое слово yield.

 print("foo");
 yield WaitForSeconds (5.0); // waits for 5 seconds before executing the rest of the code
 print("bar");
0 голосов
/ 27 мая 2011

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

Еще один совет: не считайте кадры, так как они могут быть разной длины. Добавляйте время из Time.deltaTime, пока не дойдете, скажем, до 2 секунд, а затем вызовите смерть.

Надеюсь, это поможет.

0 голосов
/ 21 апреля 2011

Вы можете использовать StartCoroutine («DelayDeath»);где DelayDeath - это имя метода.Смотри ниже.

    if(other.tag == "enemy"){
    other.transform.parent.gameObject.name = ("enemy" + currentEnemy);
    print(other.name);
    StartCoroutine("DelayDeath");
    BloodParticle.emit = true;
    Stabbed = true;
    Character.GetComponent("MouseLook").enabled = false;
    Character.GetComponent("CharacterMotor").enabled = false;

}

private IEnumerator DelayDeath()
{
   //this will return...and one second later re-enter and finish the method
   yield return new WaitForSeconds(1.0f);
   gameObject.Find("enemy" +   currentEnemy).GetComponent("RagdollOrNot").MakeKinematicFalse();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...