public override Vector3 DoUpdate() { velocity = base.DoUpdate(); var circleCentre = Vector3.Normalize(velocity) * circleDistance; if (isDrawGizmo) { GizmosManager.DrawCircle(circleLineRenderer, circleCentre, circleRadius, circleColor); } else { GizmosManager.StopDraw(circleLineRenderer); } wanderAngle += Random.Range(-angleChangeRange, angleChangeRange); velocity += circleCentre + Vector3.Normalize(SetAngle(Vector3.one, wanderAngle)) * circleRadius; if (isDrawGizmo) { GizmosManager.DrawLine(angleLineRenderer, circleCentre, velocity, angleColor, 1); } else { GizmosManager.StopDraw(angleLineRenderer); } velocity = TruncateFromSpeedAndForce(velocity); if (isDrawGizmo) { GizmosManager.DrawLine(velocityLineRenderer, velocity, velocityLineColor, playerManager.drawVelosityGizmoKoef); } else { GizmosManager.StopDraw(velocityLineRenderer); } return(velocity); }
private Vector3 CollisionAvoidance(Vector3 playerPosition, Vector3 velocity, List <Obstacle> obstacles, float maxAvoidForce = 1) { velocity = Vector3.Normalize(velocity); var mostThreatening = FindMostThreateningObstacle(playerPosition, velocity * MaxSeeAhead, obstacles); if (mostThreatening != null) { var avoidance = Vector3.Normalize(CropByY(mostThreatening.transform.position - playerPosition, 0)) * -maxAvoidForce; if (isDrawGizmo) { GizmosManager.DrawCircle(circleLineRenderer, CropByY(mostThreatening.transform.position, -.5f) - playerPosition, mostThreatening.radius, circleLineRendererColor); GizmosManager.DrawLine(collisionAvoidanceLineRenderer, avoidance.normalized * maxAvoidForce, collisionAvoidanceLineRendererColor, maxAvoidForce); } return(avoidance); } GizmosManager.StopDraw(circleLineRenderer); GizmosManager.StopDraw(collisionAvoidanceLineRenderer); return(Vector3.zero); }
public override Vector3 DoUpdate() { velocity = base.DoUpdate(); follovingPosition = velocity.normalized * -DistanceToFollow; if (isDrawGizmo) { GizmosManager.DrawLine(FollowLine, follovingPosition, FollowLineColor, 1); GizmosManager.DrawCircle(LeaderCircle, Vector3.zero, LeaderSightRadius, LeaderCircleColor); GizmosManager.DrawCircle(LeaderAheadCircle, velocity * LeaderAhead, LeaderSightRadius, LeaderAheadCircleColor); } else { GizmosManager.StopDraw(FollowLine); GizmosManager.StopDraw(LeaderCircle); GizmosManager.StopDraw(LeaderAheadCircle); } follovingPosition += playerTransform.position; var currentDistance = Vector3.Distance(playerManager.targetTransform.position, playerTransform.position); if (currentDistance < slowingRadius) { velocity *= (currentDistance / slowingRadius); } if (isDrawGizmo) { GizmosManager.DrawLine(velocityLineRenderer, velocity, velocityLineColor, playerManager.drawVelosityGizmoKoef); } else { GizmosManager.StopDraw(velocityLineRenderer); } return(velocity); }