void Update() { if (lastSpawnTime + DeltaTime < Time.time) { float value = UnityEngine.Random.Range(0, sumProba); float accum = 0; AIMoveToPlayer mobType = null; for (int i = 0; i < mobs.Length; i++) { if (value > accum) { accum += mobs[i].probability; if (value < accum) { mobType = mobs[i].gameObject; break; } } } if (mobType == null) { return; } InstantiateType(mobType); lastSpawnTime = Time.time; } }
private void InstantiateType(AIMoveToPlayer mobPrototype) { for (int i = 0; i < spawners.Length; i++) { Vector3 delta = spawners[i].position - Character.position; if (delta.magnitude > MinDelta && delta.magnitude < MaxDelta) { cache.Add(spawners[i]); } } if (cache.Count == 0) { return; } AIMoveToPlayer newOne = Instantiate(mobPrototype, cache[random.Next(cache.Count)].transform); newOne.transform.localPosition = new Vector3(); newOne.Target = Character.gameObject; newOne.gameObject.SetActive(true); cache.Clear(); }