2023-11-30 #開発ログ



2023-12-01 14:18:08

開発



サマリー

イベントシステムの大枠がほぼできた
作ってても画面に反映されないし一番頭を悩ませてたとこができたのでめちゃくちゃうれしいわね…


前回から追加されたイベントシステム処理

- イベント完了後の内部パラメータ変更
- イベント完了後のシーン遷移



1つのイベントは↑のスクショ(見にくい)の通りシーケンス(`sequence`)と副作用(`sideEffect`)でできてる
シーケンスにはテキストやキャラの表示情報が入ってる
サイドエフェクトにはイベント完了後のパラメータ変動情報やシーン遷移情報が入ってる

基本的にテキストウインドウの表示を伴う動作はイベントとして処理する


イベントの処理は、
1. `EventManager`でイベントリストからid指定で1イベント取り出し
2. 取り出したイベントからシーケンス抽出して`SequenceManager`に投げる
3. `SequenceManager`はテキストウインドウやキャラ立ち絵を連動して動かしたり、クリックイベントを処理したりする
4. シーケンスの表示が完了したら、`SequcenceManager`から`EventManager`に完了通知を送る
このとき、副作用に分岐がある場合はどちらを適用するのか、番号をいっしょに送る。
5. `EventManager`はイベントから副作用を抽出して、後処理を実行
6. パラメータの変動をテキストで表示する場合は、シーケンスの表示に使った`SequenceManager`を使いまわす(!!??)
7. シーン遷移を伴う場合は、`EventManager`を呼び出した親`Scene`に完了通知と一緒にシーン名を送る
`Scene`は自身を殺しつつ、Game.ChangeScene(destSceneName)でシーン遷移実行


6,7がそこそこ力技で、のちのち後悔しそうな予感がある……
でもめちゃくちゃ悩んだ部分だったのでとりあえず動くようになってよかった……


(マジで読む必要ない自分用備忘録)
もともとは、遷移先シーン名(文字列)からリフレクションで各シーンクラスを生成予定だったけど、window[ClassName]が環境によって使えるか怪しそうなので`Game`クラスに`changeScene(desctSceneName:string)`を作って`switch(destSceneName)でベタ書きすることにした


あとRxJSがちょっと使えるようになったおかげで、監視・通知周りがかなり気軽にできるようになって嬉しい。まっとうな使い方かはわからんけど…


イベントシステム未実装項目

- 背景表示
- BGM再生
- ワンショット系のSE再生
- 表情差分表示
- バックログ


そのほかできるようになったこと

- シーン遷移(枠組みはあって今までやってなかった やってみたらすんなりできた)
- ボタンを画面に配置 → クリックでなんかする

ボタン系はあくまでガワとしての機能だけ持ってて、
クリック通知を親に送るだけで処理はしない
全てのアクション(通知)の処理は親`Scene`でやる
という方針にした

とにかく`Scene`(の子クラス)にがしがしコンポーネント配置や処理を書いていく感じ
多分Unityもそんなんだし

複数コンポーネントが強調して動く場合がちょっと困りそう
`SequceneManager`みたいなものを作るのは重いし、結局あるシーンのある用途に特化しちゃうんだったら各コンポーネントごとに直接操作するでいいのかなあ…



これからの小目標

* 出会いのスチルを描く
* 出会い~仲良くなるまでのコミュニケーション画面を作る(アパートの踊り場)
* 仲良くなってからのコミュニケーション画面を作る(主人公の部屋の中)
* ゲームパラメータをどう動かしていくか考える
* 音を鳴らせるようにする
* 背景を表示できるようにする



かなしい知らせ

Apple Pencil破壊!!(17,000円)



Apple Pencil購入!!!!(19,000円)









いいね!