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