▲前のページへ
次のページへ▼

UIの非表示と体力値の全表示


【目次】
コンバータの中にある「レベルスクリプト」のファイルを開く
制限時間を設ける
プレイヤーキルに対するスコア加算を加える
ファイルを上書き保存する


MOエンジンサンプルに搭載されている BattleInfo の UIを削除する

 ここから先はカスタマイズになります。
 MOエンジンで独自のUIを使いたい方は参考になるかと思いますが、現状のUIを一旦非表示にして、独自のUIを表示させてみましょう。

■ MOエンジンサンプルのUIプレハブの配置場所を開く
  まずはMOエンジンに含まれているサンプルのUIを、UIの入っているprefabデータから削除します。
  現在使用している UI の prefab は以下の場所に入っていますので、Unity から開いてください。

    Assets/moenginesample/Resources/UI/Game

  この場所を開くと、いくつかの prefab データが表示されるかと思います。
      ・ BattleInfo - バトル中に表示される画面上部のUI
      ・ GameStart - ビジュアルロビーからバトルに移行する最中に表示される「Game Start」のボタン
      ・ PlayerInfo - バトル中に表示される画面下部のUI
      ・ SkillPanel - 現在のところ未使用(将来的なアップデートで使用することがあるかも知れません)
  

■ BattleInfo の prefab データを Hierarchy に展開する
  バトル画面上部にあたる BattleInfo の情報から、非表示にするデータを削除します。
  BattleInfo.prefab をドラッグ&ドロップして、 Hierarchy タブに持って行きます。
  

  以下のように追加されれば問題ありません。
  

■ BattleInfo の prefab データを削除する
  元の BattleInfo.prefab については、右クリックで Delete しましょう。
  

  Delete する時に以下のようなポップアップウィンドウが現れますが、[Delete] をクリックしてください。
  

■ Hierarchy に登録された BattleInfo のデータを、Timer以外全て削除する
  Hierarchy に登録された BattleInfo のデータを、Timer に登録されているもの以外全て削除します。
  BattleInfo 中の GaugeRed, GaugeBlue, Background の3種を選択状態にし、右クリックから Delete します。
  

  BattleInfo の状態を以下のようにしてください。
  

■ BattleInfo を再び prefab 化する
  変更した BattleInfo を再び prefab 化します。
  Hierarchy タブ内の BattleInfo をドラッグ&ドロップして、 Assets/moenginesample/Resources/UI/ 内に持って行きます。
  

  以下のように再セットされれば問題ありません。
  


Unityスクリプト側で、タイマー以外のUI表示処理を停止させる

 今度は Unity スクリプトを開き、タイマー以外のUI表示処理を停止させます。

■ GameMainManager.cs を開く
  まずは以下のフォルダの中に含まれているファイルをダブルクリックして開いてください。

   Assets/moenginesample/Scripts/Scene/GameMainManager.cs

  

■ PlayerUI によるUI表示をOFFにする
  GameMainManager.cs を開いたら、その 84 行目(下図参照)にある命令を // でコメントアウトします。
  

  コメントアウトし、以下の状態にしてください。
  

  書き換えたら、MonoDevelop から [File] → [Save All] を選択して保存してください。
  

■ BattleInfo.cs を開く
  続けて、以下のフォルダの中に含まれているファイルをダブルクリックして開いてください。

   Assets/moenginesample/Scripts/UI/Game/BattleInfo.cs

  

■ BattleUI による UI 表示を OFF にする
  BattleInfo.cs を開いたら、以下の行で示す行を順に // でコメントアウトしていきます。
   1) 57 行目~ 60 行目をコメントアウト
    

   1) 101 行目~ 102 行目をコメントアウト
    

  書き換えたら、MonoDevelop から [File] → [Save All] を選択して保存してください。
  


全てのキャラクタの体力値を表示するようにする

 UIを非表示にする代わりに、全てのキャラクタの体力値について数値で表示してみましょう。

■ GameMainManager.cs を開く
  まずは以下のフォルダの中に含まれているファイルをダブルクリックして開いてください。

   Assets/moenginesample/Scripts/System/MOEngineInterface.cs

  

■ using 宣言を加える
  今回は簡単に OnGUI で体力値を表示させようと思いますので、以下の using 宣言文を追加してください。
using System;
using System.Collections.Generic;
  

■ フィールドの追加
  現在編集中の MOEngineInterface クラスに、ゲーム中に登場している UnitId のリスト情報と、
  OnGUIで表示するための GUI スタイルを追加します。
        // UnitIdリスト
        private List<int>       unitList = new List<int>();
        
        // GUIスタイル
        GUIStyle guiStyle = new GUIStyle(); 
        GUIStyleState styleState = new GUIStyleState(); 
  

■ OnGUI() メソッドの追加
  では、本来であれば unitList の追加処理と削除処理を先に組み込むのがセオリーだとは思うのですが、
  今回は説明の都合上、OnGUI()を先に追加しておきます。

  ここで unitList に対し foreach ループを掛けているところで、現在バトルシーン上に登場している
  全ユニット情報に対して処理を回しているものだと思ってください。
        /// <summary>
        /// OnGUI
        /// </summary>
        void OnGUI ()
        {
                foreach (int unitId in unitList)
                {
                        // UnitBase に含まれるユニット情報を取得する
                        UnitBase unit = UnitManager.Instance.FindUnit( unitId );
                        byte[] data = unit.UnitParam;
                        if( unit != null )
                        {
                                // HPのローカルメモリを抽出
                                int hp = BitConverter.ToInt32( data, (int)MoScriptLocalMemoryMap.CharacterCommon.HP );

                                // 表示位置の設定
                                Vector3 pos = unit.GameObject.transform.position;
                                var screenPos = UnityEngine.Camera.main.WorldToScreenPoint(pos);

                                // 表示色の設定
                                styleState.textColor = Color.yellow;

                                // GUI によるラベル表示
                                guiStyle.normal = styleState;
                                GUI.Label(new Rect(screenPos.x-20, Screen.height-screenPos.y-70, 120, 40), hp.ToString(), guiStyle);
                        }
                }
        }
  

■ OnUnitDelete 時に unitList からのデータ削除を行なう
  後は unitList に対する追加・削除の処理を組み込むだけです。
  MOEngineInterface.cs の順番的に「ユニット削除」が先に来ておりますので、
  unitList のデータ削除を OnUnitDelete() メソッドに組み込みましょう。
                        // 該当するunitをunitListから削除
                        for (int j = unitList.Count - 1; j >= 0; j--)
                        {
                                if( unitList[j] == int.Parse(param[i]) )
                                {
                                        unitList.RemoveAt(j);
                                }
                        }
  

■ OnUnitCreate 時に unitList へのデータ追加を行なう
  最後に OnUnitCreate() 時に unitList へのデータ追加を行ないます。
                        // unitListに登録
                        unitList.Add(unitId);
  

■ プログラムを保存する
  書き換えたら、MonoDevelop から [File] → [Save All] を選択して保存してください。
  


▲前のページへ
次のページへ▼