コード例 #1
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;
    }
コード例 #2
0
    public void SpawnPedestrian(MapPedestrianSegmentBuilder seg)
    {
        if (pedPool.Count == 0)
        {
            return;
        }

        GameObject ped = pedPool[0];

        ped.transform.SetParent(seg.transform);
        pedPool.RemoveAt(0);
        pedActive.Add(ped);
        ped.SetActive(true);
        PedestrianComponent pedC = ped.GetComponent <PedestrianComponent>();

        if (pedC != null)
        {
            pedC.InitPed(seg.segment.targetWorldPositions);
        }
    }