Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。2019.11.08今回は前回作成したアイテムコマンドのアイテム一覧表示でキーボードやゲームコントローラー操作でアイテム一覧をスクロールする機能を作成していきます。前回はコマンド画面にアイテムコマンドを作成しました。ユニティちゃんのRPGを作ってみよう11ーアイテムコマンドの作成ーユニティちゃんRPGのコマンド画面でアイテムコマンドの作成とアイテムの装備や使用、渡す、捨てる等が出来るようにしていきます。gametukurikata.com2019.11.07ユニティちゃんのRPGを作ってみようの他の記事はユニティちゃんのRPGを作ってみようユニティちゃんのRPGを徐々に作っていくカテゴリです。gametukurikata.comから見ることが出来ます。前回作成したアイテムコマンドのアイテム一覧でマウス操作でスクロールバーを操作しアイテム一覧をスクロールする事が出来ました。ボタンの選択をキーボードやゲームコントローラーで操作した時はスクロールバーを選択してスクロールしない限りはアイテム一覧をスクロール出来ませんでした。そこで今回はキーボードやゲームコントローラーで選択するボタンを変更した時にアイテム一覧をスクロール出来るようにしたいと思います。その機能を取り付ける場合はマウスでのスクロールが出来なくなります。(^_^;)出来ないというよりはキーボードとゲームコントローラーによる操作とマウスでの操作を混在させて処理するのが大変なのでスクロールバーを直接操作出来なくしたといった方が正しいです。両方の操作に対応したい!という方は色々試行錯誤してみてください。現時点ではゲームコントローラーとキーボードでの操作に限定しておきます。2020/07/17にスクロール機能を全面的に変更しました。スポンサーリンクItemPanel子要素のScrollbarをマウスで操作させないまずはアイテム一覧(ItemPanel)のスクロールバーをマウスで操作出来ないようにします。ItemPanel子要素のScrollbarを選択しScrollbarコンポーネントのinteractableのチェックを外します。これでアイテム一覧のスクロールバーをマウス操作出来なくなりました。前回、アイテム一覧で見えるアイテムの種類は14個までにしました。そこでキーボードやゲームコントローラーで13、14個目のアイテムパネルボタンを選択した時にItemPanel子要素のContentを下にスクロールし、15、16個目のアイテムパネルボタンを選択した時にContentを上にスクロールするようにします。Assets/RPG/Scriptsに新しくScrollManagerというスクリプトを作成し、ItemPanelの子要素にあるContentに取り付けます。defaultScrollValue;}}contentは自身のTransformを取得し設定します。changeScrollValueは現在スクロールバーがスクロール中かどうか、destinationValueはスクロールの目的地、scrollSpeedはスクロールのスピード、scrollValueは1回でスクロールする値です。PreSelectedButtonプロパティは前に選択していたアイテムパネルボタンを入れておく為に用意しました。AwakeメソッドではcontentとdefaultScrollValueを設定しています。UpdateメソッドではchangeScrollValueがfalseの時(スクロール中でない)はその後の処理を実行しません。スクロール中の時はcontentのローカル位置にMathf.MoveTowardsを使って現在の値から目的の値へと徐々に変化させた値を設定します。Mathf.Absで現在のY軸の位置と目的地の引き算の絶対値を求め、ある程度目的地に移動していたら現在の位置を目的地に設定し、スクロールを終えてます。ScrollDownメソッドはアイテムパネルボタンに取り付けたスクリプトから呼び出し、スクロール中であれば現在の位置に目的地を設定し、スクロールを終了します。これはスクロール中にさらにアイテムパネルボタンを移動した時にすぐに目的地に設定し、次のスクロールに備える為です。ScrollManager.PreSelectedButtonがnullでなく引数で受け取ったアイテムパネルボタンが前に選択していたボタンよりYの位置が大きい時(現在のボタンが前に選択していたボタンより上にある時)にContentのYの位置をscrollValue分引きます。ScrollUpメソッドはScrollDownの逆で現在のボタンが前に選択していたボタンより下にある時にContentのYの位置をscrollValue分足します。Resetメソッドはアイテムパネル外をマウスで押した時等の初期化をする時に呼び出し、前に選択していたボタンのリセットとスクロールのリセットを行います。ここで設定したscrollValueの値は調べる必要があり、そのやり方を記載します。Toolを選択し、シーンビューのY軸の矢印をドラッグします。シーンビューでは以下のように15、16個目のアイテムパネルボタンが一番上に来るようにドラッグします。15、16個目のアイテムは『普通の剣』と『痺れ回復薬』となっており、ゲームビューで確認すると以下のように一番上に表示されるようにContentを移動させます。Yの値を確認し、これをCommandScriptのscrollValueに設定するようにします。scrollValueの値によってはスクロールする毎に徐々にアイテムパネルボタンの表示位置がずれてしまう可能性もあります。アイテムパネルボタンの高さ、アイテムパネルボタン同士の隙間等を厳密に計算しscrollValueを設定した方がいいかもしれません。ボタンに取り付けるスクリプトの作成ScrollManagerスクリプトでアイテム一覧のスクロールをしますが、その処理を呼び出すスクリプトを作成します。Assets/RPG/Scriptsフォルダに新しくScrollDownScriptとScrollUpScriptを作成します。どちらのスクリプトもCommandScript内から該当するボタンに取り付けます。{}}ScrollDownScriptはMonoBehaviour、ISelectHandler、IDeselectHandlerを継承して作成し、ボタンを選択した時、ボタンの選択を解除した時の処理を実装します。ScrollDownScriptはScrollManagerスクリプトを自身の親の階層から探して取得します。OnSelectメソッドはボタンが選択された時に呼び出されるので、そこでScrollManagerのScrollDownメソッドを自身のTransformを渡して呼び出します。ScrollManager.PreSelectedButtonに自身のゲームオブジェクトを設定し前に選択していたボタンに自身を設定します。ボタン選択解除時の処理は今回何もしていませんが、何か必要なことがあるかもしれないので作っています。{}}ScrollUpScriptスクリプトはScrollDownScriptとほぼ同じでScrollUpメソッドを呼び出す処理に変えています。CommandScriptでScrollDownScriptとScrollUpScriptの取り付けアイテム一覧をスクロールする処理はScrollManagerに記述しました。アイテム一覧をスクロールさせる為に一画面の最後のボタン二つにScrollDownScriptを取り付け、スクロール後の最初のボタン二つにScrollUpScriptを取り付ける必要があります。ItemPanelButtonPrefabプレハブをインスタンス化した時、12、13個目のボタンだった時にScrollDownScript、14、15個目のボタンだった時にScrollUpScriptを取り付けます。CommandScriptスクリプトに処理を追加します。scrollManager;scrollDownButtonNumは何個目のボタンからスクロールするかの指定で、数値は0から始まるので12を設定すると12、13個目のボタンが選択された時にContentを下にスクロールします。scrollUpButtonNumも同じでこちらの場合は14、15個目のボタンが選択された時にContentを上にスクロールします。Awakeメソッドに処理を追加します。content.GetComponent<ScrollManager>();contentを取得した後に処理を追加し、contentに取り付けたScrollManagerスクリプトを取得します。CommandScriptのCreateItemPanelButtonメソッドに処理を追加します。アイテムスクロールスクリプトの取り付けて設定値のセットitemButtonIns.AddComponent<ScrollUpScript>();}CreateItemPanelButtonメソッドが呼ばれたらScrollManagerのResetメソッドを呼んでリセットします。これは最初にユニティちゃんのアイテムを表示した時にアイテム一覧をスクロールした状態で、大鳥ゆうじのアイテム一覧を表示するとスクロールしたままになってしまうので、毎回リセットをする為です。itemPanelButtonNumは1画面中でアイテムパネルボタンの番号を保持します。1で割って余りが0の時にそのアイテムパネルボタンのインスタンスにScrollDownScriptを取り付けます。AddComponentで該当するコンポーネントをゲームオブジェクトに取り付けることが出来ます。ScrollUpScriptを取り付ける処理も同じように行います。itemPanelButtonNumをインクリメントした後にitemPanelButtonNumの値を変更する処理を追加します。2;}スクリプトを取り付けるアイテムパネルボタンの番号を変更し、スクロールした後のボタンも同じようにスクリプトを取り付けられるようにします。アイテムパネル外をマウスで押した時の処理に追加アイテムパネル以外をマウスで押すと選択がItemPanelの最初の子要素を強制的に選択させるという処理をアイテムコマンドを作成した時に取り付けましたが、今回のアイテムスクロールをした後にパネル外をマウスで押すとスクロールをした状態のまま最初のボタンが選択されるので、スクロール値も最初の位置に戻す処理を追加します。CommandScriptのUpdateメソッド内の強制的にボタンを選択させる処理にItemPanelのスクロール値を初期位置に戻す処理を追加します。{EventSystem.current.SetSelectedGameObject(useItemSelectCharacterPanel.transform.GetChild(0).gameObject);}}currentCommandがCommandMode.ItemPanelの時にscrollManager.Reset();123scrollManager.Reset();を追加します。これで機能が完成しました。アイテム一覧をゲームコントローラーでスクロールしてみる機能が出来たのでキーボードのキーかゲームコントローラーを使ってアイテム一覧がスクロールされるか確認してみましょう。上のように15、16個目のボタンを選択、選択解除した時にアイテム一覧がスクロールするようになりました。終わりにこれでアイテムコマンドが完成しました。アイテムの選択をする時の移動が少し遅いですね。いうわけで次回はアイコンの移動(次のボタンの選択処理)が早くなるように設定を変更してみます。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう27ー戦闘中のダメージや回復ポイントのアニメーションを作るーユニティちゃんのRPGで戦闘中のダメージや回復ポイントをキャラクターの周辺にTextMeshProを使って表示し、ポイントがアニメーションをするような機能を作成していきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう3ー村の作成ーユニティちゃんのRPGでTerrainを使って村の作成をしていきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう6ー村人のプレハブ可と村のBGMの設定ーユニティちゃんのRPGで村人の移動機能と会話機能をプレハブにしたり、村のBGMを流すようにしてみます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう16ー戦闘シーンで使用する敵のステータス作成ーユニティちゃんRPGの戦闘シーンで使用する敵の個々のステータス、敵パーティーのステータスを作成してきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう5ー村人との会話ーユニティちゃんのRPGでユニティちゃんが村人と会話する機能を作成していきます。ユニティちゃんのRPGを作ってみようユニティちゃんのRPGを作ってみよう1ープロジェクトの作成とキャラクターのインポートーユニティちゃんのRPGを作る為にまずはUnityのプロジェクトの作成とキャラクターであるユニティちゃんデータのUnityへのインポートを行っていきます。ユニティちゃんのRPGを作ってみよう11ーアイテムコマンドの作成ーユニティちゃんのRPGを作ってみよう13ー次のボタンの選択速度を上げるーホーム作ってみようシリーズユニティちゃんの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をコピーしました。