void SpawnZombie() { ZombieTextureData zombie = zombie_texture_data[Random.Range(0, zombie_texture_data.Count)]; GameObject zombie_obj = Instantiate(zombie.GetZombieObject(), gameObject.transform.position, Quaternion.identity); Renderer[] r = zombie_obj.GetComponentsInChildren <Renderer>(); r[0].sharedMaterial = ZombieTextureData.skins[Random.Range(0, ZombieTextureData.skins.Count)]; r[1].sharedMaterial = zombie.clothes[Random.Range(0, zombie.clothes.Count)]; Zombie z = (Zombie)zombie_obj.GetComponent <CharacterDataController>().character; //Material m = new Material(zombie.clothes[Random.Range(0, zombie.clothes.Count)]) //{ // color = new Color() { r = Random.Range(0.5f, 1f), a = Random.Range(0.5f, 1f), b = Random.Range(0.5f, 1f), g = Random.Range(0.5f, 1f) } //}; z.rigidbodies = zombie_obj.GetComponentsInChildren <Rigidbody>(); z.colliders = zombie_obj.GetComponentsInChildren <Collider>(); foreach (Rigidbody rb in z.rigidbodies) { rb.isKinematic = true; rb.detectCollisions = false; } foreach (Collider c in z.colliders) { if (!(c is CharacterController)) { c.enabled = false; } } }
// Start is called before the first frame update void Start() { //for each zombie, make possible skin array for that zombie, then make possible clothing array for it too if (zombie_texture_data == null) { zombie_texture_data = new List <ZombieTextureData>(); GameObject[] zombie_prefabs = Resources.LoadAll <GameObject>("Prefabs/Zombies"); Material[] mats = Resources.LoadAll <Material>("Materials/ZombieMaterials"); for (int i = 0; i < zombie_prefabs.Length; i++) { zombie_texture_data.Add(new ZombieTextureData(zombie_prefabs[i])); } for (int i = 0; i < mats.Length; i++) { string s = mats[i].name; if (s.StartsWith("skin")) { ZombieTextureData.AddSkin(mats[i]); //all skins work for every model, so just make a static variable for it } else if (s.StartsWith("clothing")) { int index = int.Parse(s.Substring(s.Length - 1)); zombie_texture_data[index].AddClothing(mats[i]); } } } StartCoroutine("BeginSpawnZombie"); }