示例#1
0
    public void InitializeMovement(GameObject[] obstacles, List <DynamicCharacter> characters)
    {
        foreach (var obstacle in obstacles)
        {
            //TODO: add your AvoidObstacle movement here
            var avoid = new DynamicAvoidShort
            {
                Character         = this.character.KinematicData,
                avoidDistance     = 5.0f,
                lookAhead         = 15.0f,
                collisionDetector = obstacle.GetComponent <Collider>(),
                MaxAcceleration   = MAX_ACCELERATION,
                whiskerLength     = 7.5f
            };

            this.blendedMovement.Movements.Add(new MovementWithWeight(avoid, 10.0f));
            this.priorityMovement.Movements.Add(avoid);
        }

        foreach (var otherCharacter in characters)
        {
            if (otherCharacter != this.character)
            {
                //TODO: add your AvoidCharacter movement here
                var avoidCharacter = new DynamicAvoidCharacter(otherCharacter.KinematicData)
                {
                    Character        = this.character.KinematicData,
                    maxAcceleration  = MAX_ACCELERATION,
                    collisionRadius  = 3f,
                    maxTimeLookAhead = 8f
                };

                this.blendedMovement.Movements.Add(new MovementWithWeight(avoidCharacter, 10.0f));
                this.priorityMovement.Movements.Add(avoidCharacter);
            }
        }

        /* TODO: add your wander behaviour here! */
        var wander = new DynamicWander
        {
            Character       = this.character.KinematicData,
            WanderOffset    = 5,
            WanderRate      = MathConstants.MATH_1_PI,
            MaxAcceleration = MAX_ACCELERATION
        };

        this.priorityMovement.Movements.Add(wander);

        this.blendedMovement.Movements.Add(new MovementWithWeight(wander, 1));
        this.character.Movement = this.blendedMovement;
    }
    public void InitializeMovement(GameObject[] obstacles, List <DynamicCharacter> characters)
    {
        List <DynamicCharacter> otherCharacters = characters.Where(b => b != character).ToList();

        foreach (var obstacle in obstacles)
        {
            var avoid = new DynamicAvoidShort
            {
                Character         = this.character.KinematicData,
                avoidDistance     = 10.0f,
                lookAhead         = 13.0f,
                collisionDetector = obstacle.GetComponent <Collider>(),
                MaxAcceleration   = MAX_ACCELERATION,
                whiskerLength     = 6.5f
            };

            this.blendedMovement.Movements.Add(new MovementWithWeight(avoid, 22.0f));
        }

        var cohesion = new DynamicCohesion(otherCharacters)
        {
            Character       = this.character.KinematicData,
            MaxAcceleration = MAX_ACCELERATION,
            StopRadius      = 5f,
            SlowRadius      = 10f,
            MaxSpeed        = this.character.MaxSpeed,
            Radius          = 15f,
            FanAngle        = MathConstants.MATH_PI_4
        };

        this.blendedMovement.Movements.Add(new MovementWithWeight(cohesion, 6.0f));

        var velocity = new FlockVelocityMatching(otherCharacters)
        {
            Character       = this.character.KinematicData,
            MaxAcceleration = MAX_ACCELERATION,
            Radius          = 20f,
            FanAngle        = MathConstants.MATH_PI_4
        };

        this.blendedMovement.Movements.Add(new MovementWithWeight(velocity, 10.0f));

        var separation = new DynamicSeparation(otherCharacters)
        {
            Character        = this.character.KinematicData,
            MaxAcceleration  = MAX_ACCELERATION,
            Radius           = SEP_RADIUS,
            SeparationFactor = MAX_ACCELERATION * 1.5f
        };

        this.blendedMovement.Movements.Add(new MovementWithWeight(separation, 12.0f));

        var wander = new DynamicStraightAhead
        {
            Character       = this.character.KinematicData,
            MaxAcceleration = MAX_ACCELERATION
        };

        this.blendedMovement.Movements.Add(new MovementWithWeight(wander, 1.0f));

        var seekMouse = new DynamicSeekMouse
        {
            Character       = this.character.KinematicData,
            MaxAcceleration = MAX_ACCELERATION,
            MaxSpeed        = this.character.MaxSpeed,
            StopRadius      = 1f,
            SlowRadius      = 10f
        };

        this.blendedMovement.Movements.Add(new MovementWithWeight(seekMouse, 4.0f));

        this.character.Movement = this.blendedMovement;
    }