在Unity中摧毁克隆

时间:2014-10-19 22:32:20

标签: c# unity3d clone destroy

大家好我有点卡在这里。我随机时间有我的gameObject Enemy Spawn。但问题是我只想让敌人在比赛中说5秒钟。麻烦的是我根本无法摧毁这个物体。在这里,我编写了这个代码来试图破坏敌人对象:

public class SpawnManager : MonoBehaviour {

public GameObject Enemy;
public float mytimer;
public float enemyHealth = 5.0f;

void Start()
{
    GameObject player = GameObject.Find("Player");
}

void spawnEnemy() {
    Transform enemy;
    GameObject enemySpawnPoint = GameObject.Find("EnemySpawn");
    enemy =  Instantiate(Enemy,enemySpawnPoint.transform.position,enemySpawnPoint.transform.rotation) as Transform; 
}

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.name == "EnemyTrigger") {
        mytimer = Random.Range(0,10);
        //Debug.Log("Now Destroying");
        Invoke("spawnEnemy", mytimer);
        Debug.Log("Spawn Normal");

        if(Enemy.name == "BloodyMary(Clone"){
            Destroy(Enemy, enemyHealth);
            Debug.Log("Now Destroying");
        }
        }
    }

    }

每当我遇到触发器时,它就会产生一个" BloodyMary(Clone)"我想破坏它。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

在我看来,敌人处理自己的破坏会更有意义。这意味着敌人应该对自己的持续时间负责,如果你在任何时候可能有大量的敌人,我觉得这会更有意义。

我会创建一个co-routine,只需等待5秒钟,然后调用Destroy(gameObject)函数来销毁自己。它可能看起来像这样:

IEnumerator DeathTimer(float duration)
{
    yeild return new WaitForSeconds(duration);
    Destroy(gameObject);
}

然后在你的'Start()'方法中,我将调用协同例程(不是作为普通方法完成的)。这可以通过以下方式完成:

void Start()
{
    // calls the coroutine to start
    StartCoroutine("DeathTimer", duration);
}

注意:通过使用字符串(如上所述)调用协同例程,您可以调用“StopCoroutine(”MethodName“);”这将在任何时候停止协程。这比将方法参数传入StartCoroutine()。

更好

这意味着你的产卵者现在纯粹负责产生敌人,如果他们持续太久,他们应对自己的死亡负责。那么你不是要在生成器上管理多个敌人而你也不必担心在那里跟踪它们。

前几天,我有一个朋友问了一个非常相似的问题,他使用了这个问题并且有所作为。

答案 1 :(得分:1)

代码说:

Invoke ("spawnEnemy", myTimer);

调用你的spawnEnemy()函数,它会创建另一个敌人克隆。它还使用延迟计时器进行呼叫。

如果您不想让其他敌人删除该部分代码


你也在用计时器摧毁。您可以使用Destroy(Enemy)即时销毁。

答案 2 :(得分:1)

我看到了一个错字,因为您错过了姓名检查的结束语。短绒猫之所以没有这样做,是因为括号在字符串中,因此对于程序来说,检查“ bloodymary(clone)”而不是“ bloodymary(clone)”似乎是完全合理的。

答案 3 :(得分:0)

解决方案很简单

在您启动该游戏对象后使用Destroy(gameobject,5);

示例

<-- line initiate gameobject -->
Destroy(gameobject,5);

5个目标是消灭游戏对象之前的第二个目标。