| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | using System.Collections;using System.Collections.Generic;using UnityEngine;using Mirror;public class zombieManager : NetworkBehaviour{    public float radius;    public bool drawGizmos;    public int maxZombiesAtOnce;    public GameObject[] zombiesToSpawn;    public List<GameObject> currentZombies;    void Start()    {            }    float t = 0;    void Update()    {        if (!isServer) { return; }        //waiting for zombie refresh rate        if (t < 5f)        {            t += Time.deltaTime;            return;        }        foreach(netPlayer player in FindObjectsOfType<netPlayer>())        {            zombieForPlayer(player);        }            }    void zombieForPlayer(netPlayer player)    {        if (player.currentZombies.Count < maxZombiesAtOnce)        {            Vector3 hit;            if (RandomPoint(player.transform.position, radius, out hit))            {                Debug.Log($"Distance to new point is {Vector3.Distance(player.transform.position, hit)}");              //  bool notTooClose = (Vector3.Distance(netPlayerStats.localPlayer.transform.position, hit) >= 10);               // Vector3 screenPoint = Camera.main.WorldToScreenPoint(hit);               // bool playerCanSee = (screenPoint.x > 0 && screenPoint.x < Screen.width && screenPoint.y > 0 &&                    //                 screenPoint.y < Screen.height);                    GameObject newZombie = Instantiate(zombiesToSpawn[Random.Range(0, zombiesToSpawn.Length - 1)], hit, Quaternion.identity);                    player.currentZombies.Add(newZombie);                    currentZombies.Add(newZombie);                    newZombie.GetComponent<zombieBehaviour>().m_zombieArea = this;                    newZombie.GetComponent<zombieBehaviour>().player = player.transform;                    NetworkServer.Spawn(newZombie);                                    t = 0;                            }        }    }    public Transform giveMePlayer()    {                netPlayer[] players = FindObjectsOfType<netPlayer>();        if (players.Length <= 0)        {            return null;        }        return players[Random.Range(0, players.Length-1)].transform;    }    bool RandomPoint(Vector3 center, float range, out Vector3 result)    {        for (int i = 0; i < 30; i++)        {            Vector3 randomPoint = center + Random.insideUnitSphere * range;            UnityEngine.AI.NavMeshHit hit;            if (UnityEngine.AI.NavMesh.SamplePosition(randomPoint, out hit, 1.0f, UnityEngine.AI.NavMesh.AllAreas))            {                result = hit.position;                return true;            }        }        result = Vector3.zero;        return false;    }    void OnDrawGizmos()    {        if (drawGizmos)        {            Gizmos.color = Color.green;            Gizmos.DrawWireSphere(transform.position, radius);        }    }}
 |