在敌人预制件被摧毁后重生


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);
    }
}

很难让我的敌人重新生成,目前我只有一个敌人跟着我。我试图在他与我的聚光灯相撞后重新生成他。

我有一个预制敌人,我想在敌人被摧毁后使用它来创建更多实例。

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

我很确定你正在用脚本破坏gameObject

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

你应该有Destroy(theCollision.gameObject)

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

此外Respawn函数应该在Update或其他东西上才能工作,你也可以在销毁之前调用触发器函数Respawn,它每次都应该生成一个新的。

不要忘记从您那里引用预制件Project窗口不Hierarchy

正如我在评论中所说,您需要跟踪敌人死亡后的时间,而最好的位置是在您的重生对象中。下面是它的示例实现:

重生者.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);
}

敌人.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
    }
}
当然,你的敌人

职业会有一些其他必要的东西来成为真正的敌人,你的重生者可能会产生影响。这只是一个例子,不应该盲目复制粘贴。

最新更新