Unityでまず離れておきたい概念がゲームオブジェクトやコンポーネントです。
ゲームオブジェクトとは?
ゲームオブジェクトは、カメラやライト、3Dの物体などのパーツです。
「ゲームオブジェクト」から追加できるものがゲームオブジェクトです。
ゲームオブジェクトを取得する
取得する場合には、「Find」関数を使えばオブジェクト名から検索できます
GameObject CUBE;
CUBE= GameObject.Find("BIG CUBE");
ゲームオブジェクトの表示・非表示
「SetActive」で、アクティブ化、非アクティブ化できます。
GameObject CUBE;
CUBE= GameObject.Find("BIG CUBE");
CUBE.SetActive(true);
メッセージを送信
「SendMessage」で、ゲームオブジェクトへメッセージを送信(関数発動)ができます。
GameObject CUBE;
CUBE= GameObject.Find("BIG CUBE");
CUBE.SendMessage("ApplyDamage", 5.0);
最初から非アクティブのものをFind関数で見つけられない?
最初から非アクティブにしてあるゲームオブジェクトを、Find関数で見つけてからアクティブにしようと思ったらできませんでした。
GameObject oResult;
oResult = GameObject.Find("oResult");
if(oResult){
oResult.SetActive(true);
}
どうやら最初から非アクティブのものはFind関数で探すデータベース?には最初から入っていないようです。
対策ですが
「this.transform.Find(“oResult”);」のようにすることで非アクティブでも子供のオブジェクトを探せます。
また、「 [SerializeField] GameObject oResult;」のようにしてインスペクターで事前に割り当てておくと利用できます。
ただこのような場合にはprefab化して、必要に応じて生成したほうが基本的にはよいのでしょう。
プレファブ
ヒエラルキーからアセットへドラッグするとプレファブ化できます。
プレファブにすると、スクリプトから生成して出現させることができます。
リソースから読み込んで生成し、大きさなどを変更する場合以下のようになります。
//リソースのプレファブをロード。
GameObject prefab = Resources.Load<GameObject>("Prefabs/m-0");
//出現させます
GameObject Obj = (GameObject)Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);
Obj.name = "m”;
//親オブジェクトを指定することもできます
Obj.transform.SetParent(canvas.transform,false);
//--位置を指定しなおす
var t = Obj.GetComponent<RectTransform>();
p = t.localPosition;
p.x = float.Parse(sitems[0]);
p.y = float.Parse(sitems[1]);
t.localPosition = p;
//--大きさを指定しなおす
Vector2 sd = Obj.GetComponent<RectTransform>().sizeDelta;
sd.x = float.Parse(sitems[2]);
sd.y = float.Parse(sitems[3]);
t.sizeDelta = sd;
//---透明度を指定しなおす
Color color = Obj.GetComponent<Image>().color;
color.a = 0f;
Obj.GetComponent<Image>().color = color;
コンポーネントとは?
ブロック化された機能といった感じです。コンポーネントメニューにあるものが、コンポーネントです。
インスペクタでゲームオブジェクトを選択したときにでてくる「Transoform」「Script」などがコンポーネントです。
スクリプト操作
スクリプトからアクセスするには「ゲームオブジェクト.GetComponent<コンポーネント名>().プロパティ」のようにアクセスできます。
以下は物体内の「material」コンポーネントのテクスチャにアクセスしています。
g.GetComponent<Renderer>().material.mainTexture = mytexture;
アセットとは?
Unityでシーンに使う様々な素材を登録しておく場所です。
ただしゲームからスクリプトで読み込むには「Resources」フォルダ内に配置しておくなどの処理が必要です。
アセットマネージャー
Unityの特色の1つは豊富なアセットです。
無料から有料、各種モデルからエフェクトまで用意されています。
使用するには「ウィンドウ>アセットマネージャ」から起動。
有名な無料アセットは、Unityちゃんのモデルでしょうか。
Unity-Chan! Model | 3D Characters | Unity Asset Store
「Add to asset」で追加後、パッケージマネージャからダウンロードします。
ダウンロード、インポートが終わってようやく実際に必要なものをチェックしてインポートできます。
プレファブをシーンにドラッグするだけで、Unityちゃんのモデルが配置できます。
本ブログのUnity関連記事一覧はこちら。