Позвольте мне сначала пояснить вопрос :)
У меня есть герой и враг. Это файтинг. И у героя, и у врага есть анимации и состояния idle, block, punch и getHit в контроллере анимации. К герою и противнику прикреплены скрипты. Герой управляет игрок, а враг - ИИ.
Теперь я прикрепляю сценарий сначала к герою, а затем к противнику. Теперь, когда противник бьет и если герой не защищается, герой получает удар. Но если противник не блокирует, а герой попадает, то врага не попадает. Это потому, что скрипт был прикреплен к герою первым.
Теперь, если я удалю сценарий из обоих и сначала прикреплю сценарий врага к врагу, а затем прикреплю сценарий героя к герою. Вайдеверса верна. У врага попадания будут регистрироваться, а у героя - нет.
Я не уверен, почему это происходит, я пробовал разные вещи, но проблема все еще сохраняется.
Я также пробовал искать решение повсюду в Интернете, но ни одно из них не решило мою проблему.
Спасибо :)
ниже приведен сценарий врага, который проверяет, может ли враг получить удар
void Update () {
myTick++;
currentTick = myTick;
GameObject player = GameObject.Find("theDude");
Animator pAnim = player.GetComponent<Animator>();
//Getting Hit
if (pAnim.GetBool("tIsPunching"))
{
if (anim.GetBool("bEnemyIsDefending") == false)
{
Debug.Log("enemy got hit");
anim.SetTrigger("tEnemyGotHit");
anim.SetBool("bEnemyIsDefending", true);
}
}
}
А вот и сценарий героя, который проверяет, может ли герой получить удар.
void Update () {
totalTime += Time.deltaTime;
GameObject enemy = GameObject.Find("Enemy");
Animator eAnim = enemy.GetComponent<Animator>();
//Getting Hit
if (eAnim.GetBool("tEnemyIsPunching"))
{
if (anim.GetBool("bIsDefending") == false)
{
Debug.Log("player got hit");
anim.SetTrigger("tGotHit");
}
}
}
Вместо получения объекта я использовал общедоступный GameObject и прикреплял героя и врага к соответствующим классам. Но это не имеет значения.