Итак, когда я нажимаю кнопку, я вызываю сопрограмму для скрипта, который на моем плеере (созданный экземпляр префаба, который я переименовал, как только его экземпляр), и он должен попытаться атаковать.
код выглядит следующим образом:
public void AttackMonster()
{
StartCoroutine(TryAttack());
}
IEnumerator TryAttack()
{
var attacker = references.GetComponent<References>()
.selectedPlayer.GetComponent<CharacterTemplate>();
var enemyName = EventSystem.current.currentSelectedGameObject
.GetComponentInChildren<Text>().text;
var enemy = GameObject.Find(enemyName);
var speed = attacker.speed;
var accuracy = attacker.accuracy;
var strength = attacker.strength;
var enemyDefense = enemy.GetComponent<EnemyInfo>().defense;
for (int i = 0; i < speed; i++)
{
yield return new WaitForSeconds(1);
var accuracyTry = Random.Range(1, 11);
if (accuracyTry >= accuracy)
{
FloatingMessage("Hit");
if (Hit(strength, enemyDefense))
{
Debug.Log("Wound");
}
else
{
Debug.Log("No wound");
}
}
else
{
FloatingMessage("Miss");
}
}
И я получаю сообщение об ошибке:
Не удалось запустить сопрограмму, поскольку игровой объект Player_prefab неактивен!
Я сделал несколько Debug.Break, чтобы проверить, был ли созданный игрок неактивен, но это не так.Кажется, что кнопки onClick () вызывают эту функцию из префаба, а не из экземпляра или чего-то подобного.
Есть идеи?