因此,当我单击按钮时,我正在播放器上的脚本上调用协程(我实例化后立即重命名的实例化预制件),他应该尝试攻击。
代码如下:
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()是从预制而不是实例或其他东西中调用此函数的。
有什么想法吗?
答案 0 :(得分:1)
我想出了答案!谢谢你们的提问,谢谢。 :) 问题确实出在我的onClick上。我是通过检查器进行设置的,因此是从预制件而不是实例中调用它的。
我要做的就是在脚本中分配它,并实际引用实例而不是预制实例。容易。
enemyButton1.GetComponent<Button>().onClick.AddListener(selectedPlayer.GetComponent<PlayerAttack>().AttackMonster);