Пример #1
0
    public void InitPed(List <Vector3> pedSpawnerTargets)
    {
        agent   = GetComponent <NavMeshAgent>();
        anim    = GetComponentInChildren <Animator>();
        targets = pedSpawnerTargets;

        if ((int)Random.Range(0, 2) == 0)
        {
            targets.Reverse();
        }

        agent.avoidancePriority = (int)Random.Range(1, 100); // set to 0 for no avoidance

        // get random pos index
        currentTargetIndex = Random.Range(0, targets.Count);
        int prevTargetIndex = currentTargetIndex == 0 ? targets.Count - 1 : currentTargetIndex - 1;

        agent.Warp(GetRandomTargetPosition(prevTargetIndex));

        currentTargetPos = GetRandomTargetPosition(currentTargetIndex);

        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
        isInit       = true;
    }
Пример #2
0
    private void OnEnable()
    {
        if (!isInit)
        {
            return;
        }

        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
    }
Пример #3
0
    private void SetPedNextAction()
    {
        if (!agent.enabled)
        {
            return;
        }

        currentTargetPos = GetRandomTargetPosition();
        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
    }
Пример #4
0
    public void SetPedDestination(Transform target) // demo pedestrian control
    {
        if (agent == null || target == null)
        {
            return;
        }

        currentTargetT   = target;
        currentTargetPos = target.position;
        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
    }
Пример #5
0
    public void InitPed()
    {
        agent = GetComponent <NavMeshAgent>();
        anim  = GetComponentInChildren <Animator>();

        agent.avoidancePriority = (int)Random.Range(1, 100); // set to 0 for no avoidance

        target01         = transform.parent.GetComponent <PedestrianSpawnerComponent>().target01;
        target02         = transform.parent.GetComponent <PedestrianSpawnerComponent>().target02;
        currentTargetPos = GetRandomTargetPosition();

        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
    }
Пример #6
0
    private IEnumerator ChangePedState()
    {
        if (agent == null)
        {
            yield break;
        }

        thisPedState    = PedestrainState.Idle;
        agent.isStopped = true;

        yield return(new WaitForSeconds(Random.Range(idleTime * 0.5f, idleTime)));

        agent.isStopped = false;
        thisPedState    = PedestrainState.Walking;
    }
Пример #7
0
    private IEnumerator IdleAnimation(float duration)
    {
        if (agent == null)
        {
            yield break;
        }

        thisPedState    = PedestrainState.Idle;
        agent.isStopped = true;

        yield return(new WaitForSeconds(duration));

        agent.isStopped = false;
        thisPedState    = PedestrainState.Walking;
    }
Пример #8
0
    public void InitManual(Vector3 position, Quaternion rotation)
    {
        agent = GetComponent <NavMeshAgent>();
        anim  = GetComponentInChildren <Animator>();

        agent.avoidancePriority = 0;

        agent.Warp(position);
        agent.transform.rotation = rotation;

        thisPedState = PedestrainState.None;
        isInit       = true;

        Control = ControlType.Manual;
    }
Пример #9
0
    public void SetPedDestination(Transform target)
    {
        if (agent == null || target == null)
        {
            return;
        }

        currentTargetT   = target;
        currentTargetPos = target.position;
        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
        if (isMainPed && !anim.GetCurrentAnimatorStateInfo(0).IsName("NPCBlendTree"))
        {
            anim.SetTrigger("NPCBlendTree");
        }
    }
Пример #10
0
    public void FollowWaypoints(List <Api.WalkWaypoint> waypoints, bool loop)
    {
        Control = ControlType.Automatic;

        agent.avoidancePriority = 0;

        targets = waypoints.Select(wp => wp.Position).ToList();
        idle    = waypoints.Select(wp => wp.Idle).ToList();

        currentTargetIndex = 0;
        currentTargetPos   = targets[0];

        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
        Control      = ControlType.Waypoints;
        waypointLoop = loop;
    }
Пример #11
0
    public void WalkRandomly(bool enable)
    {
        if (!enable)
        {
            Control         = ControlType.Manual;
            thisPedState    = PedestrainState.None;
            agent.velocity  = Vector3.zero;
            agent.isStopped = true;
            return;
        }

        agent.avoidancePriority = Random.Range(1, 100);

        var position = agent.transform.position;
        MapPedestrianSegmentBuilder closest = null;
        float closestDistance = float.MaxValue;
        int   closestIndex    = 0;

        foreach (var seg in PedestrianManager.Instance.pedSegments)
        {
            for (int i = 0; i < seg.segment.targetWorldPositions.Count; i++)
            {
                float distance = Vector3.SqrMagnitude(position - seg.segment.targetWorldPositions[i]);
                if (distance < closestDistance)
                {
                    closest         = seg;
                    closestIndex    = i;
                    closestDistance = distance;
                }
            }
        }
        targets = closest.segment.targetWorldPositions;

        currentTargetIndex = closestIndex;
        int prevTargetIndex = closestIndex == 0 ? targets.Count - 1 : closestIndex - 1;

        currentTargetPos = GetRandomTargetPosition(currentTargetIndex);

        agent.SetDestination(currentTargetPos);
        thisPedState = PedestrainState.Walking;
        Control      = ControlType.Automatic;
    }
Пример #12
0
    private void SetPedNextAction()
    {
        if (!agent.enabled)
        {
            return;
        }

        if (isMainPed)
        {
            thisPedState    = PedestrainState.Idle;
            agent.isStopped = true;
            agent.ResetPath();
            StartCoroutine(LookAtTarget());
        }
        else
        {
            currentTargetPos = GetRandomTargetPosition();
            agent.SetDestination(currentTargetPos);
            thisPedState = PedestrainState.Walking;
        }
    }
Пример #13
0
    public void InitPed(bool isMain = false)
    {
        isMainPed = isMain;

        agent = GetComponent <NavMeshAgent>();
        anim  = GetComponentInChildren <Animator>();

        if (!isMainPed)
        {
            agent.avoidancePriority = (int)Random.Range(1, 100);

            target01         = transform.parent.GetComponent <PedestrianSpawnerComponent>().target01;
            target02         = transform.parent.GetComponent <PedestrianSpawnerComponent>().target02;
            currentTargetPos = GetRandomTargetPosition();

            agent.SetDestination(currentTargetPos);
            thisPedState = PedestrainState.Walking;
        }
        else
        {
            agent.avoidancePriority = 0;
        }
    }