3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityでRPGのアイテム画面を作ってみる

Last updated at Posted at 2016-12-11

初心者向けのUI講座みたいなのを作ろうとしたのですが、
作っているうちにどんどん複雑になってしまい、
全部説明するにはこの余白は狭すぎる的な感じになっちまいやがったので、
ポイントだけ解説してあとはもうソース見てね★ という丸投げ手法で行きたいと思います。

まず作ったものはこちら。
ItemScene.png

はい、素晴らしいフラットデザインですねー(棒)

■操作方法
上下キーでカーソル移動
Zで決定
Xで戻る
アイテム選択モードで、Cを押すと捨てるモードに入ります。

消費アイテムは使う・捨てることが可能
装備アイテムは捨てることだけ可能
大事なものはどちらも不可
となっています。少し変えるだけで大事なものを使用可能にしたり出来ます。

〇WebGLでBuildしたもの
http://crosstie-bell.com/UISampleItemScene/index
※起動するまでちょっとかかります。
 (なぜかテンプレートのプログレスバーが出ない……)

ソースはUnityPackageにしてありますので、インポートしてください。
〇UnityPackage
https://dl.dropboxusercontent.com/u/47714155/UISample.unitypackage

※12/12追記
リストをスクロールさせた状態でアイテムを使うか捨てるかして、
リストの数が減った場合にエラーが出ていたので修正しました。

ここから解説しますが、ファッションプログラマーなので色々目を瞑ってください。

■解説

UIは、オブジェクト指向と状態遷移が出来てれば、たぶん怖くない!
のでオブジェクト指向的なクラス分けをざくざくやっていきます。

ItemSceneManagerというクラスが親玉で、
こいつが入力を受け取り、下の奴らに命令していきます。
子分には、
・ModeNameViewr
・CategorySelector
・ItemList
・ItemSceneDialog
がいます。ほぼヒエラルキーの構成通りになっています。

ヒエラルキー.png

次に状態遷移ですが、Modeというクラスを作りました。
Mode.Run() でそのモードのUpdateをします。
Mode.Enter() はそのモードに入ったときに呼ばれます。
Mode.Exit() はそのモードから出るときに呼ばれます。
これらはAction型のデリゲートなので、newするときに登録します。

ItemSceneManagerで各モードを作ります。
Modes.Add(new Mode(ModeEnum.CategorySelect, CategorySelectRun, CategorySelectEnter, CategorySelectExit));
Modes.Add(new Mode(ModeEnum.ItemSelect, ItemSelectRun, ItemSelectEnter, ItemSelectExit));
Modes.Add(new Mode(ModeEnum.UseItem, UseItemRun, UseItemEnter, UseItemExit));
Modes.Add(new Mode(ModeEnum.DropItem, DropItemRun, DropItemEnter, DropItemExit));

あとはItemSceneManagerのUpdate()で、

void Update(){
 NowMode.Run()
}

みたいにして、モードを変えるときは、

ChangeMode(ModeEnum.ItemSelect);

とすれば、勝手に今のモードのExit()が呼ばれ、次のモードのEnterが呼ばれたあと、
Run()が呼ばれるようになるわけです。

モードごとにクラスを作りたくなかったので、
メソッドだけ設定しておけばええやんって考えで作ってます。
良いのか悪いのかあんまりわかってません。
でも今考えたらモードごとにクラス作るのってオブジェクト指向じゃないような気がするしこれでいいんかな。

以上です・・・。

他のことはソースを見て、適当にニヨニヨしてくださいませ。
無駄にItemModelまで作っています。

・DataBaseにマスターデータっぽいのを置いています。
・UserDataが所持品情報などです
・アイテムリストはスクロールするようになってます。
・カーソルIndexはintで持たないようにして、インスタンスを使ってリストからIndexを取得しています。
(ちょっと重いと思うけどIndexOutしないため)

質問とかご意見あると嬉しいです。

サークルexeCUTEの「らせつ封魔伝」宜しくお願いします。(ガチマ)
http://execute.crosstie-bell.com/rasetsu/system.html

それでは!

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?