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; }
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); } }