【发布时间】:2016-04-17 20:52:43
【问题描述】:
我正在尝试将一个项目添加到我的 LevelManager 脚本中的列表中。对于一个敌人,当他死后,他的尸体预制件会被添加必要的碰撞器等,以便 LevelManager 处理。
敌人的脚本是:
using UnityEngine;
using System.Collections;
public class EnemyController : MonoBehaviour {
public Rigidbody2D rb;
public Animator anim;
public GameObject deadGuy;
public LevelManager manager;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
manager = GetComponent<LevelManager>();
}
// Update is called once per frame
void Update () {
if(anim.GetBool("Dead"))
{
StartCoroutine("Die");
}
}
private IEnumerator Die()
{
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
Instantiate(deadGuy, gameObject.transform.position, gameObject.transform.rotation);
manager.worldObjects.Add(deadGuy);
DestroyObject(gameObject);
}
}
播放死亡动画,然后将预制件添加为层次结构中的“死人(克隆)”,然后再次播放动画并实例化更多预制件。但是,如果我删除这行代码:
manager.worldObjects.Add(deadGuy);
然后播放动画,添加预制件并删除敌人对象。
【问题讨论】:
-
我认为您需要在更新中使用另一个 bool 才能仅启动协程一次。
-
如果游戏对象正在被销毁,但它不应该再次运行,因为敌人脚本已附加到敌人对象。如果删除这行代码,它就可以工作: manager.worldObjects.Add(deadGuy);因此,除非将其删除,否则该行似乎阻止它到达破坏游戏对象本身的下一行