Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。2019.11.22今回は戦闘シーンで味方のターンが回ってきた時に持っているスキルの中から選択肢を選ぶ機能を作成していきたいと思います。前回は戦闘シーンでの敵のターンの行動処理を作成しました。ユニティちゃんのRPGを作ってみよう22ー敵の攻撃ターンを作成するーユニティちゃんのRPGで敵の攻撃のターンが来た時に敵が持っているスキルの中から選択肢を選ぶ機能を作成していきます。gametukurikata.com2019.11.21ユニティちゃんのRPGを作ってみようの他の記事はユニティちゃんのRPGを作ってみようユニティちゃんのRPGを徐々に作っていくカテゴリです。gametukurikata.comから見ることが出来ます。前回は戦闘での敵のターンの行動処理を作成しました。味方の行動は敵と同じように自動で行動を起こすようにしてもいいですが、基本的にはゲームのユーザーが自分で行動を選択して攻撃をする相手や魔法を使う相手を選択します。戦闘に参加しているキャラクターには既に戦闘時のキャラクターの行動スクリプトCharacterBattleScriptを設定してあり、後はBattleManagerで作成したボタンでどのスキルを使って対象を誰にするか?を決定し、CharacterBattleScriptの機能を呼び出して行動をさせるだけです。行動をさせるだけというと簡単に聞こえますが、ユーザーが選ぶ事が出来る行動をボタンとして用意しそれを選択したら攻撃等を行う対象者を選ぶといったように以前作成したアイテムコマンドの作成と同じように面倒な事をする必要があります。(^_^;)前回に続き今回も結構大変ですが、この記事を終えたらユニティちゃんRPGの面倒な機能は作り終えると思って頑張ってみてください。味方が起こす行動等を表示するUI群を作っていきます。UIのサイズや表示する場所等はとりあえず作りました程度の作りとなっていますので、任意で調整してください。どのスキルを使うか?の選択UIまずはターンが回ってきた味方キャラクターが持っているスキルをボタンで作成します。BattleUIを選択した状態で右クリックからUI→Panelを選択し、名前をCommandPanelとします。CommandPanelはStatusPanelの横に配置します。Groupを取り付けます。Groupのinteractableのチェックを外しておきます。次にCommandPanelを選択した状態で右クリックからUI→Panelを選択し名前をCharacterNameとします。Targetのチェックを外しマウス等で選択等を出来ないようにします。Sizeを25、ParagraphのAlignmentを真ん中、Colorを白色にします。Completelyを選択しプレハブとのリンクを解除します。名前をDirectAttackと変更します。DirectAttackのインスペクタでCommandPanelButtonScriptスクリプトを削除します。Groupを取り付けます。ExpandのHeightにチェックを入れます。DirectAttackボタンの子要素の高さのサイズと拡張が自動でされるようになります。DirectAttackのRectTransformのHeightを35にします。Assets/RPG/Scripts/Battleフォルダに新しくBattleCommandPanelButtonScriptスクリプトを作成しDirectAttackに取り付けます。false;}}中身はAssets/RPG/Scripts/CommandPanelButtonScriptスクリプトと同じです。́Д`)DirectAttack子要素のImageのwidthを30、TextのWidthを150、TextのParagraphのAlignmentを真ん中にします。Textには攻撃と入力します。Groupコンポーネントを取り付けているので、子要素のImageをドラッグしてTextの上に移動させ、左側にImageがくるようにします。これでCommandPanelが出来ました。CommandPanelの子要素のボタン群が押された時に実行する処理はBattleManagerスクリプトから後で取り付けます。キャラクター選択パネル次に攻撃等をした時に誰に攻撃をするか?の選択をするパネルを作成します。BattleUIを選択した状態で右クリックからUI→Panelを選択し、名前をSelectCharacterPanelとしてCommandPanelの横にサイズを調整します。Groupコンポーネントを取り付け以下のように設定します。キャラクター選択ボタンの作成SelectCharacterPanelに配置するボタンのプレハブを作成します。Completelyを選択しプレハブと解除します。名前をBattleCharacterButtonと変更し、インスペクタのCommandPanelButtonScriptを削除します。先ほど作ったBattleCommandPanelButtonScriptを取り付けます。Groupを取り付けます。ExpandのHeightにチェックを入れます。子要素のTextのWidthは200にしました。BattleCharacterButtonの子要素のImageをドラッグしTextの上にくるようにし、左側にImageが表示されるようにします。ここまで出来たらAssets/RPG/Prefabs/UI/BattleCommandフォルダを作成し、そこにBattleCharacterButtonをドラッグ&ドロップしてプレハブにします。SelectCharacterPanelに表示するキャラクターのボタンはスクリプトから生成するので子要素にはあらかじめボタンを配置しません。ヒエラルキー上のBattleCharacterButtonは削除しておきます。魔法やアイテム表示パネル次に魔法やアイテムの行動を起こした時に、どの魔法やアイテムを使うか?を選択するパネルを作成します。魔法とアイテムの違いだけで表示するパネルは同じなので共通で使用します。作り方としてはアイテムコマンドで作成したItemPanelと同じなのでそちらも参考にしてください。ユニティちゃんのRPGを作ってみよう11ーアイテムコマンドの作成ーユニティちゃんRPGのコマンド画面でアイテムコマンドの作成とアイテムの装備や使用、渡す、捨てる等が出来るようにしていきます。gametukurikata.com2019.11.07アイテムコマンドの記事でも書いた通りあらかじめアイテム一覧や魔法一覧用のボタンを配置して置くやり方もあります。この場合はアイテム一覧と魔法一覧のパネルを別に作る必要があります。BattleUIを選択した状態で右クリックからUI→Panelを選択し、名前をMagirOrItemPanelとします。以下のような位置とサイズにします。MagicOrItemPanelを選択した状態で右クリックからUI→Panelを選択しMaskとします。MaskはMagicOrItemPanelでマスクする領域に使います。Graphicのチェックを外します。Graphicのチェックを外すと、マスク部分のグラフィックが非表示になります。Maskのサイズは横のスクロールバー(この後作成する)を外した感じのサイズにします。Maskを選択した状態で右クリックからUI→Panelを選択し、名前をContentとします。stretchを選択し、Heightを3000にします。ContentのImageコンポーネントは使わないので横のチェックを外すか、削除します。SizeのXを360、Yを50、SpacingのXを50、Yを10とします。Valueを300としました。Contentが実際に魔法やアイテムのボタンを表示する場所になります。MagicOrItemPanelを選択した状態で右クリックからUI→Scrollbarを選択します。rightにし、Widthを20、Heightを160とします。interactableのチェックを外しスクロールバーを操作出来ないようにします。Groupを取り付けます。Scrollbarには先ほど作ったScrollbarゲームオブジェクトを設定します。MovementTypeはClampedにします。Groupのinteractableのチェックは外しておきます。アイテムのプレハブボタンの作成MagicOrItemPanelボタンにアイテム一覧を表示する時のアイテムボタンのプレハブを作成します。Completelyを選択しプレハブとのリンクを解除します。名前をBattleItemPanelButtonとし、インスペクタのItemPanelButtonScriptスクリプトを削除します。ヒエラルキー上のBattlItemPanelButtonをAssets/RPG/Prefabs/UI/BattleCommandフォルダにドラッグ&ドロップしてプレハブにし、ヒエラルキー上のBattleItemPanelButtonは削除します。魔法のプレハブボタンを作成MagicOrItemPanelボタンに魔法一覧を表示する時の魔法ボタンのプレハブを作成します。Completelyを選択しプレハブとのリンクを解除します。名前をBattleMagicPanelButtonとします。魔法の場合は選択時のアイコン、魔法の名前、使用MPの情報だけがあればいいので、子要素のEquip、Multiplyを削除します。ItemNameという名前をMagicNameに、NumをAmountToUseMagicPointsに変更します。BattleMagicPanelButtonの子要素のWidthは良い感じで調整してみてください・・・・・(;_;)/~~~BattleMagicPanelButtonをAssets/RPG/Prefabs/UI/BattleCommandフォルダにドラッグ&ドロップしてプレハブにします。Mask領域の調整をするアイテムコマンドのアイテム一覧のスクロール機能と同じように戦闘シーンでのアイテムや魔法の一覧をスクロールする時の為にボタンが丁度良く表示されるようにMask領域を調整します。MagicOrItemPanel/Mask/ContentにまだBattleMagicPanelButtonを残したままだと思うので、選択した状態でCtrl+Dキーを押してMagicOrItemPanelの表示領域を超えるぐらいのボタンを複製します。すると下の方にボタンがはみ出て見えるので、Maskの領域を調整してボタンが丁度見えるように調整します。細かい調整はスクリプトで設定した値との兼ね合いもあるので後で調整します(やり方はアイテムコマンドの時と同じ)。これで味方キャラクターの行動の選択肢のUIが出来ました。味方キャラクターの行動処理スクリプトの追加UIが出来たのでBattleManagerに味方キャラクターの行動処理をする為の記述を追加します。BattleManagerですることはCommandPanelのボタンを押した時に実行する処理を追加したり、攻撃等の対象の選択ボタンの作成、使用出来るアイテムや魔法一覧の表示等です。実際に攻撃や魔法、アイテムの処理をするのはそのキャラクターが持つCharacterBattleScriptでBattleManagerから選択した行動を依頼します。BattleManagerスクリプトに処理を追加していきます。フィールドの追加まずはフィールドを追加します。scrollManager;magicOrItemPanelはMagicOrItemPanelゲームオブジェクトをインスペクタで設定します。magicOrItemPanelContentはMagicOrItemPanelの階層から取得します。battleItemPanelButtonはアイテム一覧を表示する時の表示するボタンのプレハブBattleItemPanelButtonをインスペクタで設定します。battleMagicPanelButtonは魔法一覧を表示する時の表示するボタンのプレハブBattleMagicPanelButtonをインスペクタで設定します。selectedGameObjectStackは前に選択していたゲームオブジェクトを保持して前の選択に戻った時にそのゲームオブジェクトを選択しなおす為に使用します(アイテムコマンドの時と同じです)。それ以降のフィールドは一覧をスクロールさせる為の設定で、アイテムコマンドの時と同じなので特に問題はないと思います。StartメソッドStartメソッドに処理を追加していきます。追加する場所は味方パーティーのプレハブをインスタンス化している繰り返し処理の前にします。magicOrItemPanelContent.GetComponent<ScrollManager>();magicOrItemPanelContentはmagicOrItemPanelの子要素から取得します。scrollManagerはMagicOrItemPanelから取得します。UpdateメソッドUpdateメソッドに処理を追加していきます。if文でbattleIsOverが真かどうかを判定している下に以下の処理を追加します。{EventSystem.current.SetSelectedGameObject(selectCharacterPanel.GetChild(0).gameObject);}}これはEventSystemがどのUIも選択していない時に現在のコマンド状況に応じて無理やりUIを選択させるための処理です。マウスでUIのボタン以外をクリックするとEventSystemは何も選択していない状態になり選択していたボタンのアイコンも消えてしまいます。そこで上のような処理を記述して選択しているUIがなければ無理やり選択をさせるようにします。CommandPanelだけは最初に名前を表示するパネルがあるのでGetChild(1)となります。magicOrItemPanelでスクロールできる場合はスクロール値も初期位置に戻しています。次にキャンセルボタンを押して前の選択肢に戻る時の処理を追加します。UpdateメソッドのisStartBattleがtrueでisChoosingがtrueの時にキャンセルボタンが押された時の処理を追加します。作成済みの処理群}やっていることは現在のモードに応じて該当するパネルにプレハブからインスタンス化したボタンを全て削除し、CanvasGroupのinteractableの変更やパネルの表示・非表示を行っています。アイテムコマンドでも作ったので特に説明はいらないと思います。味方パーティーの行動処理をするAllyAttack味方パーティーの行動処理をするAllyAttackメソッドを作成します。{commandPanel.Find("GetAway").gameObject.SetActive(false);}EventSystem.current.SetSelectedGameObject(commandPanel.transform.GetChild(1).gameObject);commandPanel.gameObject.SetActive(true);}AllyAttackメソッドは現在ターンが回ってきている味方キャラクターのゲームオブジェクトを受け取ります。currentModeに現在行う行動を選択している状態であるCommandMode.SelectCommandを入れます。その後にアイテムや魔法の一覧や対象キャラクターの選択画面を前に開いていた場合はインスタンス化したボタンが残っているので全て削除します。その後CommandPanelのCanvasGroupのinteractableをtrueにしCommandPanelのUIを操作出来るようにします。selectCharacterPanel、magicOrItemPanelのCanvasGroupのinteractableはfalseにし操作出来ないようにします。引数で受け取ったキャラクター(現在ターンが回ってきたキャラクター)のAnimatorのアニメーションパラメータのGuardがtrueであればfalseにし防御を解除します。commandPanelから階層を辿ってCharacterName/TextゲームオブジェクトのTextコンポーネントを取得し、そこにキャラクター名を入れます。その後キャラクターの持っているスキルリストを取得します。取得したスキルリスト中に該当するスキルタイプのスキルがあるかどうかをExistsメソッドで調べあればCommandPanelに作成したボタンの表示、押した時に実行するメソッドの設定をします。以下はDirectAttackの処理です。{commandPanel.Find("DirectAttack").gameObject.SetActive(false);}DirectAttackのスキルを持っていればCommandPanelの子要素のDirectAttackボタンを取得し、そのボタンのButtonコンポーネントを取得しButtonのonClickにAddListenerで実行するメソッドを指定しています。ここら辺もアイテムコマンド作成時にやったので問題はないと思います。DirectAttackのスキルを持っていなければDirectAttackボタンは表示しないようにします。他のスキルもボタンを押した時に実行するメソッドが違うだけでやっていることは同じです。新しいパネルのCanvasGroupのinteractableをtrueとパネルのゲームオブジェクトをアクティブにする。いう処理をしているだけなので説明は省きます。攻撃をする相手を選択するSelectDirectAttackerメソッドの作成DirectAttackボタンを押した時に実行するSelectDirectAttackerメソッドを作成します。true;EventSystem.current.SetSelectedGameObject(selectCharacterPanel.GetChild(0).gameObject);selectCharacterPanel.gameObject.SetActive(true);}引数では攻撃をするキャラクターのゲームオブジェクトを受け取ります。currentCommandを現在攻撃対象選択をしている状態のCommand.SelectDirectAttackerにします。CommandPanelのCanvasGroupのinteractableをfalseにし、選択していたDirectAttackゲームオブジェクトをselectedGameObjectStackにプッシュします。foreachを使って戦闘に参加している敵のリスト分繰り返しを行い、攻撃対象の敵数分のボタンを作成します。battleCharacterButtonが戦闘シーン用のキャラクター選択ボタンのプレハブなのでこれをインスタンス化し、親をselectCharacterPanelにします。battleCharacterButtonの子要素のTextゲームオブジェクトのTextコンポーネントを取得し、そこに敵のゲームオブジェクトの名前を設定します。攻撃対象のボタンが押された時はDirectAttackメソッドに攻撃キャラクターと攻撃対象のキャラクターのゲームオブジェクトを渡して呼び出します。攻撃対象の選択パネルに処理が移ったのでselectCharacterPanelのCanvasGroupのinteractableをtrueにしUIを選択可能にします。EventSystem.current.SetSelectedGameObjectメソッドでSelectCharacterPanelの子要素の最初のUIを選択状態にします。最後にSelectCharacterPanelをアクティブにします。最終的な直接攻撃を決定する処理DirectAttackメソッドSelectDirectAttackerメソッドで作成した攻撃対象者を選択するボタンが押された時に実行するDirectAttackメソッドを作成します。DirectAttackメソッドは既に攻撃対象者が決定しているので、攻撃者のCharacterBattleScriptを呼び出して攻撃対象者に攻撃をする処理をしてもらうだけです。directAtatck);commandPanel.gameObject.SetActive(false);selectCharacterPanel.gameObject.SetActive(false);}CharacterBattleScriptのChooseAttackOptionsメソッドにSkill情報を渡したいので、攻撃者の持っているスキルリストからDirectAttackのスキルを探しそれを渡します。防御処理をするGuardメソッド防御を選択した時に実行するGuardメソッドを作成します。{guardCharacter.GetComponent<CharacterBattleScript>().Guard();commandPanel.gameObject.SetActive(false);ChangeNextChara();}引数で現在ターンが回ってきているキャラクターのゲームオブジェクトを受け取るので、そのゲームオブジェクトからCharacterBattleScriptコンポーネントを取得し、CharacterBattleScriptのGuardメソッドを実行させます。防御した場合はそのまま次のキャラクターにターンを回します。敵が防御をした場合は個別に処理を記述しましたが、Guardメソッドを呼び出すように変更してもいいかもしれませんね。使用する魔法を選択するSelectMagicメソッドCommandPanelの魔法ボタンを押した時の処理をするSelectMagicメソッドを作成します。true;EventSystem.current.SetSelectedGameObject(magicOrItemPanelContent.GetChild(0).gameObject);magicOrItemPanel.gameObject.SetActive(true);}currentModeを現在魔法を選択している状態CommandMode.SelectMagicにします。commandPanelのCanvasGroupのinteractableをfalseにし、CommandPanelのUIは操作出来ないようにします。ScrollManagerスクリプトのResetメソッドを呼び出してスクロール値を初期値に戻します。これは一度スクロールをして次に一覧パネルを開いた時に前のスクロール値が残ってしまうので初期値に戻しています。battleMagicPanelButtonNumはボタンの番号を保持し、決められたボタンにスクロールをする為のスクリプトを取り付ける為に使用します。持っている全てのスキルの中で魔法系のスキルを取得し、battleMagicPanelButtonをインスタンス化し、magicOrItemPanelContentを親にします。作成したボタンの子要素のMagicNameにスキル情報の名前を入れ、AmountToUseMagicPointsにその魔法を使用するのに必要なMPを入れます。その後にボタンの番号に応じてそのボタンにScrollDownScriptとScrollUpScriptを取り付けます。キャラクターのMPがその魔法で使うMPより少ない時はMagicNameのテキストの色を灰色に変更します(ボタンを押しても何も実行しない)。キャラクターのMPがその魔法で使うMP以上ある場合はボタンが押された時にSelectUseMagicTargetメソッドを呼び出すようにします。一つボタンを作成したらbattleMagicPanelButtonNumをインクリメントして1増やします。魔法を使う相手を選択する処理SelectUseMagicTargetメソッド使う魔法を選択したら次は魔法を使う相手を選択します。それを行うSelectUseMagicTargetメソッドを作成します。true;EventSystem.current.SetSelectedGameObject(selectCharacterPanel.GetChild(0).gameObject);selectCharacterPanel.gameObject.SetActive(true);}SelectUseMagicTargetは魔法使用者のゲームオブジェクトと使用した魔法のスキルを引数で受け取ります。スキルタイプがMagicAttackの時は攻撃対象者は敵なのでenemyCharacterInBattleListに登録されている敵数分のボタンを作成します。そのボタンが押されたらUseMagicメソッドを実行するようにします。スキルタイプがそれ以外の場合は対象者が味方なのでallyCharacterInBattleListに登録されている味方数分のボタンを作成します。そのボタンが押されたらUseMagicメソッドを実行するようにします。どのスキルタイプでもボタンが押されたらUseMagicメソッドを実行しますが、対象者が敵か味方かで別れます。魔法を使用する相手が決定した時の処理をするUseMagicメソッド魔法を使用する相手が決定したら後は魔法使用者のCharacterBattleScriptのChooseAttackOptionsメソッドを呼び出すだけです。その処理をするUseMagicメソッドを作成します。Debug.Log("既に攻撃力を上げています。Debug.Log("既に防御力を上げています。"は痺れ状態ではありません。"は毒状態ではありません。{Debug.Log("既に攻撃力を上げています。{Debug.Log("既に防御力を上げています。"は痺れ状態ではありません。"は毒状態ではありません。skill);commandPanel.gameObject.SetActive(false);magicOrItemPanel.gameObject.SetActive(false);selectCharacterPanel.gameObject.SetActive(false);}魔法を使用する対象者のHPが最大値であれば回復魔法を使用する必要がないのでreturnをして対象者を選択するところまで処理を戻します。他の魔法の場合も使用する魔法を使っても意味がない場合はreturnで対象者を選択する状態に戻します。何も問題がなければbattleStateにその魔法状態を入れます。魔法使用者のCharacterBattleScriptのChooseAttackOptionsメソッドを呼び出して対象者に魔法を使用します。選択するアイテムボタンを作成するSelectItemメソッドアイテムを選択した時にアイテム一覧にアイテムボタンを表示させます。その為の処理を行うSelectItemメソッドを作成します。Debug.Log("使えるアイテムがありません。{Debug.Log("使えるアイテムがありません。");}}キャラクターが持つアイテムリストを取得しitemDictionaryに入れます。battleItemPanelButtonNumはアイテム一覧に並べたボタンの番号を表します。itemDictionary.KeysでitemDictionaryのキーだけを取得し、foreachで繰り返しをしてそのキーに対する値を取得し実行します。アイテムのタイプが戦闘中に使用出来るタイプのものだけを抽出し、battleItemPanelButtonプレハブをインスタンス化し、magicOrItemPanelContentを親にします。インスタンス化したボタンの子要素のItemNameにアイテムの名前、Numにそのアイテムを持っている数を入れます。ボタンが押されたらSelectItemTargetメソッドを実行するようにします。スクロールをするボタンにだけScrollDownScriptとScrollUpScriptスクリプトを取り付けます。戦闘中に使えるアイテム数分のボタンを作成した後にmagicOrItemPanelの子要素に一つもボタンがない場合は使えるアイテムがないので、CommandPanelで使用するスキルを選択している状態のままにします。使えるアイテムが一つでもあればCommandPanelのCanvasGroupのinteractableをfalseにし、MagicOrItemPanelのCanvasGroupのinteractableをtrueにし、MagicOrItemPanel子要素のContentをアクティブにします。使用するアイテムが決まったら次はアイテムを使う相手を選択します。その処理を行うSelectItemTargetメソッドを作成します。true;EventSystem.current.SetSelectedGameObject(selectCharacterPanel.GetChild(0).gameObject);selectCharacterPanel.gameObject.SetActive(true);}SelectItemTargetメソッドはアイテム使用者のゲームオブジェクトと使用したアイテムを引数で受け取ります。SelectItemTargetメソッドは味方キャラクターにアイテムを使用した場合に呼ばれる処理のみを記述しています(敵を攻撃するアイテムを作らなかった為)。敵に使用するアイテムを作成した場合は別途AttackItem等のItemタイプを作成し処理を分けて作ってください。戦闘に参加している味方キャラクターのリストallyCharacterInBattleList数分のbattleCharacterButtonをインスタンス化し、親をselectCharacterPanelにします。ボタンの子要素のTextに味方キャラクターの名前を設定し、ボタンが押されたらUseItemメソッドを実行するようにします。アイテムを使用する相手が決まった後の処理をするUseItemメソッドアイテムを使用する相手が決まったら後はアイテム使用者のCharacterBattleScriptのChooseAttackOptionsメソッドを呼び出します。その処理を行うUseItemメソッドを作成します。"はMP回復をする必要がありません。"は痺れ状態ではありません。"は毒状態ではありません。"はMP回復をする必要がありません。"は痺れ状態ではありません。"は毒状態ではありません。item);commandPanel.gameObject.SetActive(false);magicOrItemPanel.gameObject.SetActive(false);selectCharacterPanel.gameObject.SetActive(false);}アイテムの種類に応じて対象者にアイテムを使用する必要がない場合はreturnで対象者の選択に戻ります。それ以外はbattleStateに状態を設定し、アイテム使用者のCharacterBattleScriptのChooseAttackOptionsメソッドを呼び出します。逃げるを選択した時の処理GetAwayメソッドCommandPanelで逃げるを選択した時の処理をするGetAwayメソッドを作成します。Debug.Log("逃げるのに成功した。Debug.Log("逃げるのに失敗した。{Debug.Log("逃げるのに成功した。{Debug.Log("逃げるのに失敗した。");commandPanel.gameObject.SetActive(false);ChangeNextChara();}}今回はRandom.valueで0~1のfloatのランダムな値を取得し、値が0~0.2だったら逃げるのに成功したことにし、battleIsOverをtrueにして戦闘終了にします。逃げたらワールドマップシーンに戻るような処理が必要ですが、これは他の味方キャラクターが全滅した時や敵キャラクターを全滅させた時の処理と一緒に次回以降に作成していくので特に処理は記述しません。逃げるのに失敗した時は次のキャラクターにターンを回します。機能は出来ましたが、アイテムや魔法一覧をスクロールした時にうまくスクロールされるように確認します。MagicOrItemPanelの子要素のContentにBattleMagicPanelButtonプレハブを配置し、Ctrl+Dキーで複製しボタンを12個(数は任意)にします。スクロールしない状態で表示されているボタン数が以下のようになっているとします。表示されているボタンが10個なので11個目12個目のボタンが選択された時にスクロールされるようにBattleManagerのscrollDownButtonNumを8、scrollUpButtonNumを10(ボタン番号は0から始まる為)にします。scrollValueの値はヒエラルキー上のContentをマニピュレータを操作し、11個目のボタンが上に表示された時のContentのRectTransformのPosYの値を設定します。手動でスクロールして11個目、12個目のボタンが上に表示された時のPosYの値をBattleManagerのscrollValueに設定します。値を設定したらContent以下に複製した全てのボタンはいらないので削除しておきます。BattleManagerの設定は以下のようにしました。CommandPanel、SelectCharacterPanel、MagicOrItemPanelは最初は表示しないので、インスペクタの名前の横のチェックを外しておきます(子要素のゲームオブジェクトはアクティブなまま)。ボタンの選択速度を速める以前の記事でEventSystemの設定を変えてボタンの選択速度を速めました。ユニティちゃんのRPGを作ってみよう13ー次のボタンの選択速度を上げるーユニティちゃんのRPGでコマンド等の選択で次のボタン選択速度を上げる設定をしたいと思います。gametukurikata.com2019.11.09BattleシーンのEventSystemも同じ設定を施します。したら以前の記事で既に設定済みの可能性もありますが、覚えていないので書いておきました・・・・(^_^;)BattleUIの子要素のCommandPanel、SelectCharacterPanel、MagicOrItemPanelの各インスペクタで名前の横のチェックを外し、最初は表示されないようにしておきます。これで機能が出来ました。実行して確認してみましょう。上のようになりました。終わりにいやぁ・・・今回は非常記事が長くなりましたね。́Д`)痺れや毒状態の時の演出や効果についてはこの記事では作っていません。痺れ状態の時は行動を出来なくしたり、毒状態の時はターンが回ってきたらHPを減らすといった処理を作ってみてください。今回の機能が出来上がればこの後に作成していく機能はそんなに大変になることもないと思います。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう15ーワールドマップで敵に遭遇するーユニティちゃんのRPGでワールドマップをユニティちゃんが歩いていたら一定の時間内で敵と遭遇するというエンカウント機能を作成していきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう18ー戦闘シーンへ遷移したらキャラクターを配置するーユニティちゃんのRPGで戦闘シーンへ遷移したら味方のパーティーステータスと遭遇した敵のパーティーステータスからキャラクターのプレハブを取得しそれをインスタンス化して戦闘位置に配置する機能を作成していきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう31ー村やワールドマップでカメラの視点を変更出来るようにするーユニティちゃんのRPGで村やワールドマップにいる時のカメラをコントローラーの右スティックやマウス操作で視点変更出来るようにしていきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう29ー戦闘終了後の結果画面とその後の処理の作成ーユニティちゃんのRPGで戦闘終了後の経験値やお金の取得、レベルアップの結果画面を表示する機能とその後の戦闘を抜ける処理を作成していきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう21ー戦闘で使うスキルデータを作成するーユニティちゃんのRPGの戦闘シーンで使用するスキルデータを作成してきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう9ーアイテムやステータス等のデータ作成ーユニティちゃんのRPGでアイテムやステータス等のデータの作成についてやっていきたいと思います。ユニティちゃんのRPGを作ってみよう22ー敵の攻撃ターンを作成するーユニティちゃんのRPGを作ってみよう24ー戦闘時のメッセージを表示するーホーム作ってみようシリーズユニティちゃんのRPGを作ってみようスポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。