2016-07-23 8 views
0

ユニティプロジェクト用の新しい要素を作成しようとしていますが、私はオブジェクト全体をUIオブジェクトとしてレンダリングする必要があります。これまでの私の現在のスクリプト。キャンバスの親としてオブジェクトを作成する方法

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をUI Canvasの下に置くか、UI Canvasの親にする必要がありますか?なぜあなたは 'Selection.activeTransform'を持っていますか?あなたの質問についてはあまりにも多くの質問があります。 – Programmer

+0

@Programmerオブジェクト「スイッチ」を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>(); 
} 
関連する問題