作業メモ20240323:(モブおじ顔アイコン、イベント変化、イベントの移動)4h
■ モブおじさんのアイコンを用意する
またやらなくていいことやり始めた…とか思いながら作業をした。
15分くらいで終わってよかった。
■ 接触でイベントが発生するモブの配置 + 同時に、該当のモブと会話できるようにする
これ、どういうことなのか自分でもよくわかってなかったんだけど、
接触でイベント発生 > セルフスイッチで会話イベントに変更
の形式でやってみることにした。これ自体は難しくなくてすぐできた。
・問題1(イベント後の、イベント位置の移動)
イベント1(接触)のあと、イベント2に変化する際にイベントの位置がうまく処理できなくて悩んだ。
社内の人がセクハラしに近寄ってくるという設定なので、セクハラが終わった後は自席に戻ってほしい。
フェードアウトして指定の位置に戻すのもいいんだけど、歩いて元の場所に戻ってくれないの?
と思って調べたら、イベントを特定の位置に移動させる記事を書いている人がいた。
- RPGツクールMVに「指定したキャラクターの方へ歩く」があった件, https://qiita.com/krmbn0576/items/ea2c5007d709d7a1d2ab , @krmbn0576
ありがとう、先達の人…。
イベントエディタ > 自立移動:タイプ:カスタム:ルート > スクリプト...
から、this.moveTowardCharacter({x: 3, y: 4})
を記載したらできた。
・問題2(戻ったら上を向いてほしい)
ルート移動が終わったら上を向いてほしいんだけど、でもこのままだと戻って終わってしまう。
ルート移動はループ処理なのでどこで切るとかないんじゃないのこれ。
自立移動
じゃなくて、実行内容
側で移動させたい。
…と思ったら普通にあった。イベントエディタ > 実行内容 > 移動ルートの設定
ただこれはループしない。
幸いマップが大きくない。移動回数の最大値を決めて、その回数分強○移動させようか…。
マップやキャラに引っかかったりすることを考えるとすり抜けONだけど、それだと机の上を歩いたりする。
・問題3(移動したイベントが、任意の位置から特定の位置に戻るルートを決める)
問題2を解決するには、ルート設定が必要っぽいと判断した。
イベントの条件分岐で、現在位置によって移動処理を変えよう。
RPGツクールMZ スクリプトリファレンス のコピー, https://tkool.jp/mz/plugin/javascript/script_reference/gamedate.pdf, RPG Maker
便利そうだけど、これだけだとかゆい。
もう少し情報が欲しい。
公式っぽいけど『~~~のコピー』ってなんだ?
インターネット探してたら出てきたけど、ほんとに公式か?クラス: RPG.Event, https://github.com/tonbijp/RPGMakerMZ/blob/master/Reference/RPG.Event.md,
tonbijp
うーん?このクラスが何ができるのか調べてて、出てきたけどなんか思ってたのと違うな。this.character(0).event()
だけだと現在座標は取得できないのか?クラス: Game_Event, https://github.com/tonbijp/RPGMakerMZ/blob/master/Reference/Game_Event.md#event---rpgevent, tonbijp
あった!
イベントの現在位置のX座標(タイル)はthis.character(0).scrolledX()
でとれるっぽいぞ。
ついでに、移動時にプレイヤーだけすりぬけるようにしよう。
プライオリティを下げる。setPriorityType(0)
。0~2で0は通常キャラの下。
位置によって条件分岐して、移動ルートを設定……マップの中に条件分岐エリアが5つできた。
うーんバカかも。
これ、イベント(モブキャラ)の数だけやるんですか?
ありえん。歩かせて移動させたいとか言ってないで、フェードアウトでイベントの位置を瞬間移動させたほうがコスパいい。
あと移動中のウェイトなしにしたら、プライオリティ回復のコマンドが並行して処理されるようになったから意味ないかも。
コピペ用メモ
条件分岐例this.character(0).scrolledY() < 5
移動座標指定例this.moveTowardCharacter({x: 7, y: 6})
プライオリティ変更例this.character(0).setPriorityType(0)
・問題4(イベント移動のカクつき)
これは実質問題なかったけど、余計なことしてつまづいたからメモ。
マップやキャラに引っかかったりすることを考えるとすり抜けONだけど、それだと机の上を歩いたりする。
これの対策として、中継地点を設定していた。
どこにいても確実に移動できる位置に移動してから本来の目的地に移動…。
分岐がなくても確実に移動できてはいたんだけど、この確実に移動できる位置
というのが隣のマスだったりした場合、最大数ステップで同じ場所で足踏み(概念)が発生した。
現在地 - 経由地 - 目的地 の移動中の経由地で一瞬止まってしまうのでカクついて見えて嫌だった。
これどうしようかな~と思って悩んだけど、
そもそも、この確実に移動できる位置
は別に移動しなくてもいい位置
で余計な移動が発生する問題などもあって、問題3で全部条件分岐にしたのだった。
つまり、この経由地はもう用済み。
全部削除して、分岐に応じて最初から目的地に移動するように切り替えた。
一部の特殊な位置はややカクつくけど、目的地と距離が近いのでカクつきが小さい。
大幅に改善されたからまあ目的達成と言ってよいでしょう。
■ 気になってるプラグイン
イベントの移動範囲を制限したい場合は、こういうのにお世話になったほうが早いかも。
- イベントに移動制限をつけるプラグイン,
https://github.com/elleonard/DarkPlasma-MZ-Plugins/blob/release/DarkPlasma_NPCKeepOutRegion.js, DarkPlasma
■ 残タスク
[x] 接触でイベントが発生するモブの配置する。
[x] ↑二つを同時に行う。
- 企画の確認
- メニュー画面について考える。ゲーム部分って何が面白いんだっけ?
- システム情報の表示。日付、ステータス等。
- システム情報にプログレスバーを導入する。
- システム情報に何を表示するか考える。
- デイリーシステムの導入。ベッドで決定キーを押すと、日付が変わる。
- 服装によって挙動が変わるイベント(服装ステータスを管理して、立ち絵変更の際に反映されるようにする)。
- 服装によって挙動が変わるイベント(服装ステータスを管理して、服を段階的に着脱できるようにする)。