不允许我创建超过 1 个线渲染器

本文关键字:允许我 创建 不允许 | 更新日期: 2023-09-27 18:37:11

我正在尝试在运行时(当用户按下按钮时)创建LineRenderers。

的问题:我永远无法创建多个线渲染器。当我去创建第二个时,LineRenderer 对象始终为 NULL。

我做错了什么?您能就创建多个线渲染器需要做什么提供建议吗?

public class AppInit : MonoBehaviour {
        public Vector3[] TEST_VERTICES;
        public const int SPEED = 5;
        public List<LineRenderer> lines;
        // Use this for initialization
        void Start () {
             TEST_VERTICES = new Vector3[10] {new Vector3(0,0,0), new Vector3(10,10,10), new Vector3(30,10,50), new Vector3(30,40,50), 
                                                                            new Vector3(10,30,90), new Vector3(10,20,40), new Vector3(50,20,40), new Vector3(70,80,90), 
                                                                            new Vector3(10,70,20), new Vector3(60,10,0)};
             lines = new List<LineRenderer>();
        }
        // Update is called once per frame
        void Update () {
             float x = Input.GetAxis ("Horizontal") * Time.deltaTime * SPEED;
             float z = 0;
             float y = Input.GetAxis ("Vertical")   * Time.deltaTime * SPEED;
             gameObject.transform.Translate (new Vector3(x,y,z));
        }
        void OnGUI() {
             if (GUI.Button (new Rect(10,10,100,20), "Create"))
                 createString(TEST_VERTICES);
        }
        public bool createString( Vector3[] vertices ) {
             LineRenderer lRend = gameObject.AddComponent ("LineRenderer") as LineRenderer;
             //LineRenderer lRend = new LineRenderer();
             lines.Add(lRend);
             Debug.Log ("IS NULL"+(lRend == null).ToString ());
             lRend.SetColors (new Color(100,0,0,100), new Color(0,0,100,100));
             lRend.SetWidth(10, 1);
             lRend.SetVertexCount(vertices.Length);
             for (int i=0; i<vertices.Length; i++)
                 lRend.SetPosition(i, vertices[i]);
             return true;
        }
}

不允许我创建超过 1 个线渲染器

正如铱星指出的那样,您只能将每种类型的一个组件添加到游戏对象中。因此,您希望为每个新的线渲染器创建一个新的游戏对象。在这里执行此操作的简单方法是更改:

LineRenderer lRend = gameObject.AddComponent("LineRenderer") as LineRenderer;

自:

LineRenderer lRend = new GameObject().AddComponent("LineRenderer") as LineRenderer;

然后,如果您稍后需要访问行渲染器的游戏对象,您可以通过 lRend.gameObject 进行操作。或行[索引].游戏对象。

快速的谷歌会弹出这个页面:http://answers.unity3d.com/questions/47575/create-a-linerender-in-c.html,这表明您不能将同一类型的多个实例添加到单个GameObject,并建议应使用多个GameObject实例。