1

実行時(ユーザーがボタンを押したとき)に LineRenderers を作成しようとしています。

私の問題:複数の LineRenderer を作成することはできません。2 つ目の作成に行くと、LineRenderer オブジェクトは常に NULL です。

私は何を間違っていますか?複数の LineRenderer を作成するために必要なことについてアドバイスをいただけますか?

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

2 に答える 2

6

イリジウムが指摘しているように、ゲームオブジェクトに追加できるのは各タイプのコンポーネントを1つだけです。したがって、新しいラインレンダラーごとに新しいゲームオブジェクトを作成する必要があります。ここでこれを行う簡単な方法は、変更することです。

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

に:

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

その後、ラインレンダラーのゲームオブジェクトにアクセスする必要がある場合は、lRend.gameObjectを使用してアクセスできます。またはlines[index].gameObject。

于 2012-06-22T18:42:43.063 に答える
2

簡単なGoogleがこのページを表示します:http://answers.unity3d.com/questions/47575/create-a-linerender-in-c.htmlこれは、同じタイプの複数のインスタンスを1つに追加できないことを示唆していますGameObject。代わりに複数のGameObjectインスタンスを使用する必要があることを示しています。

于 2012-06-15T06:18:24.267 に答える