2016-07-23 4 views
0

Я пытаюсь создать новый элемент для моего проекта единства, но мне нужно единство, чтобы весь объект был объектом UI, как это сделать. Мой текущий сценарий до сих пор.Как создать объект как родительский элемент Canvas

using UnityEditor; 
using UnityEngine; 

public class OptionSwitch : MonoBehaviour { 

    [MenuItem ("GameObject/UI/Switch")] 
    static void Switch(){ 
     GameObject go = new GameObject("switch"); 
     go.transform.parent = Selection.activeTransform; 
     go.transform.localPosition = Vector3.zero; 
    } 
} 

Это будет переключатель параметров с кнопкой с обеих сторон текстового поля с указанием активной опции.

Я сделал больше исследований и придумал этот код.

using UnityEditor; 
using UnityEngine; 

public class OptionSwitch : MonoBehaviour { 

    [MenuItem ("GameObject/UI/Switch")] 
    static void Switch(){ 

     if (GameObject.Find ("Canvas") != null) { 

      // Define Components 
      GameObject Canvas = GameObject.Find("Canvas"); 
      GameObject Switch = new GameObject("Switch"); 
      GameObject Previous = new GameObject("Previous Button"); 
      GameObject Next  = new GameObject("Next Button"); 
      GameObject Text  = new GameObject("Textbox"); 


      // Place Switch 
      Switch.transform.parent = Canvas.transform; 
      Switch.transform.localPosition = Vector3.zero; 

      // Place Previous Button 
      Previous.transform.parent = Switch.transform; 
      Previous.transform.localPosition = Vector3.zero; 

      // Place Text Field 
      Text.transform.parent = Switch.transform; 
      Text.transform.localPosition = Vector3.zero; 

      // Place Next Field 
      Next.transform.parent = Switch.transform; 
      Next.transform.localPosition = Vector3.zero; 
     } 
    } 
} 
+0

Итак, что теперь происходит? Что работает, а что нет? Кроме того, чтобы быть ясным, вы хотите, чтобы новый созданный GameObject находился под холстом пользовательского интерфейса или был родителем холста пользовательского интерфейса? Почему у вас есть «Selection.activeTransform»? Слишком много вопросов по вашему вопросу. – Programmer

+0

@Programmer Я хочу, чтобы объект «switch» был дочерним элементом Canvas UI, я знаю, что вы можете найти объект по имени, но я хочу его создать, чтобы он нашел холст, даже если имя было изменено, это что не работает, я продолжал искать и нашел способ сделать объект дочерним элементом холста, но не тогда, когда холст не называется «Холст». – Jdoonan

+0

Ваш комментарий на самом деле объясняет вашу проблему больше, чем ваш вопрос. Проверьте мой ответ. – Programmer

ответ

0

Прежде всего, вы должны найти Canvas GameObject. Canvas GameObject имеет прикрепленный к нему компонент Canvas. Итак, вы используете FindObjectOfType, чтобы найти компонент Canvas. Затем вы можете преобразовать экземпляр этого сценария Canvas в GameObject. Исправление для вашего исходного кода:

[MenuItem("GameObject/UI/Switch")] 
static void Switch() 
{ 
    //Create new GameObject 
    GameObject go = new GameObject("switch"); 


    //Find Canvas in the Scene 
    Canvas canvas = (Canvas)GameObject.FindObjectOfType(typeof(Canvas)); 

    //Get Canvas GameObject 
    GameObject canvasGameObject = canvas.gameObject; 

    //Make the new GameObject child of the Canvas 
    go.transform.parent = canvasGameObject.transform; 
    go.transform.localPosition = Vector3.zero; 

    //Change the new GameObject Layer to UI 
    go.layer = 5; //Or go.layer = canvasGameObject.layer; 

    //Add Rect Transform to it 
    go.AddComponent<RectTransform>(); 
} 
Смежные вопросы