123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- //======= Copyright (c) Stereolabs Corporation, All rights reserved. ===============
- using UnityEngine;
- using UnityEngine.AI;
- /// <summary>
- /// Tells the attached NavMeshAgent component to walk to a random location, and finds a new location
- /// each time it arrives.
- /// Used in the ZED spatial mapping sample to make the bunny character walk around once you've finished
- /// scanning your environment.
- /// </summary>
- [RequireComponent(typeof(NavMeshAgent))]
- public class RandomWalk : MonoBehaviour
- {
- /// <summary>
- /// Maximum distance of the next random point to walk to.
- /// </summary>
- [Tooltip("Maximum distance of the next random point to walk to.")]
- public float maxRange = 25.0f;
- /// <summary>
- /// The NavMeshAgent component attached to this GameObject.
- /// </summary>
- private NavMeshAgent m_agent;
- /// <summary>
- /// Whether the agent should be walking.
- /// </summary>
- private bool startWalking = false;
- /// <summary>
- /// Current random destination the agent is walking toward.
- /// </summary>
- private Vector3 destination;
- /// <summary>
- /// Factor used to narrow the range of possible random destinations if positions at the range are difficult to find.
- /// </summary>
- private uint reduceFactor = 0;
- /// <summary>
- /// Enables the agent component and begins walking.
- /// Called by EnemyManager once the agent is successfully placed.
- /// </summary>
- public void Activate()
- {
- m_agent = GetComponent<NavMeshAgent>();
- m_agent.enabled = true;
- startWalking = true;
- }
- void Update()
- {
- if (startWalking)
- {
- if (m_agent.enabled)
- {
- if (m_agent.pathPending || m_agent.remainingDistance > 0.1f)
- {
- reduceFactor = 0;
- return;
- }
- destination = (Mathf.Abs(maxRange) - reduceFactor) * Random.insideUnitSphere;
- m_agent.destination = destination;
- if(reduceFactor < Mathf.Abs(maxRange)/2) reduceFactor++;
- }
- }
- }
- }
|