--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2012-02-08

【Unity】にわとりを集めるゲームを開発してみる3

Unity[http://unity3d.com/japan]
QuadUI[http://blog.equals-equals.com/quadui]
SpriteManager[http://www.unifycommunity.com/wiki/index.php?title=SpriteManager]
作成中のゲーム(最新版)[にわとりゲーム」 ルールはそろそろできそう!マウス操作でトラップをよけつつ仲間をあつめる?

仲間キャラの実装とトラップの挙動を修正
このゲームはトラップ(敵キャラ)のターンと仲間キャラ出現のターンが交互に行われる
ターン制アクションゲーム風になる予定です。

このゲーム専用の画像素材がまだできてないので、今のところ完全にぴーちゃんの使い回しです。
早いところ差し替えたいです。
先週からこそこそ進めていたぴーちゃんは原作者に調整作業を丸投げしたので自分がやるよりちゃんとしたものになって完成しそうです(笑)
完成したら改めて記事を書こうかと思っています。

今日は、スクリプト内で、別スクリプトのメゾッドやプロパティにアクセスする場合に便利な方法を紹介します。

「にわとりゲーム」では、トラップやプレイヤー、ゲームシステムやスクリーンシステムはXXXXManagerって名前でコンポーネントを作成しています。
そしてそれぞれのマネージャには、管理対象となるオブジェクト達やシステムのための定義を多く含めています。
例えば、スクリーンシステムではScreenのサイズ情報を持っており、ゲームシステムではスコアやゲームレベルの情報を持っています。
もし、トラップの行動処理を書いているスクリプト内でゲームレベルによって挙動を変えたいと思った場合には
GameObject.FindやGetComponentでゲームシステムのコンポーネントを取得してあげればゲームレベルの値を
とることができるかと思います。
ですが、ゲームレベルを使用する度に毎回この取得処理を書くのは大変面倒です。

これを楽にする仕組みの一つとして、システムレベルのコンポーネントのクラス内にstaticで自分自身を持ってしまう方法があります。
シングルトンパターンと呼ばれる手法を少し変えたもので実装できます。
public class XXXManager : MonoBehaviour 
{
private static  XXXManager   mInstance;
public static  XXXManager   Instance{
      get { return mInstance };
}

void Start()
{
  if( mInstance == null ) {
      mInstance = this;
     } else {
                 Destroy( this );
             }
}
}
こんな感じです。

他のスクリプトでXXXManagerのGameLevelプロパティを参照したい場合は、
XXXManager.Instance.GameLevel
と書けばOKです、このやり方ならソースの可読性が向上しそうです。

また、タグ名などのあまり変化しない値に関しては
staticのプロパティやメンバで持たせてしまうのもよさそうです。
public static string EnemyTagName = {
      get { return "Enemy"; }
}
自分は、当たり判定処理の際にタグであたりの種類を区別していますが、
このタグ名はstaticのプロパティを使用しています。

毎回GetComponentをするのが面倒な場合は使用を検討して見てはいかがでしょうか?
スポンサーサイト

theme : ソフトウェア
genre : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。