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; }
private void OnEnable() { if (!isInit) { return; } agent.SetDestination(currentTargetPos); thisPedState = PedestrainState.Walking; }
private void SetPedNextAction() { if (!agent.enabled) { return; } currentTargetPos = GetRandomTargetPosition(); agent.SetDestination(currentTargetPos); thisPedState = PedestrainState.Walking; }
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; }
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; }
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; }
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; }
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; }
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"); } }
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; }
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; }
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; } }
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; } }