【问题标题】:Respawn destroyed object in Unity在 Unity 中重生被破坏的对象
【发布时间】:2015-02-14 06:48:12
【问题描述】:

我有这个脚本,当我击中触发器时,我的敌人随机生成,然后敌人随机摧毁自己。我想再次重生敌人,这样它就可以一遍又一遍地这样做。任何建议:

public class SpawnManager : MonoBehaviour {

public GameObject Enemy; // the enemy prefab
public float mytimer; // the time to wait before spawn
public float transport;// the time it has to destroy itself

private GameObject _spawndEnemy; // the enemy that was spawnd

void SpawnEnemy()
{
    var enemySpawnPoint =  GameObject.Find("FFEnemySpawn1").transform;
    _spawndEnemy = Instantiate(
         Enemy, enemySpawnPoint.position, enemySpawnPoint.rotation) as GameObject;
    transport = Random.Range (2,15);
}

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.name == "FFTrigger") {
        mytimer = Random.Range(0,15);
        Invoke("SpawnEnemy", mytimer);
        Debug.Log("Spawn Normal");
    }
}

void Update()
{
    Destroy (_spawndEnemy, transport);
}
}

【问题讨论】:

  • 嗨 Ghostdre,这个问题可能更适合 Game Development SO 网站,至于让多个敌人产生,我会创建一个 Enemy 类,然后保存一个数组或 Enemy 列表是在你的SpawnManager 类中随机存在的时间
  • 感谢 Matthew,我正在考虑数组,但我不知道如何设置。但我会在游戏开发网站上询问。
  • @Ghostdre 你是在尝试制作一种视差滚动的游戏吗?
  • 不,它是一个 fps 3d 恐怖游戏,但我想我知道怎么做。我只是在 SpawnEnemy 中再次使用 Invoke 方法。但我可能会遇到一个问题,即敌人应该只生成一次,但它会生成多次。
  • Enemy 是您的预制件,因此请尝试创建 Enemy 实例而不是 GameObject。您可以稍后将实例作为 GameObject 处理,并且不要在 Update 中使用 Destroy,因为您可以在 SpawnEnemy() 方法的末尾使用它 public Enemy enemy; enemy.gameObject......

标签: c# unity3d instantiation destroy


【解决方案1】:

嗨,Ghostdre,这个问题可能会在Game Dev SO 得到更好的回答,至于你的问题,我建议为 GameObject 创建一个 Enemy 类对象和数据成员,以及一个确定敌人应该多长时间的时间变量在被摧毁之前活着。

例如

public class SpawnManager
{
    public float lifeTime;

    ...

    void Update()
    {
        lifeTime -= Time.deltaTime

        if (lifeTime <= 0)
        {
            Destroy (_spawndEnemy, transport);
            SpawnEnemy()
        }
    }
}

请注意,这是一个不完整的示例,但它应该让您了解从这里开始的地方。

【讨论】:

  • 那么公开数组 Enemyenemy = new List 会再次重生敌人吗?
  • 这取决于您希望它如何运作,您是否希望它能够从同一个生成中生成多个敌人?还是您希望一个生成物在任何给定时间创造一个敌人?
  • 只有一个敌人在一次生成时生成。但如果敌人自毁,我希望敌人在重生点重生。
  • 我已经编辑了我的示例,我有 ... 是您现有代码所在的位置,您需要在 SpawnEnemy() 方法中为 lifeTime 设置一些值(如果您想要一个随机数比使用Random.Range(minVal, maxVal)
  • 除此之外,您应该致力于更好地分解您在该程序中的功能(例如,拥有一个敌人类来保存游戏对象、生命周期等),否则您的代码将很快变得非常笨拙
猜你喜欢
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多