2012年4月28日土曜日

Unity: スクリプティングC#初歩 - Generics

GameObjectが保持している特定のコンポーネントにC#スクリプトからアクセスする書式をまとめてみました。

例として、myScriptというコンポーネントをGameObjectにアタッチしている場合を想定します。

JavaScriptでは以下のような感じ。
var aScript : myScript = GetComponent(myScript);
aScript.someData = 1;

C#での冗長的な書き方4態。
// キャストで型変換
myScript aScript = (myScript)GetComponent(typeof(myScript));
aScript.someData = 1;

// asで型変換
myScript aScript2 = GetComponent(typeof(myScript)) as myScript;
aScript2.someData = 1;

// キャストで型変換しvar型推論
var  aScript3 = (myScript)GetComponent(typeof(myScript));
aScript3.someData = 1;

// asで型変換しvar型推論
var  aScript4 = GetComponent(typeof(myScript)) as myScript;
aScript4.someData = 1;
varは右辺の値で型が決まるので、myScriptのsomeDataにアクセスする為には、キャストもしくはasで型を指定しておかなければなりません。

C#にはC++のテンプレートに似た機能として、ジェネリックスというものがあります。
UnityのGetComponent()関数はジェネリックスに対応しているので、上記の冗長的なコードを以下のように書く事ができます。
myScript aScript = GetComponent<myScript>();
aScript.someData = 1;

var aScript2 = GetComponent<myScript>();
aScript2.someData = 1;
ジェネリックスを使用すると、<>の中で指定した型専用のGetComponent()関数を生成する(インスタンス化)ので、面倒なキャストやasを書かなくてすみます。

こちらも合わせてどうぞ。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...