yumeの日記: Unity制作 メデューサ・ゲーム #53
メデューサ・ゲーム(仮)
(更新はなし)
--
第二話カットシーンを進めるにあたり、第一話カットシーンの制作過程でざっくり考えた手順をまとめておこう
背景の扱いに困る。カットシーンは上下の黒帯マスクをのぞいても、1920x936pxの大きさである。
1024x1024pxいっぱいに入れたテクスチャを2枚使うと、Spineからのエキスポートでは1pxの空白を入れてしまう
背景はこれまではベクターデータで作成していたが、これからはProcreate + Photoshopでゴリゴリ描いていくつもりなので、そのへんも踏まえると……。
最終的にできた背景画像を、1020x1020pxで2pxほど重ねて切り出したものをSpine上で配置して、背景の切り替えもSpineアニメーションで管理してしまう、というのがよいか。
--
そんなこんなで第二話OPは完成した。
第一話OP・EDを作るころより、ずっと制作速度は上がっている実感がある。
この調子で第二話EDも作りたいが、その前に「カットシーンとパズルステージのつながり」を調整するものを置いておきたい。
まずひとつは、パズル中に出るダイアログだ。キャラクターの会話や独り言でシーンや状況の偏移を簡単に表現していく。
もうひとつは、イベントシーンだ。いわゆるRPGみたいな「ある特定のエリアに進入するとダイアログやシーン切り替えが発生する」というあれ。
これ、作り方が地味にちょっと難しいな。各イベントはその処理がそれぞれ全然違う(ダイアログ出すだけなのか、キャラクターを移動させたり特定のアニメーションさせたりするのか、始まる条件は何か、とか色々考えられる)。
とりあえず「InGameEvent」という抽象的な概念を作っておいて、それを継承してさらに複雑な処理を回す何かを作ればいいかな?
イベントではまずダイアログは使うであろうから、InGameEventには「EndDialog()」メソッドを用意しておいて、ダイアログ関連のスクリプトがダイアログを読み終えたらそれを呼び出す。
ダイアログを読み終えたときの挙動はイベントごとに違うだろうから、それは継承先が決めるとして……。
/// <summary>
/// ゲーム内イベントのベース
/// </summary>
public class InGameEvent : MonoBehaviour
{
[SerializeField] protected List<string> dialogFileList = default;
protected const string eventsDirectory = "Events/";
/// <summary>
/// 呼び出したダイアログを読み終えた。
/// </summary>
public virtual void EndDialog()
{
}
}
そんで、例えばEpisode1の最終ステージを終えた後に行くイベントステージに、こいつを継承した「Episode1CompleteEvent」を用意して、そいつがプレイヤーに触れた時にイベントを開始し、ダイアログを呼び出す。
ダイアログは呼び出されたときにInGameEventの参照を受け取っておき、なんやかんやあって、最終的にダイアログを読み終えたら「EndDialog()」を呼び出し、(ここでは)イベントを終える。
するとこんな感じになる。
ここではカメラワークの移動とミスティを定位置に移動させ、視点も固定し操作禁止にする。
イベント増えるたびにスクリプトが増えるけど……。まぁいいか。
「イベントでできること」をあらかじめ限定しておいて、イベントに必要な変数を全て用意しておけば、スクリプトは1個(ないしやりたいことの種類に応じて複数)でできるかもしれないな。このゲームに関してはイベントはそう多くはないけど(いまのところ……)、もっと多くのイベントが必要なゲーム(RPGとか)だったらもっとしっかり仕組みを考えないといけないだろう。
--
それと、その仕組みのためにダイアログシステムもちょっと改修した。ステージマネージャーにくっついてる部分を分離したりとか。「神クラス」という言葉の意味がわかってきた。「GameManager」の方はもう手の施しようがない。
ダイアログを改修したついでに顔画像のスプライトも表示できるようにした。
顔画像を大量に用意するのが面倒だな、と思ったがミスティやディアティスの表情ならすでにSpine上でいくらでも組み合わせられるので、これをPNGで書き出してIllustratorで円形にマスクしたらもうできた。
Spineで表情を変えやすいようにボーンやスプライトスロットを設定しておいたので、元のIllustratorで調整するより手軽だった。量産できる。
あと関係ないけど、息抜きにまたBlackJackを作った。
今度はUnityで作って、
Githubに公開リポジトリを置いた。
さらにそれをUnityRoomに投稿しておいた。
画像素材の作成込みでだいたい8時間くらいでできた。(うち2時間くらいGithubのアカウント設定でつまづいた気がするが……)プログラミングぢからもちょっとあがってる気がする。
Unity制作 メデューサ・ゲーム #53 More ログイン