UnityでReflection入門
芸者東京エンターテインメント株式会社
竹下義晃
自己紹介
竹下 義晃
Twitter,github,etc : takezoux2
● 芸者東京エンターテインメント株式会社
● 普段はサーバーとクライアント両方開発
● サーバーはScala+Play framework
● クライアントはUnity時々NativeCode
普段は、隔週水曜に開催されているScala勉強会
によく出てます。
Reflectionとは
実行時にクラス情報を取得し、実行する技術のこと
● Assembly内のクラス一覧
● クラスのフィールド、プロパティ、メソッド
● Attribute
など情報を取得できる。
どういうことに使われているか?
● シリアライズ
● Object-relational mapper
● Webの画面表示のためのテンプレートエンジン
● ダックタイピング
弊社での使用例
● サーバーから送られたJSONをインスタンスに
変換(シリアライズ)
● インスタンスをSqliteへ保存/読み込み(O/R
mapper)
Unityでは?
System.Reflection名前空間にだいたい入ってい
る。
Unityに入っているMonoのsubsetでもReflection
機能は使えます。
文章、理解困難。実演 とても大事!
https://github.com/takezoux2/unity-reflection-
sample-at-techbuzz
● フィールドなどの列挙
● SendMessageみたいな機能
● JSONへのシリアライズ
注意点
● コンパイラーがチェックしてくれない
● 実行速度は普通にメソッド等を呼び出すより遅
い
iOSでの注意点
● プロパティからのgetがiPhoneなどの実機でで
きない
-> 全てフィールドにする
余談
名前空間System.Reflection.EmitやMicrosoft.
CSharpなどCILをいじるレベルのものは、iOS上で
は使えなかった
最近はReflectionだけじゃ物足りないのでCecil
(http://www.mono-project.com/Cecil)
を使ってごにょごにょしてたりもします。
ご清聴ありがとうございました。
懇親会にも参加するので、もっと詳しいこと知りた
い方はそちらで聞いてください。

Unityでreflection入門