LoginSignup
2
0

More than 1 year has passed since last update.

Unity、NavMeshAgentをつけたオブジェクトをOVR Grabbableしたい場合

Posted at

Unityで、Nav Mesh Agentをつけた動物をOVR Grabbable対象にしようと思った際にかなり苦戦したのでメモ。
image.png

状況(課題)

  • Nav Mesh AgentをつけたゲームオブジェクトをOVR Grabbableでつかめるようにしたい
  • しかし、Nav Mesh Agentが有効だと掴めない

対応

  • Nav Mesh Agentを動的にON/OFFする

具体例

  • Box Colliderを大きめに設定し、Is TriggerをONにしておく

image.png

  • スクリプト内のOnTriggerEnterで、OVR Playerが近づいたらNav Mesh AgentをOFFにする
//NavMeshAgentを取得するための変数
NavMeshAgent m_navmeshagent;

//プレイヤーが近くにいない場合は再び動き出させるためのinvoke関数用のフラグ
bool m_invoke_to_reStartAfterOnCollisionEnter;

void Start()
    {
        //NavmeshAgentを太く
        m_navmeshagent = this.GetComponent<NavMeshAgent>();
  }

private void OnTriggerEnter(Collider collider)
    {
  //OVR Playerかどうかをタグで判定。この場合は「Player」タグがついているとする
        if (collider.transform.gameObject.CompareTag("Player") && !m_invoke_to_reStartAfterOnCollisionEnter)
        {
            m_invoke_to_reStartAfterOnCollisionEnter = true;

 //Navmesh AgentをOFFにする
            m_navmeshagent.ResetPath();
            m_navmeshagent.enabled = false;

 //Navmesh Agentを再び有効にするためのInvoke。この場合は10秒後に有効にする
            Invoke("ReStartAfterOnCollisionEnter", 10);
        }
    }

    private void ReStartAfterOnCollisionEnter()
    {
        m_navmeshagent.enabled = true;
        m_invoke_to_reStartAfterOnCollisionEnter = false;
    }
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0