こちらは「Aiming Tech Book Vol.4 1章 JobSystemによる3Dシューティングゲーム」のサンプルプロジェクトです。 前作「Aiming Tech Book Vol.3 1章 Collider を避ける魚群シミュレーション」のプロジェクトを元に、シューティングゲームに拡張したゲームになっています。
Collider を避ける魚群シミュレーション サンプルリポジトリ : https://github.com/Shitakami/BoidsSimulation_ColliderAvoidance
※バージョンが低いので現バージョンと異なる部分があります。
- Unity2022.3.16f
- Bult-in
- Unity Package
- Burst 1.8.15
- Collections 2.1.4
- Mathematics 1.2.6
Capture.mp4
プレイ環境
- Windows11
- CPU : Core-i7 14700KF
- メモリ : 32GB
- GPU : RTX 4070 Ti Super
- 個体数 : 3万体
- プロジェクトのデフォルト設定は1万5千体になっていますので注意してください
- fps : 100 ~ 90fps
- カメラ回転 : マウス移動
- スペースキー : 弾を発射
- JobSystemShooting-unity : サンプルゲームのUnityプロジェクト
- Assets
- Materials : DrawMeshInstancedIndirectdの描画で使用するMaterial、シーン上のオブジェクトのMaterialなど
- Prefabs : サンプルゲームで使用されるPrefab
- Scenes : サンプルゲームのシーン
- ScriptableObject
- BoidsSettings.asset : 群れを動かすための設定データ
- Scripts
- Boids : 群れを制御するスクリプト
- Data : JobSystemで使用するData
- Debugger : 群れをシミュレーションする範囲を描画するスクリプト
- Job : JobSystemで実行するスクリプト
- SceneObjects : シーン上で動作するスクリプト
- Utilities : 群れの計算で使用するスクリプト
- Collision : 衝突を判定するスクリプト
- Player : プレイヤー(砲台)を動かすスクリプト
- RendererUtilities : 個体を描画するスクリプト
- GameManager.cs : シーン上の群れをシミュレーションし、衝突判定をシーン上に反映させるスクリプト
- Boids : 群れを制御するスクリプト
- Shaders : DrawMeshInstancedIndirectdの描画で使用するShader
- Tests : 衝突判定のテスト(開発時の名残)
- Assets
プレイ環境に応じて、群れの個体数を変更、またはシミュレーション範囲を調整してください。
プロジェクトの Assets > ScriptableObjects に含まれる BoidsSettings.asset がシーン上のシミュレーション設定データになります。
この BoidsSettings.asset の Instance Count を変更することで、シミュレーションの個体数を変更できます。
プロジェクトの Assets > ScriptableObjects に含まれる BoidsSettings.asset がシーン上のシミュレーション設定データになります。
この BoidsSettings.asset の項目となる 結合/分離/整列 の値を変更することで群れの形状が変化します。
また、個体設定 を調整することで個体の大きさや速度、加速度も変更できます。
回避行動の設定 ではシーン上に配置されたColliderを避ける回転速度や回避し始める距離を調整できます。
注意点として、結合/分離/整列 に含まれる Cohesion/Separation/Alignment Affected Radius を大きい値に設定しますと処理負荷が大きくなります。
原因として、各個体が見る周りの個体数が増えるため、ループ数が大きくなり処理負荷が増加するためです。
詳しくは「Aiming Tech Book Vol.3 1章 Collider を避ける魚群シミュレーション」を参照ください。
シーン ShootingGameScene 上の Boids オブジェクトを選択することでシミュレーション空間がScene View上に描画されます。(描画されない場合は右上のGizmo表示が有効であるか確認してください)
このシミュレーション空間は Boids オブジェクトのPositionとScaleに紐づいており、このPositionとScaleを変更することでシミュレーション空間を変更できます。
発射できる弾の個数は、ゲーム再生時に初期化されて個数が固定されます。また、衝突時のエフェクトも同様です。 なので、弾の連射速度を上げるだけでは、弾やエフェクトを使いきってしまうので以下の対応が必要になります。
- シーン
ShootingGameScene上のBulletPoolオブジェクトにアタッチされているBullet PoolコンポーネントのInitial Pool Sizeを増やす - 同シーンの
EffectPoolオブジェクトにアタッチされているExplosion Effect PoolコンポーネントのInitial Pool Sizeを増やす - 同シーンの
ShooterオブジェクトにアタッチされているShooterコンポーネントのInterval Secondsの秒数を減らす
その他、弾の速度はPrefab Bullet.prefab のコンポーネント Bullet の Velocity で変更できます。
ゲーム開始時に、個体に弾が衝突したときの爆発エフェクト ExplosionEffect に ExplosionObstacle コンポーネントがアタッチされます。
この ExplosionObstacle は、SphereCollider範囲内の個体に対して中心座標からの斥力(離れる力)を加えます。
これにより、弾が衝突した箇所から個体は離れるような挙動をします。
また、群れのシミュレーションにはColliderを避ける処理が入っているため、衝突が発生した箇所を避けるよう動作をしています。


