unity3d - 无法在实例化的预制件上启动协程
问题描述
因此,当我单击一个按钮时,我正在我的播放器上的脚本上调用协程(一个实例化的预制件,我在实例化后立即重命名)并且他应该尝试攻击。
代码如下:
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() 正在从预制件中调用此函数,而不是实例或其他东西。
有任何想法吗?
解决方案
我想出了答案!这要感谢你们的问题,谢谢。:) 问题确实出在我的 onClick 上。我是通过检查器设置它的,所以它是从预制件而不是实例中调用的。
我所要做的就是在脚本中分配它并实际引用实例而不是预制件。十分简单。
enemyButton1.GetComponent<Button>().onClick.AddListener(selectedPlayer.GetComponent<PlayerAttack>().AttackMonster);
推荐阅读
- android - 带有背景图像和表单的 Flutter Stack
- amazon-web-services - 在集群置放群组 (AWS) 中启动实例
- express - 快速路由:使用 router.use/all 和 router.param 控制流
- material-table - 使用filterPlaceholder时如何使用排序?
- javascript - 在 LightningChart JS 的工具提示上添加其他字段,包括 xvalue 和 yvalue
- swift - Swift 为什么我的(Equatable)日期对象在将其转换为字符串并返回后不相等?
- reactjs - 错误时打印警报或某些消息
- python - 在 UserUpdateForm 上隐藏电子邮件地址
- c# - LINQ 比较同一年、不同月份的值,如果值已更改,则进行计数
- swagger-ui - 缓慢的招摇扫描 - sdswsApiListingReferenceScanner : 扫描 api 列表引用