//////////////////////////////////////// ー広告ー ////////////////////////////////////////
こんな感じで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^
すごい基本的なことなのかな~?
やっぱ独学はアカンね・・・^^;
↓こういうところで本格的に勉強したいですな!