Object Pool and Trail Renbderer


shooter.unitypackage(55kB)
Unity2021LTSで3Dテンプレートを使用。
New Input Systemを使うのでパッケージマネージャーからインストールする。

Sphereが飛び出し、時間がたつと消える。
Sphereはプレファブのインスタンスで作られるが、消えた後もプールに残っており再利用される。

プール制御は、空オブジェクトGunにつけたスクリプトで行う。
トリガー制御、射出時にCylinderが赤くなり音が鳴るのは、すべてGunで実行。

Gunの追加コンポーネント

  • GunObj(script) トリガー操作
  • ObjPoolManager(script) オブジェクトプールの管理
  • AudioSource 音を出す
  • KeyInput(script) スペースキーでトリガーのテスト入力

  • SphereはGunの原点で表示され、空オブジェクトGunのZ方向に射出される。
    射出後はRigidBodyで重力や衝突の物理計算をおこなって進路が決まる。

    Sphereの追加コンポーネント

  • Destroyer(script) 時間がたつと消えてプールに戻る。
  • RigidBody 重力や衝突の物理計算をおこなう。
  • TrailRenderer 軌跡の尾を引く。

  • TrailRendererにdefault-Perticleのマテリアルを設定。
    Sphereのスケール1の時は、TrailのWidthが1でも問題ないがスケール変えたときは合わせないとはみ出す。



    HoloLensでの使用

    プラットフォームをUWPに切替えてから、プロジェクトを閉じる。
    Mixed Reality Feature Tool を使って、プロジェクトをMRTKモジュールを加える。

    加えるのは3つ。
  • Mixed Reality Toolkit Foundation
  • Mixed Reality Toolkit Tools
  • Mixed Reality OpenXR plugin
  • を選択しプロジェクトにインポート設定する。

    プロジェクトを起動したら、MRTKの設定を行う。
    MRTK HoloLens2プロジェクトの設定について

    Gunオブジェクトを持って動かせるように、Gunオブジェクトに、コンポーネントを追加する。
  • Object Maniplatorコンポーネント
     Constraint Managerコンポーネントは一緒に入る。
  • NearIntacractionGrabableコンポーネント
     Object Maniplatorコンポーネントも必要。
  • Box Coliderコンポーネント
     Gunにはコライダーが無いので、触る部分にコライダーを入れる。

  • メニューにtoolboxが追加されるので開く。

    toolboxで3Dボタンなどのプレファブを選択して、シーンに挿入できる。

    適当に一つシーンに挿入する。

    Gunはスケール1のCylinderなので大きい。
    3DボタンをGunの子供にすれば一緒に動くが、むしろ押しにくいので空間に置いておく。

    ボタンを押したら弾(球)が出る設定

    GunオブジェクトのGunObj(Script)コンポーネントのisFireをtrueにすると弾が出る。

    GunObj(Script)コンポーネントに、isFireを切り替える、Button_ON()、Button_OFF()を呼び出しても動く。
        public void Button_OFF()
        {
            GameObject gun = GameObject.Find("Gun");
            gun.GetComponent().isFire = false;
        }
    
        public void Button_ON()
        {
            GameObject gun = GameObject.Find("Gun");
            gun.GetComponent().isFire = true;
        }
    
    ボタンオブジェクトのインスペクターでEventに関数を追加する。
    select objectのフォームに、ヒエラルキーからGunオブジェクトをドラックドロップすれば入る。

    プレビューで確認 。


    HoloLensで動作確認。


    MRTKでGunオブジェクトを手で持って動かす設定

    オブジェクトにコンポーネントを追加する。
  • Object Maniplatorコンポーネント
    タッチポイントで操作できる。
    両手操作で移動、回転、スケールができるEverythingになっているが、Scaleはしないようにしておく方が現実らしく自然。

  • NearIntacractionGrabableコンポーネント
    Object Maniplatorコンポーネントも必要。
    掴んで動かす操作ができる。
  • SphereもCylinderも、持つには大きすぎるのでscale1を、0.1~0.05くらいに小さくする。


    触ったかどうかの検知だけ必要で、掴むのが不要であればNearIntacractionTouchableコンポーネントを使う


    NearIntacractionTouchableは、検出方向(白矢印)があるので設定に注意が必要。

    全方向で検出したい場合は、NearIntacractionTouchableVolumeコンポーネントを使う。
    NearIntacractionGrabable
    NearIntacractionTouchable
    NearIntacractionTouchableVolume
    いづれの場合も、指定コライダー接触時にトリガーを出すので、
    Interactiveコンポーネントのレシーバーで受けてアクションを発動する。