buttonのPrefabを表示するのに苦労した話

//////////////////////////////////////// ー広告ー ////////////////////////////////////////

こんな感じでSTARTボタンを押したらゲームがスタートするようにしたかったんです。そのボタンをPrefabで作ろうとしたらいろいろエラーが出て苦しみました・・・

まずボタンが表示されませんでした。

なんでかというとボタンとかテキストはCanvasの子オブジェクトにしてやらないと表示されないようです。ボタンのPrefabのBTstartはCanvasの外にできちゃってます。これはアカン。

いろいろ調べてCanvasの子オブジェクトとしてPrefabを作る方法を発見。

public class test : MonoBehaviour { 

public GameObject canvas;//キャンバス
public GameObject PutStart; //スタートボタンのプレファブを入れる箱 

void Start () { 

GameObject prefab = (GameObject)Instantiate (PutStart); 

prefab.transform.SetParent (canvas.transform, false); 
} 

void Update () { 
} 

}

これでいけるはずなんですが・・・

こんなエラーを吐かれてしまう。

UnassignedReferenceException: The variable canvas of MainJ has not been assigned.
You probably need to assign the canvas variable of the MainJ script in the inspector.

はぁ~ん? 何を言っとるのかわからんのう~

public class test : MonoBehaviour { 
public GameObject PutStart; //スタートボタンのプレファブを入れる箱 
public RectTransform canvas;//キャンバス 

void Start () { 
Instantiate(PutStart, new Vector3(4, 12, -299), 
Quaternion.identity).name = "PreStrat"; canvas=GameObject.Find("Canvas").GetComponent<RectTransform>(); 
PutStart.transform.SetParent(canvas.transform, false); } 

void Update () { } 

}

Canvasが見つからないのかと思ってFindで見つけようとか訳のわからんことをしてみる。

すると今度はこんなエラーを吐きだしたのでった。

Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption.

どうもこれはPrefab自身を親オブジェクトに設定しようとすると出るエラーらしい。

なんかよくわからんけど私のPrefabの作り方がおかしかったぽい。

public class test : MonoBehaviour { 

public GameObject canvas; //キャンバス 
public GameObject PutStart; //スタートボタンのプレファブを入れる箱 

GameObject ObjK; //ちゃんとInstantiateするための箱 

void Start () { 
ObjK = Instantiate(PutStart, new Vector3(3.9f, 18.6f, -298.6f), Quaternion.identity); 

canvas = GameObject.Find("Canvas"); 

ObjK.transform.SetParent(canvas.transform, false); } 

void Update () { 
} 

}

このように書くと

ちゃんとCanvas内にクローンが作れて

やっとボタンを表示することができました^0^

すごい基本的なことなのかな~?

やっぱ独学はアカンね・・・^^;

↓こういうところで本格的に勉強したいですな!




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です