こんにちは! 個人でゲーム開発をしている、みどー(@mido_app)です。
この記事では、私個人が実際にプロジェクトに導入して使ってみた中から、他の人にもおすすめしたくなった便利アセットを厳選して紹介します。
カテゴリごとに分けて紹介していくので、記事全文を読むのがしんどい…という方も、目次から興味のあるカテゴリをつまみ食いする感覚でお楽しみいただけます!
なお、アセットとは別でUnityでゲームを個人開発している人におすすめな書籍や便利サービスなどを別の記事で解説しているので、こちらもご興味があれば覗いてみてください。
みどー
なお、この記事の内容は新しい有用アセットを見つけるたびに逐一更新していく予定です! 私の作るゲームは2D中心なので、紹介するアセットも2Dに寄っちゃうかも…
Table of Contents(目次)
どんなゲームの開発にもおすすめなUnityおすすめアセット
この章では、「どんなゲームの開発にも欲しい必須級の神アセットです!」と自信を持っておすすめできるものを抜粋して紹介しています。
Mobile Tools v2.0 + Example Game(有料): モバイルのアウトゲームに必要な要素全部入り
「Mobile Tools v2.0 + Example Game」はモバイルゲームにありがちなログインボーナス・広告実装・課金・レビュー誘導などの機能を超簡単に導入できるアセットです。
有料かつちょっとお値段お高めではありますが、モバイルゲーム開発をする上で必要になってくる機能をコード1〜2行くらいの手間で簡単に自分のゲームの導入できる、心の底から神だと思っているアセットです。
このアセットを1つ購入するだけで、以下に挙げるすべての機能がコード数行で実現できるようになります。
なお、それぞれの機能だけが入った別売りの単体アセットもあるので、全部は要らないけどこの機能だけ欲しいという場合にも対応できます。
さらに、ドキュメントが非常に充実していてわかりやすいのも特徴で、例えば広告機能なんかはAdMob/AppLovin/UnityAds/Vungle/IronSourceという広告プラットフォームごとのセットアップ手順が詳細に書かれていたり、GDPR対応はどうすればいいか、iOS 14.5に必要になったATT対応にはどう対応すればいいかなど、自分ひとりでは調査に時間がかかる内容が網羅的に書かれてあります(そういう意味ではドキュメントを読むだけでも価値があるかも)。
そのドキュメントを読んでなお詰まったことがあれば、公式Discordも用意されていて作者に質問ができるという丁寧さ…。使いやすさやサポートの手厚さを考慮して、この記事の1番最初に持ってくるに相応しいアセットと判断しました。
唯一の懸念点はお値段なので、チラッと覗いて自分に合いそうであればセールの時期を見計らって購入するとか、必要なものを個別に購入するなどを検討して見てください! よくある機能の実装はアセットに任せて、自分のゲームのコアな部分の開発に時間を使い、ゲーム開発の一番楽しいところだけを享受しましょう!
みどー
リストにある機能を全部自分で作るとなったらどれだけかかることか…。今まで買った中で1番満足した有料アセットです! どの機能も使い勝手が良く、とてもお世話になってます。上にあげたようなよくある機能を自分で実装するのが面倒だな〜という人は、ぜひ公式のドキュメントを1度見た上で判断してください。
DOTween (無料): オブジェクトをアニメーションするアセット
「DoTween」はUnityのあらゆるオブジェクトにソースコード上から簡単にアニメーションをつけられるライブラリです。
以下のような簡単なコードを書くことで、移動・回転・拡大・フェードインアウト・色変更などのアニメーションを直感的に制御できます。
transform.DOMove(new Vector3(5f, 0f, 0f), 3f); // 3秒かけて移動する
transform.DORotate(Vector3.up * 180f, 3f); // 3秒かけて180度回転
image.DOFade(endValue: 0f, duration: 3f); // 3秒かけてImageをフェードアウト
Unityは標準のアニメーション機能も充実していて、エディタ上からさまざまなアニメーションを定義できますが、移動量や回転量がその場の状況によって決まる場合など、コードからアニメーションを定義したくなることも非常に多くあると思います。
そんなときに使われる、もはやどのプロジェクトにも必須のデファクトスタンダードと言えるアセットが「DoTween」です。
Easy Save (有料): セーブデータを簡単に暗号化
「Easy Save」はデータをセーブ&ロード、そして暗号化する処理を以下のように1行で簡単に実装できるアセットです。
// データのセーブ
ES3.Save<int>("IntValue", 123);
ES3.Save<bool>("BoolValue", true);
ES3.Save<string>("StringValue", "some string");
ES3.Save<Transform>("TransformKey", transform);
// データのロード
ES3.Load<int>("IntValue");
ES3.Load<bool>("BoolValue");
ES3.Load<string>("StringValue");
ES3.Load<Transform>("TransformKey");
iOS/Androidなどのプラットフォームを問わず動作してくれるので、OSごとにデータをどこにどんな形式で保存したらよいかを調査する手間が省けますし、エディタからパスワードを設定するだけで暗号化も可能!
データのセーブ機能はどのゲームにおいても重要なので、データ管理を悩むことなく実装できるのはかなりの時短になります。
みどー
実は、設定の仕方によっては、コードを1行も書かずにセーブを実現することもできちゃいます。言わずと知れた有名神アセットです!
Pro Camera 2D (有料): 2Dゲーム用の神カメラアセット
「Pro Camera 2D」は2Dプロジェクトのカメラの動作を簡単にプロ級に引き上げることができる神アセットです!
カメラに対してコンポーネントをくっつけて自分好みにインスペクターから設定をするだけで、実装なしでもそれっぽいカメラの動きを実現できます。
以下のデモページを見ることでどのようなカメラの動きを実現できるかを確認できますが、一応記事執筆時点の主な機能を一部挙げておきます。これでも機能の全量ではないので、詳細はデモページやドキュメントをご覧ください。
- キャラクターにカメラを追従する際に追従する範囲/しない範囲や、キャラクターの移動方向に少しカメラを先行して移動させるなどカメラ挙動を柔軟に設定できる(2Dアクションゲームで有用)
- カットシーンのために複数の地点に決まったルールでカメラを移動する
- カメラに映ったものを描画する際のアスペクト比を設定する(レスポンシブなゲーム画面を作る際に有用)
- カメラが動くことができる境界を設定して、その中でのみカメラが動けるようにする
- パララックス、多重スクロール(マリオで例えると、マリオ歩いているフィールドと背景のスクロールスピードが違うことで立体的に見える機能)
- ピクセルパーフェクトカメラ(ドット表現に有用)
- ゲームボーイ時代のゼルダの伝説のように、部屋を移動したら次の部屋にカメラが映るような動き
- カメラを揺らす、ズームイン、ズームアウト、トランジションなどの演出系機能
みどー
多機能だけど、どの機能もインスペクターやシーンビュー上で設定が完了するので簡単に使えます。2Dゲームのカメラ周り、もう全部こいつでいいんじゃないかな…ってくらいお世話になっているアセットです
UI/UX系のUnityおすすめアセット
この章では、ゲームのUI/UX構築やそのクオリティアップに有用なアセットを紹介します。
Modular Game UI Kit (有料): モダンなUI構築 + プレハブの学習にも使える
「Modular Game UI Kit」はモダンなUを簡単に構築できるのコンポーネント集ですが、ただのコンポーネント集ではありません!
このアセットの一番の魅力は、プレハブ機能をふんだんに使って、UIコンポーネントが美しく管理されているところにあります。
このアセットの中にあるコンポーネントはプレハブをうまく使って管理されていて、色や形の管理がは1箇所に集約されています。
例えば、ボタンの形のデザインを変える際に、通常であれば全てのボタンのプレハブを修正しなければならないところを、このアセットでは1つのボタンプレハブの見た目を変えることでその他のコンポーネントがすべて即時に修正されるようにできています!
ゲーム業界で働いている人には普通のことなのかもしれませんが、この管理方法は個人開発かつ独学で開発していた私にとっては目から鱗でした。
UIの数が多くなるとプレハブも増え、デザイン変更する際に多くの手間がかかってしまいますが、このアセットの構造を学ぶことで、Unityで効率的にデザインを管理するための方法を学習できます。
そのため、仮にコンポーネントの見た目が自分の欲しい見た目でなかったとしても、プレハブの効果的な使い方を勉強する教材として買う価値があるアセットです!
Text Animator for Unity (有料): テキストに1文字ずつアニメーションを追加
「Text Animator for Unity」はその名の通り、テキストにさまざまなアニメーションを簡単に追加することができるアセットです。
使い方が超簡単で、Text Mesh Proがついているコンポーネントにアニメーション用のコンポーネントを追加した上で、表示したいテキストを以下の画像にあるようなタグで囲んであげるだけ。(例えば、<rainb>というタブで囲むと文字が虹色になるなど)
みどー
もちろん、タグでアニメーションする以外にもスクリプトやインスペクターからの設定も可能です!
UI Tutorial Fade(有料): チュートリアル中に特定のUIを注視させる
「UI Tutorial Fade」はチュートリアルでよくある、「特定のUIを注視させた上で他のUIを押せない状態にする」を簡単に実現できるアセットです。
以下のツイートの例のように、特定のUIにフォーカスを当てるようなことが実現できつつ、他の部分(ツイートの例だと薄い黒背景部分)は押せない状態になります。
追記: 詳しい使い方のイメージを解説した記事を別途書いたので興味があれば覗いてみてください。
開発を便利にするDevOps系のUnityおすすめアセット
この章ではエディタの使い勝手向上やデバッグに使えるアセットを紹介します。
Hot Reload | Edit Code Without Compiling (条件を満たせば無料): コードの変更を即画面に反映
「Hot Reload」はUnityで作ったゲームのコードを再ビルドしなくても即時適用できるホットリロード機能を実現するアセットです。
Unity Personalライセンス契約で開発している人は無料トライヤルの期限が無制限なので、ずっと無料で使い続けることができます。
通常、スクリプトを変更した場合には1度プレイモードを終了して、再度コンパイルが必要になりますが、このアセットを使うとスクリプトを保存した瞬間に即その変更がプレイモードに適用されるという優れものです!
すべてなんでも対応できるわけではなく、ホットリロード適用ができる変更とできない変更がありますが、ちょっとした動きの修正を再コンパイルなしでできるのはかなり時短になります!(Unityのビルドは長いですからね…)
SRDebugger – Console & Tools On-Device (有料): 自分用デバッグ画面を簡単構築
「SRDebugger」は開発者向けのデバッグツールを提供してくれるアセットです。
できることは以下の通りで、特に実機でのデバッグにとても役に立ちます。
- 画面の端を何度かタップすることで開発者用のデバッグツールが立ち上がる(Unityエディタでも実機でもできる)
- デバッグツールでプロファイラーを閲覧可能(メモリ使用量・FPSなどのパフォーマンス情報を見ることができる)
- デバッグツールでDebug.Logで出力したログが見れる(実機のデバッグに超役立つ)
- 実装を追加するとデバッグツールにデバッグ用オプションを追加できる(デバッグ用に所持金を増やすなど、開発者向けのチートなどを簡単に実装できる)
以下のツイートは開発中のゲームのデバッグ用に所持金を増やすチートを作ったときのものです。ちょっとしたクラスを実装するだけなので、数分でこういった便利な開発者機能を実装できるのが最高です!
Odin Inspector and Serializer (有料): エディター拡張を属性付けるだけで実現
「Odin Inspector and Serializer」は主にインスペクターの見た目をカスタマイズするのに便利なアセットです!
導入するだけでも、デフォルト状態では使いにくいリストのUIが改善される、Dictionary型のフィールドをインスペクターに表示できるようになる(Unityデフォルトではできない)などの効果があります。
しかし、自作のコンポーネントやクラスに属性をつけるだけでインスペクターの表示を改善できる点がこのアセットの一番の強み!
以下のように自作のクラスのフィールドに属性をつけるだけで、見た目を整えたりバリデーションを効かせたりといった様々な機能をインスペクターにつけてくれます。
[Serializable]
public class SampleClass
{
[SerializeField]
[LabelText("サンプルの値")] // インスペクターにラベルが表示される
[Required] // 入力していないとエラーが出るようになる
[ValidateInput(nameof(IsBigInteger))] // 自分好みのバリデーションを実行できる
private string _sampleValue;
public BigInteger SampleValue => BigInteger.Parse(_sampleValue);
private static bool IsBigInteger(string str, ref string message)
{
if (BigInteger.TryParse(str, out _))
{
return true;
}
else
{
message = "数値形式で入力してください";
return false;
}
}
}
属性の数は上記の例にあるもの以外にも、通常のゲーム開発でやりたくなるインスペクター拡張はほぼOdinで事足りるというくらいにはたくさん存在します。
みどー
Odinの属性でできることを自分で実装しようとするとそれなりの手間がかかるので、属性1つつけるだけで見た目を使いやすくコントロールできるのはかなり時短になります!
プロジェクトテンプレート系のUnityおすすめアセット
この章では、Unityのアセットの中でも特定ジャンルのゲーム開発プロジェクトが丸ごとアセットになっている「テンプレート系」の紹介です。
テンプレート系はUnityにインポートするだけで既に遊べるゲームになっていて、開発のベースプロジェクトとして使ったり、特定ジャンルのゲームの作り方を勉強するために使います。
2D RPG Kit (有料): RPGやアドベンチャーゲームの参考に
「2D RPG Kit」は2DでトップダウンビューのRPGを作るのに必要な機能が入ったプロジェクトテンプレートアセットです。
憧れのRPGを個人開発でも作りたい、という人はこのテンプレートを拡張していけばスピーディーに作れちゃいます。
どんなことができるかは、アセットストアにある動画を見るのが一番早いですが、テンプレートに入っている主な機能を抽出すると…
- NPCの作成や会話システム
- マップ作成システム
- アイテム & お店管理システム
- インベントリ(持ち物管理)システム
- ランダムエンカウント & 戦闘システム
- クエスト受注システム
とRPGゲームにある一通りの機能は実装されているので、あとはテンプレートを真似しながら要素を増やしていけば好みのRPGが作れるようになります。
みどー
個人的には、会話システムの仕組みを学びたくて買ってみたアセットでした。コードを読んだり、実査しに動かして動きを確認したりして、RPGの仕組みがどのようにできているかを勉強するのは楽しかったです!
コードを簡潔に書けるようにするUnityのおすすめアセット (中級者・上級者向け)
この章では、中級者・上級者向けのアセットとして、Unityのコーディングをステップアップさせてくれるアセット(というよりもライブラリ?)を紹介します。
UniRx (無料): イベントドリブンなコードを簡単に
「UniRx」はすごく噛み砕いて言うと、Unity上で何かのイベントをもとに何かの関数を呼び出す処理を超簡単に実装できる「イベントドリブン」な処理のためのライブラリです。
例えば、ボタンをクリックした時に何か処理を行いたい場合、通常はボタンのコンポーネントにインスペクタからどの関数を実行するか指定する、といったことが必要になります。
UniRxを使えば、C#の「LINQ」と呼ばれる記法を使って、以下のようにコードから簡単にボタンを押した時に実行する関数を設定できます。
button.OnClickAsObservable()
.Subscribe(_ =>
{
Debug.Log("ボタンを押した時に実行したい処理をここに書く");
});
できることはもちろんそれだけではなく、特定のフィールドの値が変わった時にUIを更新するなど、「何かが起こった時に他の何かを更新する」ような処理であればほとんど全てのことに適用可能。
覚える難易度が少々高いこともあり、Unityで開発を始めたばかりの方というよりは、少しUnityやC#に慣れてきて、効率的に開発したい人には超おすすめのアセットです。
なお、学習の際には以下のような記事や本を活用するとキャッチアップが楽です。1度覚えてしまえばUnityでの開発効率が大きく上がるものなので、学習してみる価値はあるはず!
UniTask (無料): コルーチン地獄から脱出
ちょっと上級者向けですが、ソースコードがコルーチン地獄になっている人におすすめしたいのが、非同期処理を簡潔に書くことができるライブラリ「UniTask」。
Unityで重たい処理を行う際や外部との通信などの処理を書く際には、コルーチンを使って実装することが多いと思いますが、UniTaskを使うことで「async/await」構文を使って、コルーチンの代わりに非同期処理を簡単に書くことができます。
こちらはUnityのアセットストアからではなく、GitHubからインポートをするライブラリになります。
例えば、経路探索のアルゴリズムは計算量が多いので、1フレームで一気に計算するのではなく複数フレームにまたがって計算を行いたい場合などがあります。
このような場合にコルーチンを使うのではなく、以下の例のようにawaitで待ち受ける形で簡潔に処理を記述できるのが魅力です。(以下のコードは自作ゲームの実装の一部をわかりやすく改変したものです)
var aster = new AsterAlgolism2D(_map); // A*アルゴリズムで経路探索するためのクラス
// 経路探索が終わったかどうかを1フレームごとに判定
// 内部では1フレームごとに少しずつ経路探索の計算が進んでいる
while (aster.SearchOneStep() == AsterAlgolism2D.Searching)
{
await UniTask.Yield(PlayerLoopTiming.Update); // awaitで1フレーム待機する
}
var routes = aster.GetRoute(); // 経路を取得
コルーチンとは、非同期処理とは、を詳細に説明するとなると記事が長くなり過ぎてしまうのでここでは割愛しますが、コードの可読性を上げて開発生産性を上げられるライブラリとしておすすめします!
キャッチアップの際にはUniRxの章でも紹介した以下の本や、他にも歴戦の有志の方がたくさん入門記事を書いているので参考にしてみるのがいいでしょう。
みどー
1つ上で紹介したUniRxと同様、慣れるまでに少し勉強が必要にはなりますが、上記の例のように非同期処理がとてもわかりやすく簡潔に書けるようになるので、慣れてきたら勉強してみる対象として頭の隅っこに保存しておくといいかも…
まとめ
以上、私が実際にプロジェクトに導入したアセットの中から「これはおすすめできる!」と思ったアセットのまとめでした。
個人的な意見としては、たとえ有料のアセットだとしてもそれを購入することで5時間開発時間を浮かすことができれば、例えば自分の時給が2000円だとすると1万円分のアセットはペイできます。
自分の開発生産性を上げて、よりゲームのコアなおもしろさにフォーカスした開発ができるよう、セールの時期もうまく活用しつつ、アセットはどんどん活用していけるといいですね!
今後も便利だと思ったアセットについては個人開発を進めながらどんどん追記していこうと思います。
この記事が少しでも皆さんのゲーム個人開発の参考になれば幸いです。