Unity移植を初めて3週間程度経ちました。 Unity版 UNREAL LIFEの基盤づくりが終わりかけています。 覚えている限りで実装したものを殴り描きしていきますね〜 【完了しているもの】 ●オブジェクトのフルコントロール Unityが標準で搭載しているイベント関数(UPDATE等)が遅いみたいなので、独自で類似処理を再定義しています。 ●イベント処理の基盤作成 会話やシーン再生など、時系列順に処理したいイベントを簡単に作れるようにしました。 ●オートセーブ・セミオートセーブ/ロード 管理対象は4つのデータです。 1:ConfigSaveData(1) ゲームの設定を記憶 2:SummarySaveData(0...*) 各セーブファイルの先読み用の情報群を記憶 →セーブ画面で全部のデータを読み込んじゃうと遅くて重くなってしまうため。 3:NoSceneSaveData(1) ゲーム全体で使うフラグ類全般を記憶。 4:SceneSaveData(0...*) 各シーン上に存在しているオブジェクトの位置を記憶。 ●ローカライズ機能 エクセルファイルで管理します。(便利!)テキストのIDを入れて、そのテキストIDに対応するセリフ等を言語設定別に定義できるようにしました。 コンフィグで言語切り替えを行った際、各UIに言語切り替えが通知されて再読み込みを行うなど。。 ●インプット対応の一元管理 マウス・キーボード・タッチ・バーチャルパッド ・コントローラ等の入力情報をリクエストレベルで抽象化します。 メニューボタンON、スタートボタン、キーボードのQとか、入力機器ごとに個別に全ての処理を書くわけではなく、メニューボタンON、スタートボタン、キーボードのQは全て「メニュー」というリクエストに変換します。UI側はメニューというリクエストが来たらメニューを開く、だけです。 アセット"Rewierd"を一部使用しています。 ●カメラワーク アセット"ProCamera2D"を導入しました。以下のことができます。 Tweening処理:カメラが対象のオブジェクトをスムーズに追う。 Boundary処理:カメラが指定した枠以上を映さない。 ●メッセージボックスUI 一文字ずつ表示するテキストボックスです。 途中でANYKEY(なんらかの入力)が命令されると全部のテキストが表示されます。 テキストが全表示されている状態でANYKEYが押されると、次のテキストを表示します。 ●UIの出現・消滅の遅延管理 Unityでは、オブジェクトの有効、無効のタイミングで処理が書けるようになっていますが、実際UIは ・有効時 有効→UIアニメーション開始→UIアニメーション完了→処理開始 ・無効時 処理終了→UIアニメーション開始→UIアニメーション完了→無効 のように、UIアニメーションによる遅延時間が必要です。なので、アニメーション開始/終了時のタイミングでなんらかの処理を書けるように改造しました。 アニメーション中のキャンセル命令がすごく面倒でした。。。(UIが移動中にキャンセルされると元の位置に戻る。) ●グラフィックのドット絵対応 実際のカメラの映像だと、少数の座標でドット絵がずれて表示されてしまいます。なのでレンダーテクスチャ ーという、解像度を指定してゲームを写せる板をカメラの目の前においてどんなオブジェクトでもドット絵に見えるようにしています。これをするとパーティクルや3Dオブジェクトもドットに見えるので、表現の引き出しが格段に上がりますね。。 【未実装のもの】 ◯音再生基盤 先日、UNITE(Unity開発者のサミットみたいなやつ)で音の処理にまつわる講演を聞いて来ました。実は大事なんですよね、音周り。。 UNREAL LIFEではインタラクティブな要素、例えばあるエリアに入ると楽曲が盛り上がる等の演出があるので、Unity版でもそれに対応できるといいな。。 ◯リソース管理 リソースが大量になることを見越して、アセットバンドル化(サーバ上から必要なリソースをダウンロードできる仕組み)とかできるような基盤作りが必要ですね。 今のうちは、リソースを管理する窓口役を一人だけにしておいて、アクセス先をローカルにするか、サーバーにするかとか、みたいな部分は抽象化して考えた方が良さそうです。 ◯各画面のUI実装 ◯各エリアの実装 ◯エリアごとのイベント実装 最後3つが一番ゲームとしてのキモなので、はやくつくりたい。。 というわけで、一通り面倒な部分ができてきました。(しんどかったです…) 一気に組み上げる準備はある程度できたかな?というところ。 ビットサミットが終わったら、一気にどかー!っと作っていきたいですね。