パスワードを忘れた? アカウント作成
15005604 journal
日記

yumeの日記: Unity制作 メデューサ・ゲーム #50

日記 by yume

メデューサ・ゲーム(仮)

第一話追加。

--

●作業環境の移行

これまで、Spine、Adobe Illustrator、Adobe Photoshopはmacで、UnityとVisual Studioはwindows機でそれぞれ作業していた。
諸事情でwindows機をあまり使えなくなるので、開発環境をmacに完全移行してみる。

Unityのプロジェクトデータは全てGitHubにアップロードしていたので、macでSourceTreeを使いこれをクローンする。
ついでにUnityのマイナーバージョンを最新のものにする。

ビルドセッティングをチェックすると、ターゲットップラットフォームがWebGLからスタンドアローンになっていた。戻す。
試しにビルドしてみたところ、ビルド時間は513secで、windows機のおよそ倍の時間がかかっている。ふーむ。ただし前回から色々追加したので、ファイルサイズは10%ほど増えているし、macのアプリが諸々起動していた状態でのビルドだったので、次はもっと有利な条件で試してみよう。
それ以外では、Unityそのものの移行は特に問題無し。

Visual Studioはmac版もあるようだ。でもその前にVSCodeを試してみた。
しかしインテリセンス(っていうの?)がうまく動いてくれない(拡張機能のUnity IntelliSenseは "log"を"Debug.Log"とかに変えてくれはするが、RigidBody2D、みたいなクラスの候補にアクセスできない)。
色々調べて設定も確認したがどうもダメ。仕方ないのでVisual Studioを使ってみると、こっちはだいたい普通に動く。

しかし、windows版のVisual Studioでは関数やクラスにマウスオーバーすると、その関数を定義したところにジャンプできたのだが、こっちではできない……と思ったら右クリック>宣言に移動で移動できた。キーボードショートカットはcommand+D(または実装へ移動 command+I どう違うんだろう?)。
というわけでさしあたって困ることはなくなった。
物理的な作業空間とかディスプレイが多いとか、mac - windows機間でファイルをやりとりしなくてすむとか、作業上メリットも結構ある。早くこうしていればよかった。

gitとSourceTreeについてはまた別の問題があり、Pushするたびにパスワードを聞かれるようになってしまった。
以前macからbitbucketのリポジトリをどうこうするときは、こういったことはなかったので、GitHubで使うためのなんらかの設定が抜けているのかも。これは今度調べてみよう。

--

●第一話完成、進捗機能
第一話のエンディング側のアニメーションができたので、これをつなげて、ゲームに「ストーリー」という概念を実装していく。
・はじめから を押すと第一話のOPが始まる
・ステージセレクト(続きから)を選ぶと、
[第一話] - [ステージ01] - 〜 - [ステージ10] - [第一話ED]
[第二話] - [ステージ11] - 〜 - [ステージ20] - [第二話ED]
[第三話]……
というかたちのステージセレクトが開き、そこからプレイする箇所を選べる(ストーリー全体の進行状況も保存する)
各話は次のステージ、または次の話に自動的につながる。

このために、まずは物語の進行状況を記録するStorytellerというクラスを作っておく。
StorytellerはStoryクラス(オープニングカットシーン名、エンディングカットシーン名、スタートステージ、最終ステージからなる)をリストで持ち、管理する。
しかし依然としてステージのクリア状況はStageLibraryが管理しているので、若干冗長な気もするな……。
ざっくりUIを描くとこういうものになる。
各ステージのボタン状態はStageLibraryから読み出し、各カットシーンの既読状態はStoryTellerから読み出す、ということにしよう。

改めてみると、GameManagerがいろんな仕事をしてしまってどうもよくない。これはもう名前からしてよくないんだが……。あぁ、神クラスってこういうことだったんだ。
まぁチマチマと機能を切り分けるなりしていこう。

さしあたり、ゲームスタート時に(初めてなら)1話のOPカットシーンを起動し、10面クリア時にEDカットシーンを実行するように。
ステージセレクトはとりあえず進捗に合わせて選択できる箇所を限定したが、新たなデザインに合わせてがっつり作り直す。

--

●効果音

ステージ上のオブジェクトたちに効果音を鳴らしてもらう。
大雑把な仕組みは:
・音を発するオブジェクトがそれぞれAudioSource(Unityの音を発するためのコンポーネント)を持つ
・AudioSourceに何を再生させるか、どういった音量で再生させるかを管理するSoundEffectコンポーネントを作る。
・SoundEffectの音量をまとめて管理するSoundDirectorをゲーム全体を通して存在し続けるGameManagerに持たせる。

・GameConfigの値(masterVolumeおよびsoundVolume)を変更するたびに、SoundDirectorにもその値を渡しておく。
・ステージが読み込まれると、はじめ(Start関数)に全てのSoundEffectが自分自身をSoundDirectorのリストに登録する(SoundEffect型リスト「effects」)
・ロード完了時(すべてのStartを終えた直後)にSoundDirectorがeffects全員に正しい音量値を渡す。
・各オブジェクトのアクション(柱が起動したりとか)するたびに、自分のSoundEffectにaudioを再生させる。

SoundEffectは仲介と音量とaudioクリップを保持しているだけなので、抜いてしまおうと思えば抜いてしまえる(音量はAudioSourceが持ってるし、audioクリップは各オブジェクトのアクション側が保持すればいい)けどまぁいいや。
さしあたり、柱の開閉とレバーのスイッチ音を入れた。

--

●未修正バグ
・ED側のアニメのフェードイン演出が全画面で小さく映る(解像度にスケールを合わせるのを忘れてる?)
>macの最大化時だけかも?
・一部のドアを強引にすり抜けられる

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...