0
現在、設定された位置で敵を生成するスクリプトがあります(ポイントスポーン)。私は、プレイヤーが例えばスポーンポイントから50メートル以内にいるときに、どうやってそれらをスポーンにすることができるのだろうと思っています。プレイヤーが周りにいるときにAIを生成する(Unity3d/C#)
ワンダーマネージャー:
public class WanderingManager : MonoBehaviour {
public Transform[] wanderingPoints;
void getNewPos(GameObject target){
target.SendMessage("setNewWanderPos", wanderingPoints[Random.Range(0, wanderingPoints.Length)].position, SendMessageOptions.DontRequireReceiver);
}
}
敵Managerスクリプト:
[RequireComponent(typeof演算(WanderingManager))]
public class EnemyManager: MonoBehaviour {
public int maxZombies = 7;
public float spawnInterval = 5.0f;
public string zombiesTag = "Zombie", playerTag = "Player";
public GameObject[] ZombiePrefabs = null;
private GameObject player = null;
private ArrayList Zombies = new ArrayList();
private float lastTime = -10.0f;
private bool loaded = false;
private WanderingManager manager;
void Start() {
manager = GetComponent<WanderingManager>();
findPlayer();
}
// Update is called once per frame
void LateUpdate() {
if(player == null && loaded){
StartCoroutine(Restart());
}
if(Time.time > lastTime){
for(int i=0; i<Zombies.Count; i++){
if(Zombies[i] == null){
Zombies.RemoveAt(i);
}
}
if(Zombies.Count > maxZombies){
Zombies.RemoveAt(Zombies.Count - 1);
}else{
Transform point = manager.wanderingPoints[Random.Range(0, manager.wanderingPoints.Length)];
GameObject Z = Instantiate(ZombiePrefabs[Random.Range(0, ZombiePrefabs.Length)], point.position, point.rotation * Quaternion.Euler(0.0f, Random.Range(0.0f, 180.0f), 0.0f)) as GameObject;
Zombies.Add(Z);
}
lastTime = Time.time + spawnInterval;
}
}
void findPlayer(){
GameObject newPlayer = GameObject.FindWithTag(playerTag);
if(newPlayer != null && !newPlayer.name.Contains("Clone")){
player = newPlayer;
loaded = true;
}else if(newPlayer != null && newPlayer.name.Contains("Clone")){
Destroy(newPlayer);
retrySearch();
}
}
void retrySearch(){
findPlayer();
}
IEnumerator Restart(){
yield return new WaitForSeconds(10.0f);
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
すべてのヘルプは理解されるであろう。ありがとう!
私はそれについてどう考えなかったか分かりません。ありがとう@oxrock! – papi
CPUパワーを節約したい場合は、if((player.transform.position - enemySpawn.transform.position).sqrMagnitude <50 * 50) 'を使用します。 Vector3.Distance()は 'Mathf.Sqrt()'を1つ使用します。この場合、CPUパワーが無駄になります。 –