私はここ半年くらいUnityでミニゲームを作りまくっているのですが、今まではゲームを量産するうえでとても面倒な問題にぶつかっていました。それは「あるゲームの部品を他のゲームに使いまわしづらかった」という問題です。
ゲームを構成するモノの中には、大体どのゲームにも使うような共通部品があります。しかしそれが使いまわしづらい作りになっていたので、ゲームごとにいちいち作り直す必要があってとても面倒でした。
そこで今年の2月くらいから、そのような共通部品をまとめた「汎用アセット」を少しずつ制作しています。今回はUnityでのゲーム制作で汎用アセットを作るメリットと、そのような汎用アセットにはどういう機能が必要なのか?といったことについて書いていきます。
- 最近ゲームシステムを自作しはじめた、くらいの方を対象とした記事です。
- 実際に汎用アセットがどんなものかを見てみたい、という方は「くろくま基本アセット」のページも併せてチェックしてみてください。
「汎用アセット」を作るメリット
はじめに汎用アセットを作るメリットですが…これは当然ながら「手間と時間の節約になる」という点に尽きます。
汎用アセットをパッケージとして出力しておけば、新しいプロジェクトにそれをインポートするだけで基本部分ができた状態になるのでとても楽です。普通にゲームを作るときはもちろんですが、サクッとゲームを試作したいときやゲームジャムなど時間がない場合には特に役立ちます。
汎用アセットに必要な「ゲームの共通部品」について
それで単に「汎用アセット」と書いただけでは全く具体性に欠けるので、ここでは「どんなゲームにも使える共通部品とは何か?」をもう少し具体的に書こうと思います。
私がUnityでのゲーム制作で頻繁に使う「ゲームの共通部品」は次の通りです。
- ゲーム管理システム(GameManager)
- サウンド管理システム(SoundManager)
- セーブ・ロードシステム(SaveManager)
- シーン切り替えシステム
- 時間管理システム(TimeManager)
- キャラクターコントローラー
- UIのプレハブ
ゲーム管理システム(GameManager)
ゲームの進行状況などを総合的に管理するシステムです。ここはゲームごとに処理内容が違ってくるので、スクリプトには雛形だけ書いておきます。
具体的な処理内容は姉妹サイトの「Unityでゲームを作ろう!」の作例をご覧ください。
サウンド管理システム(SoundManager)
Unityには個々のサウンドをまとめて管理する仕組みがデフォルトでは用意されていないので、それを導入しておくと楽になります。
サウンド管理クラスの作り方は「【Unity】サウンド管理クラス(SoundManager)を作る」を参照してください。
セーブ・ロードシステム(SaveManager)
Unity標準のセーブ・ロード機能であるPlayerPrefsは問題だらけなので、こちらも自作したものを使うのが良いと思います。JSONというフォーマットを使うと比較的簡単に実装できるのでオススメです。
セーブ・ロードシステムの作り方は「【Unity】JSONを使ったセーブ・ロード処理」の記事をご覧ください。
シーン切り替えシステム
Unityではシーンの切り替え自体はスクリプトから簡単に行えますが、トランジションの処理などは別途自分で用意する必要があるので新しいクラスにまとめてしまったほうが楽です。
私の場合は「MoveSceneManager」という自作クラスを作り、その中にトランジションの処理やシーンの読み込み時に自動で実行する処理などをまとめて書いています。
時間管理システム(TimeManager)
ゲームでは制限時間を設けたりタイムを計ったりすることがよくあるので、時間を管理できるクラスを作っておくと便利です。時間管理といっても、必要なのはカウントダウンタイマーとストップウォッチ機能くらいなので作るのは難しくありません。
キャラクターコントローラー
キャラクターを動かす処理はゲームの種類を問わずよくあるので、これもあらかじめ用意しておいた方が手っ取り早いです。
UIのプレハブ
Unityでゲームを作るなら「UIのプレハブ」を用意しておくと非常に便利です。というのは、いちいち新しいUIを別に作成すると色やフォントなどを一括して変更したいときにとても面倒だからです。
テキスト、ボタン、トグルなどよく使う部品は全部クリーンアップ(=子のテキストやイメージを予め用意したプレハブに置き換える等)して、そのうえでプレハブ化しておくとUIの制作がとても捗るのでオススメです。
以上のような共通部品を一通り用意しておけば、どんなゲームを作るときにもスムーズに作り始めることができます。とても便利になるのでぜひ汎用アセット作りにチャレンジしてみてください。