Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回はユニティちゃんが動いていない状態の時に画面の右下にパーティーのHPやMPを表示したパネルを開き、移動キーやボタンを押した時にそのパネルを閉じるようにします。前回はコマンド画面等でのボタン選択の速度を上げる設定をしました。ユニティちゃんのRPGを作ってみよう13ー次のボタンの選択速度を上げるーユニティちゃんのRPGでコマンド等の選択で次のボタン選択速度を上げる設定をしたいと思います。Unityを使った3Dゲームの作り方(かめくめ)ユニティちゃんの3DRPGを作っていくカテゴリです。gametukurikata.comから見ることが出来ます。スポンサーリンクパーティーのHPやMPを表示するUIの作成まずはパーティーのHPやMPを表示するUIを作成していきます。Villageシーンのヒエラルキーで右クリックからUI→Canvasを選択し、名前をCharacterStatusとします。Scalerの設定を変更します。Sizeにして画面サイズに応じてUIのScaleを変更します。Resolutionには基本となるスクリーンサイズを指定します。ModeはExpandにし、画面サイズに応じて広がるようにします。CharacterStatusを選択した状態で右クリックからUI→Panelを選択し、名前をCharacterStatusPanelとします。シーンビューでCharacterStatusPanelのサイズを調整し、右下に表示されるようにします。Groupを選択し取り付け、以下のように設定します。Imageのチェックを外しておきます。SizeのWidthにチェックを入れ、横幅のサイズをこのパネルの幅に応じてコントロールします。ExpandのWidthにチェックを入れ、パネルのサイズに応じて横幅が広がるようにします。CharacterStatusPanelを選択した状態で右クリックからUI→Panelを選択し、名前をCharacterPanelとします。topにし、Heightを50にします。Groupを選択し取り付けます。Centerにします。ExpandのWidthとHeightにチェックを入れます。これでCharacterPanelの子要素が横一列に整列します。CharacterPanelを選択した状態で右クリックからUI→Textを3回選択し、名前をCharacterName、HPTitle、MPTitleとします。TransformでCharacterNameのWidthは250、Heightは50HPTitle、MPTitleのWidthとHeightは50とします。HPTitleのTextにはHP、MPTitleのTextにはMPという文字列を入力しておきます。CharacterPanelを選択した状態で右クリックからUI→Sliderを2回選択し、名前をHPSlider、MPSliderとします。TransformのWidthは100、Heightは50とします。HPSliderとMPSliderの子要素にTextを作成し、それぞれの名前をHPText、MPTextとします。HPText、MPTextのAlignmentは左寄せの真ん中表示にします。CharacterPanelの階層は以下のようになります。キャラクターのHPを数値とスライダーで表示し一目見てどの程度HPやMPが残っているかがわかるようにします。CharacterPanelの子要素の幅や高さなどはCharacterStatusPanelのサイズによって変わってきますので調整してください。ここまで出来たらCharacterPanelをAssets/RPG/Prefabs/UI/Commmandフォルダにドラッグ&ドロップしてプレハブにし、ヒエラルキー上のCharacterPanelは削除します。CharacterPanelが一人のキャラクターの名前、HP、MPを表示しますので、スクリプトからCharacterPanelプレハブをインスタンス化しパーティー全員のステータスを表示します。これでUIが出来ました。次にパーティーステータスを表示する為のスクリプトを作成していきます。Assets/RPG/Scriptsフォルダ内に新しくIdleCommandScriptという名前のスクリプトを作成し、CharacterStatusゲームオブジェクトに取り付けます。スクリプトが少し長いので、分けて説明します。フィールド宣言部とAwakeメソッド、Startメソッドまずはフィールド宣言部とAwakeメソッド、Startメソッドを作成します。GameObject.Find("SceneManager").GetComponent<LoadSceneManager>();}partyStatusにはAssets/RPG/Data/StatusのPartyStatusアセットファイルをインスペクタで設定します。idleTimeはどれだけユニティちゃんを動かしたりボタンを押したりしていなければCharacterStatusPanelを表示するかの秒数を設定します。elapsedTimeはキーやボタンを押さなくなってからどれだけ時間が経ったかを入れます。isOpenCharacterStatusPanelは現在CharacterStatusPanelを開いているかどうかのフラグです。characterPanelPrefabには先ほどプレハブにしたCharacterPanelをインスペクタで設定します。characterStatusPanelはCharacterStatusPanelを取得し設定します。sceneManagerにはシーン切り替えを行っているLoadSceneManagerを取得し設定します。unityChanScriptはインスペクタでそれぞれのシーンのUnityChanをドラッグ&ドロップしUnityChanScriptを設定します。Awakeメソッドでは子要素のCharacterStatusPanelゲームオブジェクトを取得しています。Startメソッドではヒエラルキー全体からSceneManagerゲームオブジェクトを探し、設定されているLoadSceneManagerスクリプトを取得しています。UpdateメソッドUpdateメソッドで実際のパーティーのステータスを表示する処理をしています。true;}}}}シーン遷移途中、ユニティちゃんの状態が会話中やコマンド実行中の場合はelapsedTime(何も押さなくなってからの時間)を0にし、CharacterStatusPanelを非表示にし、returnでその後の処理は行いません。それ以外の時でInput.anyKeyDownで何らかのキーやボタンが押されたかどうか、Mathf.ApproximatelyでInput.GetAxis(“Horizontal”)と0のfloatの比較、Input.GetAxis(“Vertical”)と0のfloatの比較をして移動の入力がほぼ0であるかを比較し、!を付けてその反転、つまり何らかの移動がされている場合はelapsedTimeを0にし、CharacterStatusPanelの子要素のCharacterPanel群を全部削除します。これは何らかの行動を起こしたのでCharacterStatusPanelを非表示にしたということになります。ifで何らかのキーを押していない時でCharacterStatusPanelを開いていない時はelapsedTimeにTime.deltaTimeを足して何もしていない時間の計測を行います。経過時間がidleTime以上になったらパーティーメンバー分のCharacterPanelプレハブをインスタンス化し、階層を辿ってTextコンポーネントやSliderを取得し、そこにパーティーのステータスデータを設定します。これらの処理は以前作成したアイテムコマンドの処理と同じ感じなので問題はないと思います。Valueで変更することも可能)、HPではmember.GetHp()で得られた値を(float)でfloat型にキャストした後member.GetMaxHP()で割って0~1の間の値にしています。MPも同じようにして求めています。CharacterPanelをインスタンス化したらCharacterStatusPanelを表示しています。CharacterStatusの子要素のCharacterStatusPanelのインスペクタで名前の横のチェックを外し最初はパネルが表示されないようにしておきます。これで機能が完成しました。VillageシーンのCharacterStatusを選択した状態でCtrl+Dキーを押して複製し、WorldMapシーンにドラッグ&ドロップして移動し、名前をCharacterStatusに変更します。WorldMapシーンのCharacterStatusのIdleCommandScriptのunityChanScriptにはWorldMapシーンのUnityChanゲームオブジェクトをドラッグ&ドロップしUnityChanScriptを設定します。パーティーステータスが表示されるか確認する機能が完成したのでUnityを実行し、何もキーやボタンを押さない時にパーティーステータスが表示されるかを確認してみましょう。上のようになりました。終わりに簡易的なパーティー全体のステータスを確認出来る機能ですがあると便利ですよね。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/18個人的にUnity2019.2.18f1をインストールしました。2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。