例として、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 件のコメント:
コメントを投稿