Unity備忘録46頁目「UIとインベントリ操作3」

江上宿六です。

 

インベントリ関連だらけになってしまいましたが、そろそろ別のことにも

手を付けようと思っていますので。 今回はアイテム数が増えた時の考え方と

その他実際にちょっとやってみた事について軽めに書いていきたいと思います。

 

投稿したつもりが下書きになっていたので今投稿です。

現状インベントリに表示されるアイコン数は10個です。 その中でカーソルを

移動させるというのはだいたい上手く行きましたが10個を上回るとどうなるかです。

f:id:y6yegami:20190722151804p:plain

もちろんカーソルが枠外に行ってしまいます。 言うまでもなく駄目なやつです。

その対処方は色々あってページが切り替わるようにして11~20個目を表示するとか

アイコンをスライドさせていくとか色々ありますが、今回は後者でやっていきます。

f:id:y6yegami:20190722152401p:plain

前回のMoveCursorPos()関数に条件を追加しました。 カーソルを右に動かす時に

cursorPosが9以上ならば代わりにscrollPosを増加させるようにしました。

 

これでカーソルが右端で止まるようにはなりましたがカーソルが正しいアイテムを

指し示していない状態になります。 これを是正する為に都合良く動かせるものが

あったりします。 アイコン群の親であるInventoryItemsです。

f:id:y6yegami:20190722154621p:plain

これを動かす事でアイコン全てを動かせます。 途中でこの辺の構成を変えたり

したのがここにきて役に立つ感じです。

f:id:y6yegami:20190723140044p:plain

このようにscrollPosを増加させると同時にinventoryItemsのlocalPositionのxを

-80.0f動かすようにしています。 ちょっとこの辺の処理は不本意なものですが。

出来るならばGridLayoutGroupのCellSizeとSpacingを見たりすべきですね。

f:id:y6yegami:20190723141104g:plain

ちゃんとスクロールしています。 これを反対側も同様の処理をするのですが、

注意する点としてカーソルを左に動かす時は先にcursorPosが動くようにした方が

自然な感じになると思います。

f:id:y6yegami:20190723142214g:plain

そして最終的にこんな感じになりました。 入力によってMoveCursorPos()を呼んだら

最終到達点と中間点を保持させてフラグを立てておき、Update()内でフラグを判別し

一度中間点に向かってから最終到達点に向かうような挙動をするようにしました。

 

こんな感じでインベントリは良いですかね。 あとは選択肢を出して取り出したり

装備したり地面に置いたりとか出来るようにはしますけども、今までやった事と

あまり変わらないでしょう。

 

EventSystemとか使ったりもしたかったんですけど、色々考えるよりも

自分でぶん回した方が簡単で制御しやすかったので。 あとこの辺でややこしいのは

positionとかlocalPositionとかの値。 親子関係でもアレでしたけどもこっちは

アンカーとかまで絡んで位置情報が分かりづらかったですから、注意が必要ですね。

 

次回は、武器を装備したり表示したりみたいな事が出来れば。