二代目備忘録スマートフォン用の表示で見る二代目備忘録2019-07-20Unity備忘録44頁目「UIとインベントリ操作1」Unity江上宿六です。最近はインベントリ関連を続けてますけども、ほぼ自己流というか好き勝手に作っているので挙動と精度が不安なんですよね。今回もそんな流れですけどもっとUnityに備わった機能で簡単にできないものですかね。今回はUIというかインベントリを表示させたらそこにカーソルなんかを表示して動かしたり選択したアイテムを取り出したりとかそういう事をやりたいと思います。やっていくわけですが、UIの構成というか階層が変わったので少し。CanvasというUIの大本の下にInventoryBG(背景)があり、前回ではその下にインベントリを元にInventoryItem(アイコン)を生成するようにしていましたが今回はその下にInventoryItems(空)を作り、そこにGridLayoutGroupを追加してその下にInventoryItemを生成するという風にしています。InventoryCursorはカーソル用のImageで、階層はInventoryItemsと同じです。以前の状態だとInventoryBGと並べるしかなかったので手を加えました。こんな感じでまとめておいた方が管理は楽でしょう。このインベントリを表示させたりする方法です。前回は途中で何かgifを置いたせいで色々とやったつもりになってしまってましたが、仕切り直しで。今回はインベントリを開くとゲームはポーズされ、キー操作がインベントリに移るという感じの設計なので、まずはボタンを押すとポーズするようにします。前回に少し書きましたが、Time.timeScaleを0にするとゲーム内時間が止まり実質ポーズしているような状態になります。1.0fにすると元に戻ります。その値を見てポーズ中かどうかという状態を返す関数も作りました。~GetPause()でポーズ中かどうかを判別して処理を分けるようにしました。ポーズ中でないならボタンを押した時にポーズするようにし、ポーズ中であればポーズを解除するようにしています。この時、これまで作った作ってきたキャラを動かす処理は当然ポーズをしていない状態の方に入ります。インベントリ処理はポーズしている状態の方に追加していく事になりますが、ポーズ中に加えインベントリ表示時というのを条件に入れた方が確実ですね。ポーズ状態の切り替えが出来るようになったらそれぞれのタイミングでインベントリ関連を表示したり消したりできるようにしましょう。インベントリを表示させる関数です。縦長ですが複雑なことはしていません。48行目、inventoryCountを宣言してインベントリにあるアイテム数を入れています。50行目でinventoryBG.SetActive(true)としてインベントリ(背景)を表示しました。52,53行目、インベントリにアイテムが無い場合はカーソルは非表示に。ない場合はカーソルを表示させ、インベントリにあるアイテムの数だけInstantiateでPrefabを作ったアイコンのベースを生成します。この辺は前回やった所をfor文対応させただけです。インベントリを非表示にする関数、こちらは簡潔です。前回も書いた子オブジェクトを全削除する処理を行いinventoryBG.SetActive(false)でインベントリ(背景)を非表示にしています。これらの関数をポーズやポーズ解除のタイミングで呼んでやる事でインベントリの開け閉めが出来るわけですね。最初はインベントリ空っぽの状態で開いてカーソルが出ないのを確認しています。次に持っているものをインベントリにしまい、インベントリを開いた時にカーソルが出ているのを確認しています。前回のと似たgifですが、カーソル分の違いが。長くなったので区切ります。次回は複数のオブジェクトをインベントリに入れカーソルを移動させるという事をやります。ここ数回はまとまりが悪い。»プロフィールid:y6yegami適当に勉強した事を忘れないように書き留めておくブログ。当面はBlender。便りが無いのは良い便り。月別アーカイブはてなブログをはじめよう!y6yegamiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。