坚持在Unity中生成对象

时间:2014-12-16 23:44:43

标签: c# unity3d unityscript gameobject

我正在做一个'跑步' Unity中的游戏,我正在制作一个带有球的原型,其他球跟随着他。如果追随者击中一个物体,他们会在一段时间后被摧毁。为了让你不会被敌人赶走,我制造了一个能够产生新敌人的触发器。在代码中,这是函数Addzombies

  1. 如果我现在运行它们,如何让它们不会在同一点产生 彼此开始并在爆炸时反弹。
  2. 我如何在空中开始,我尝试过,但他们没有 产卵。
  3. 我的代码:

    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);
        }
    }
    

2 个答案:

答案 0 :(得分: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     
    }
} 

答案 1 :(得分:0)

我建议传递要传递的僵尸数量,以及一个表示它们可以产生的空间范围的整数。然后只需使用UnityEngine.Random和每个僵尸的所述整数来产生几个不同的坐标来产生僵尸。

至于让它们在空中产生,只需在实例化僵尸时增加y坐标。