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

}

敵を再出現させるのに苦労しています。現時点では、敵が 1 体しか私を追っていません。彼が私のスポットライトと衝突した後、私は彼を再出現させようとしています.

Enemy が破壊されたら、これを使用して Enemy のインスタンスをさらに作成したいと考えています。

上記のコードがプレハブ自体を破棄しているため、これ以上インスタンスを作成できないと確信していますが、プレハブのインスタンスを破棄する方法がわかりません。上記のコードは私の敵に添付されています。

4

2 に答える 2

0

コメントで述べたように、敵が死亡してからの時間を追跡する必要があり、それを行うのに最適な場所は respawner オブジェクトです。実装例を次に示します。

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

もちろん、敵のクラスには、実際の敵になるために必要なものが他にあり、リスポーナーが影響を与える可能性があります. これは単なる例であり、やみくもにコピペしてはいけません。

于 2013-10-05T16:21:08.187 に答える