ここまで Project Bonfireと称して、ソウルライクゲームの基本的な要素の実装方法を書いてきました。特に明記していませんでしたが、無料アセットだけを使って、ソースコードを継ぎ足していくという方針で書いていました。
無料アセットだけだとこのあたりがモチベーションの限界なので、ソースコードをまとめて終わりにしようと思います。
書いたこと
- PS4のコントローラを使う方法
- Cinemachine の FreeLook カメラの使い方
- BlendTree を使ったキャラクターの歩かせ方&走らせ方
- HUDの作り方
- Terrain を使ったマップの作成方法
- Rigidbody を使った移動とジャンプの方法
- 攻撃とダメージ処理、HPバーの表示
- 武器の変更とそれにあわせたアニメーションの変更
- etc…
書いていないもの
書ければ書きたいと思っていたものに、こんなものがあります。
- 敵のロックオン
- 敵の移動と攻撃 (AI と Navigation Mesh)
- 盾
- 弓矢
- パリィと致命、バックスタブ
- 複数のAttackArea 対応と 複数のHitArea対応
- アイテムの取得、使用
- ネットワーク対応
作り方はわかっているけど無料アセットではできないもの。手間がかかるからこのシリーズでは作りたくないもの。まだ挑戦中のものなどが混ざっています。
実装方針、問題点など
敵のロックオン
Cinemachine の Virtual Camera を使ってできないか調査中です。無理ならFreeLook カメラを使っていたところも含めて、カメラの処理を自分で書く必要があります。
コリジョンに対応したカメラを書くのは、ちょっと大変かもしれません。youtubeの動画などを調べていたのですが色々な方法があるみたいです。
Cinemachine でできたら、この続きとして書きます。
敵の移動と攻撃 (AI と Navigation Mesh)
簡単なものなら本(「オンライン3Dアクションゲームの作り方」)に出ているもので良いと思います。
索敵範囲に入ったら近づいてきて、一定の距離になったら攻撃アニメーションを実行する。攻撃アニメーションにはプレイヤーの場合と同様に、StartAttackHit, EndAttackHit, CallAnimationEnd を付けておけば、自動的にダメージ処理が行われます。
移動に、NavigationMesh を使うとなお良いですね。Navigation Mesh は、忘れないように後で書くかもしれません。
もっと賢いAIを作るなら、アニメーションの有料アセットを導入してからでないと作る気がしないです。
盾、弓矢、パリィと致命、バックスタブ
これらは、まずアニメーションが足りません。それぞれ何となく作り方は考えているのですが、実際作ると問題が出てくるかもしれません。
複数のAttackArea 対応と 複数のHitArea対応
大型の敵を導入してからでしょうか。プレイヤーや敵の当たり判定をもっと細かくする場合にも必要になります。
AttackArea の方は、本(「オンライン3Dアクションゲームの作り方」)のとおりに直せばいいと思います。
HitAreaの方は、Hierarchyビューに、Enemies のような階層を作って管理しようと思うとちょっと手間がかかりそうです。階層なしのところに置くのであれば、今ダメージ処理の伝搬に、transform.parent としているところを transform.root. にするだけで比較的簡単に実装できます。
アイテムの取得、使用
基本的には本(「オンライン3Dアクションゲームの作り方」)の通りで良さそうです。あとは、好きなタイミングでアイテムが使えるように、ボタンを押したらアイテムを消費するようにするだけです。
ネットワーク対応
難所の1つ。UNet は終わりらしいので、今なら Photon を使うのかいいのかな。
いずれ挑戦します。できたらこのシリーズの記事にしたいです。
ファイル
私の手元にある、このシリーズ用の最新のファイル一式です。
おわりに
後日、敵のロックオン、Navigation Mesh、ネットワーク対応あたりをこの続きで書くかもしれません。
あとは、3Dソフトを使ってアニメーションを自作できるようになれば、もう少し色々書けるようになるかも。
この後は、基本的には、別シリーズの記事にしたいと思います。