2012-06-15 1 views
1

Я пытаюсь создать LineRenderers во время выполнения (когда пользователь нажимает кнопку).Не позволяйте мне создавать больше, чем 1 LineRenderer

Моя проблема: Я никогда не могу создать более одного LineRenderer. Когда я иду на создание второго, объект 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; 
     } 
} 
+0

Пожалуйста, уточните свой вопрос, указав, где именно вы получаете нулевой объект. Вы пробовали отлаживать код? когда вы нажмете второй раз, попробуйте проверить значения. – MSUH

+0

Используйте общую форму AddComponent. – Jessy

+0

Если вы не можете добавить второй компонент того же типа, то он должен быть ясным, вам нужно добавить второй игровой объект с linerenderer .... Пожалуйста, отметьте правильный ответ. –

ответ

2

Быстрый Google приносит эту страницу: http://answers.unity3d.com/questions/47575/create-a-linerender-in-c.html которая предполагает, что вы не можете добавить несколько экземпляров одного и того же типа к одному GameObject, и предполагает, что несколько GameObject экземпляры должны использоваться вместо этого.

6

Как указывает Иридиум, вы можете добавить только один компонент каждого типа в игровой объект. Таким образом, вы хотите создать новый игровой объект для каждого нового linerenderer. Простой способ сделать это здесь, чтобы изменить:

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

к:

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

Затем, если вам нужно получить доступ GameObject в linerenderer позже вы можете сделать это lRend.gameObject. Или строки [index] .gameObject.

+0

Дополнение: Насколько я знаю, вы можете добавить в GameObject несколько компонентов одного и того же типа. Но в этом случае ограничение состоит в том, что для GameObject может быть только Renderer. – Kie

Смежные вопросы