Google

2012年8月6日月曜日

Unityでコインゲー開発話:ソース解説1

今回はデモのソースを軽く解説します。
UnityはC#とJavaScript、Booが使えますが、実務ではC#以外あまり見ません。
Jsって遊ぶにはいいんですが、現場の作業となると厳しい時があります。

ということでまずアイテムクラスから。
ManagedItemBaseクラスは全てのアイテムの基礎となるクラスです。
コインゲーは様々なアイテムがあるので、実際にはここからコインクラスに派生したりします。


まずメンバ変数から。

public static InstanceManager m_instance_mgr;

自分が落ちた際、自分自身が死んだことを通知するために必要です。
コインインスタンスは複数生成されるので、staticにして全インスタンスで共通にします。
属性がpublicなのは記載時のミスです。private等でアクセッサ設定が望ましいでしょう。

private static float m_fall_pos = -1f;

これは死んだことにするY位置で、これも全インスタンス共通です。
判定コライダーを置いて、とかやるとコインが飛び散ることを計算する必要があったので、敢えてこうしました。
一見遅そうにみえて、この方式では大した負荷にはなりません。

public int m_id;

この変数で各インスタンスにナンバリングしています。
Unity側の管理からもidが付きますが、仕組みに引っ張られると今後のVerUp等で嫌なので自前で管理しています。
が、これをなぜpublicにするのか。
C#にはアクセッサという便利な宣言方法があります。
しかしUnityではpublicの単純なメンバにするとインスペクタに表示され、実行前は永続的、実行中はその間だけ変数を修正できるという利点があります。
また、実行中にどのインスタンスがが出ているのか?という管理にも役立ちます。
けっして適当にpublicになっているわけでは有りません。

続いて関数でやっていること。

void Start()

ここではインスタンスマネージャを検索して保存しています。
最初の1個目以外は同じ処理を行いません。

void Update()

常に自分のY位置を検索しています。
実はコードからtransformを参照すると、内部でGetComponentが走るため、この処理自体は重い構造です。
早くしたければtransformを事前に参照するメンバ変数を持つと良いでしょう。
y位置が変数の値より下ならonFallを呼びます。

void onFall()

これも本来ならprivateかpublic virtualにすべきでしたね。
死んだ際の処理をここに記載します。
インスタンスマネージャに自分が死んだことを通知しています。

次回はマネージャ側を解説します。


0 件のコメント:

コメントを投稿