2014-12-16 3 views
1

Я делаю игру «Run» в Unity, и я делаю прототип с мячом, у которого есть другие шары, следующие за ним. Если последователи ударяют объект, они будут уничтожены через некоторое время. Чтобы сделать так, чтобы у вас не кончились враги, я сделал триггер, который порождает новых врагов. В коде это функция Addzombies.Застрял с нерестилищными объектами в Unity

  1. Как мне сделать их икру не на той же точке, если я запустить его теперь они начать друг друга и отскакивают, как взрыв.
  2. Как я начну в воздухе, я попробовал, но они не spawn.

Моего код:

using UnityEngine; 
using System.Collections; 

public class Ball : MonoBehaviour { 

    public float InputForce; 
    public GUIText guiText; 
    public float rotationHorizontal; 
    public AudioClip ACeffect2; 
    public GameObject zombiePrefab; 

    void FixedUpdate() { 

     rigidbody.AddForce(Camera.main.transform.right * Input.GetAxis("Horizontal") * InputForce); 
     rigidbody.AddForce(Camera.main.transform.forward * Input.GetAxis("Vertical") * InputForce); 

     transform.position += Vector3.forward *InputForce * Time.deltaTime; 
     rotationHorizontal = Input.GetAxis("Horizontal") * InputForce; 
     rotationHorizontal *= Time.deltaTime; 
     rigidbody.AddRelativeTorque (Vector3.back * rotationHorizontal); 

    } 

    void OnCollisionEnter(Collision col){ 
     if (col.gameObject.name == "Zombie") { 
      Debug.Log ("Player geraakt, nu ben je eigenlijk dood"); 
     } 
     if (col.gameObject.name == "Obstakel1") { 
      Debug.Log ("Obstakel1 geraakt"); 
      audio.PlayOneShot(ACeffect2); 
      InputForce = 0; 
     } 
     if (col.gameObject.name == "Obstakel2") { 
      Debug.Log ("Obstakel2 geraakt"); 
     } 
    } 

    void AddZombies(int aantal){ 
     for (int i = 0; i < aantal; i++){ 
      GameObject go = GameObject.Instantiate(zombiePrefab, transform.position - new Vector3(0, 0, 7 + i),Quaternion.identity) as GameObject; 
      Zombie zb = go.GetComponent<Zombie>(); 
      zb.target = gameObject.transform; 
     } 
    } 

    void OnTriggerEnter(Collider col) { 
     Debug.Log ("Enter" +col.name); 
     if (col.tag == "AddZombies"){ 
      AddZombies(4); 
     } 
    } 

    void OnTriggerExit(Collider col) { 
     Debug.Log ("Leaving with" +col.name); 
    } 
} 
+0

Что подразумевает под началом друг на друг? – Dinal24

ответ

1

Я буду совет о том, как все могло быть сделано, но вы должны будете внести изменения, чтобы сделать его удовлетворить ваши требования

public Transform zombiePrefab; // From the editor drag and drop your prefab 


void addZombies() 
{ 
    // as you need them to be not on the same point 
    int randomX = Random.Range(-10.0F, 10.0F); 
    for (int i = 0; i < aantal; i++){ 
     // make a transform 
     var zombieTransform = Instantiate(zombiePrefab) as Transform; 
     zombieTransform.position = new Vector3(randomX, 0, 7 + i); 
     transform.GetComponent<Rigidbody>().enabled = false;    
     // make it enable when you need and add force to make them fall  
    } 
} 
0

Я хотел бы предложить пропускание количества зомби, чтобы пройти, и целое число, представляющее диапазон пространства, которое они могут метать икру в Тогда просто использовать UnityEngine.Random с указанным числом. для каждого зомби для создания нескольких разных координат для нереста зомби.

Что касается того, чтобы заставить их появляться в воздухе, просто увеличивайте координату y при создании экземпляра зомби.