ことの一つは、利用可能な位置の動的なリストではなく、配列を保っています。 (これはUnityエディタのインターフェースでも同様にシリアル化され、同じ方法で変更されます)。この方法では、リストから敵に割り当てられた位置を削除することができます。ここではそれがどのように見えるかのアイデアです:
public List<Transform> firedpoints;
// Returns available firing position, if any
public Transform GetRandomFiringPosition()
{
if (firedpoints.Count > 0)
{
// Get reference to transform, then remove it from list
int newPositionIndex = Random.Range (0, firedpoints.Length);
Transform returnedPosition = firedpoints[newPositionIndex];
firedpoints.RemoveAt(newPositionIndex);
return returnedPosition;
}
else
{
// Or you can specify some default transform
return null;
}
}
// Makes firing position available for use
public void RegisterFiringPosition(Transform newPosition)
{
firedpoints.Add(newPosition);
}
このコードは、敵がへの参照を持つべきである(または、あなたはコードを少し変更することができますし、どのシーンで単一のオブジェクト上のスクリプトにする必要がありますクラスをシングルトンにして、そのメソッドを直接参照せずに呼び出すことができます)。敵が新しい位置を必要とするときはいつでも、GetRandomFiringPosition()
を呼び出し、返されたTransform
を将来の参照用に変数に格納することができます。
ポジションを再び利用できるようにする条件を決定していませんが、持っていればRegisterFiringPosition()
に電話してリストに戻すことができます。素晴らしい副作用として、これはまた、例えば、プレイヤーによって誘発されたイベントに応答して、新しい位置を敵に割り当てることを可能にする。
希望すると便利です。ご質問がある場合はお知らせください。
Hmは解決策を考えましたが、明確にするために、「firedpoints」は何ですか?どのように人口を集め、一度敵がそのポジションの1つに向かうと、ゲームの残りの部分で他の敵には利用できないと考えられるのか、それとも再び使用のために解放するいくつかの条件があるのでしょうか? – Serlite
はい、一度敵がその位置の1つに移動すると、他の敵には利用不可能でなければならず、再度使用するための条件はありません(条件も必要です)。そしてfiredpointsはpublicですTransform arrayインスペクタ。 @Serlite –
私は、next_positionメソッド(新しい位置の変換を返す)を持つposition_distributorクラスが必要であり、navmesh、setdestinationはこのディストリビュータクラスメソッドを呼び出して新しい位置を取得すると考えています。しかし、私は初心者のためにこれをすることができません:-( –