Пример #1
0
    protected Steering ApplySteering()
    {
        Steering totalSteering = new Steering();

        foreach (SteeringBehaviour steer in steers)
        {
            totalSteering += Steering.ApplyPriority(steer.GetSteering(), steer.blendPriority);
        }
        //totalSteering += PathSteering();
        if (task != null)
        {
            taskName       = task.ToString();
            totalSteering += task.Apply();
        }
        else
        {
            taskName = "Idle";
        }
        totalSteering.linear.y = 0;

        totalSteering.linear  = Vector3.ClampMagnitude(totalSteering.linear, MaxAccel);
        totalSteering.angular = Mathf.Clamp(totalSteering.angular, -MaxAngular, MaxAngular);

        return(totalSteering);
    }
Пример #2
0
    //OJO! En el steering que sea que vaya a llamar de forma estática a esta función, se deberán ejecutar las dos siguientes lineas
    //   wanderOrientation += Flocking.UpdateWanderOrientation(wanderOrientation, wanderRate)
    //   wanderForce = Wander.GetSteering(npc, wanderForce, wanderCooldown, wanderRate, wanderOrientation, wanderCircleOffset, wanderCircleRadius, maxAccel, timeToTarget, visibleRays)
    //  Es por eso que trabajar con flocking de manera estática está desaconsejado
    public static Steering GetSteering(Agent npc, float groupArea, float decayCoefficient, float maxAccel, bool visibleRays, float timeToTarget, float wanderCooldown, float wanderRate, float wanderOrientation, float wanderCircleOffset, float wanderCircleRadius, Steering wanderForce, float cohesionPriority, float separationPriority, float alignmentPriority, float wanderPriority)
    {
        Steering steering = new Steering();

        steering.linear += Separation.GetSteering(npc, groupArea, decayCoefficient, maxAccel, visibleRays).linear *separationPriority;
        steering.linear += Cohesion.GetSteering(npc, groupArea, decayCoefficient, maxAccel, visibleRays).linear *cohesionPriority;
        steering.angular = Alignment.GetSteering(npc, groupArea, npc.interiorAngle, npc.exteriorAngle, timeToTarget, false).angular *alignmentPriority;
        steering        += Steering.ApplyPriority(wanderForce, wanderPriority);
        return(steering);
    }