在它被摧毁后重生一个敌人的预制件

时间:2013-10-05 12:45:11

标签: unity3d instance

var respawn : Transform;
var dead : boolean = false;

function OnTriggerEnter(theCollision : Collider)
{
   if(theCollision.gameObject.name=="Spotlight") 
   {
     Destroy(gameObject);
     Debug.Log("Dead");
     dead = true;

   }
}


function Respawn()
{

    if(dead == true)
    {
       Instantiate(respawn, Vector3(0,0,0), Quaternion.identity);
    }

}

我难以让我的敌人重新产生,此刻我只有一个敌人跟着我。在他与我的聚光灯相撞之后,我正试图重新产生他。

我有一个预制的敌人,我想用它来创造更多敌人的实例一旦被摧毁。

我很确定上面的代码会破坏预制本身,因此无法创建更多实例,但我不确定如何破坏预制件的实例。上面的代码附在我的敌人身上。

2 个答案:

答案 0 :(得分:1)

我很确定您正在使用脚本销毁gameObject

if(theCollision.gameObject.name=="Spotlight") 
{
    Destroy(gameObject);
    Debug.Log("Dead");
    dead = true;
}

您应该在Destroy(theCollision.gameObject)那里。

然后在代码块的末尾销毁,而不是开始。

另外,Respawn函数应该在Update上或可以正常工作的地方,也可以在破坏之前调用触发函数上的Respawn,并且每次都应生成一个新函数。

不要忘记从Project窗口而不是Hierarchy来引用预制件。

答案 1 :(得分:0)

正如我在评论中所说,你需要记录自敌人死亡以来的时间,最好的地方就是你的重生者。以下是它的示例实现:

Respawner.js

#pragma strict

var enemyToSpawn : Enemy;
var respawnTime : int = 10; //In seconds.
private var dead : boolean = true;
private var deadTime : int = 0; //Time the enemy died, keep at 0
private var nextRespawn : int = 0; 

private function Respawn() {
    var enemy : GameObject = GameObject.Instantiate(enemyToSpawn.gameObject, transform.position, transform.rotation);
    enemy.GetComponent(Enemy).respawner = this;
}

function Update() {
    if (Time.time >= nextRespawn && dead) { //If the time is due and the enemy is dead
        Respawn(); //create a new enemy
        dead = false; //and tell our script it is alive
    }
}

function EnemyDied(theEnemy : Enemy) {
    dead = true;
    deadTime = Time.time;
    nextRespawn = Time.time+respawnTime;
    GameObject.Destroy(theEnemy.gameObject);
}

Enemy.js

#pragma strict

public var respawner : Respawner; // The respawner associated with this enemy

function OnTriggerEnter(collision : Collider) {
    if (collision.gameObject.name.Equals("Spotlight")) {
        respawner.SendMessage("EnemyDied", this); //Tell the respawner to kill us
    }
}

当然,你的敌人阶级还有其他任何必要的东西可以成为真正的敌人,而你的敌人也会产生影响。 这只是一个例子,不应盲目地复制粘贴。