コード例 #1
0
        public override void Initialize()
        {
            base.Initialize();

            Body.Mass = 3f;

            cohesionBehaviour   = GetComponent <CohesionBehavior <ChickenState> >();
            separationBehaviour = GetComponent <SeparationBehavior <ChickenState> >();
            velocityBehaviour   = GetComponent <VelocityMatchBehavior <ChickenState> >();

            followingBehaviour    = GetComponent <FollowingBehavior <ChickenState> >();
            fleeingBehaviour      = GetComponent <FleeingBehavior <ChickenState> >();
            playerFleeingBehavior = GetComponent <PlayerFleeingBehavior <ChickenState> >();
            aiComponent.WithTrigger(FleeingTrigger).WithTrigger(FollowingTrigger).WithTrigger(PlayerFleeingTrigger);

            cohesionBehaviour.TargetPositions   = proximitySensor.SensedEntities.Select((e) => e.Body.Position);
            separationBehaviour.TargetPositions = proximitySensor.SensedEntities.Select((e) => e.Body.Position);
            velocityBehaviour.TargetVelocities  = proximitySensor.SensedEntities.Select((e) => e.Body.LinearVelocity);
        }
コード例 #2
0
ファイル: Navigator.cs プロジェクト: Hengle/Engine-Nine
 /// <summary>
 /// Creates a new instance of Navigator.
 /// </summary>
 public Navigator()
 {
     steerable           = new Steerable();
     steerable.BlendMode = SteeringBehaviorBlendMode.Solo;
     steerable.Behaviors.Add(new StuckAvoidanceBehavior());
     steerable.Behaviors.Add(wallAvoidance = new WallAvoidanceBehavior()
     {
         Enabled = false
     });
     steerable.Behaviors.Add(steerableAvoidance = new SteerableAvoidanceBehavior()
     {
         Enabled = false
     });
     steerable.Behaviors.Add(separation = new SeparationBehavior()
     {
         Enabled = false
     });
     steerable.Behaviors.Add(arrive = new ArriveBehavior()
     {
         Enabled = false
     });
     waypoints = new Queue <Vector3>();
 }
コード例 #3
0
    public void GroupBehaviours()
    {
        Vector3 _acceleration = new Vector3(0.0f, 0.0f, 0.0f);


        foreach (var agent in swarmNeighbors)
        {
            if (!agent.Attacking)
            {
                _acceleration   = BehaviourUpdate.BehaviourUpdated(WanderBehavior.WanderMove(agent.transform, enemyData.WanderRadius, enemyData.WanderDistance, enemyData.WanderJitter, 1.0f), enemyData.WanderBehaviorWeight);
                _acceleration  += (Vector3)BehaviourUpdate.BehaviourUpdated(CohesionBehavior.CalculateMove(agent.transform, swarmNeighborsTrans), enemyData.CohesionBehaviorWeight);
                _acceleration  += (Vector3)BehaviourUpdate.BehaviourUpdated(SeparationBehavior.SeparationMove(agent.transform, swarmNeighborsTrans, enemyData.SeparationBehaviorRadius), enemyData.SeparationBehaviorWeight);
                _acceleration  += (Vector3)BehaviourUpdate.BehaviourUpdated(AlignmentBehavior.CalculateMove(agent.transform, swarmNeighborsTrans), enemyData.AlignmentBehaviorWeight);
                agent.Velocity += _acceleration * Time.deltaTime;
                if (agent.Velocity.magnitude > enemyData.MaxSpeed)
                {
                    agent.Velocity.Normalize();
                    agent.Velocity *= enemyData.MaxSpeed;
                }


                if (agent.transform.position.x < _bottomLeft.position.x)
                {
                    agent.Velocity *= -1;
                }
                if (agent.transform.position.x > _topright.position.x)
                {
                    agent.Velocity *= -1;
                }
                if (agent.transform.position.y < _topright.position.y)
                {
                    agent.Velocity *= -1;
                }
                if (agent.transform.position.y > _bottomLeft.position.y)
                {
                    agent.Velocity *= -1;
                }
                //agent.transform.position += agent.Velocity * Time.deltaTime;
            }
            else
            {
                _acceleration   = BehaviourUpdate.BehaviourUpdated(SeekBehaviour.SeekMove(agent.transform, agent.Target, enemyData.Swarm_AttackSpeed), enemyData.SeekBehaviorWeight);
                agent.Velocity += _acceleration * Time.deltaTime;
            }
            Vector3 deltaPos = agent.Velocity * Time.deltaTime;
            if (deltaPos.x == 0 && deltaPos.y == 0)
            {
                Debug.Log("Enemy is stuck!");
            }

            agent.transform.position += agent.Velocity * Time.deltaTime;
            //_acceleration += (Vector3)(BehaviourUpdate.BehaviourUpdated(WallAvoidance.WallAvoidanceCalculation(agent.transform, _bottomLeft.position.x, _topright.position.x, _topright.position.y, _bottomLeft.position.y), enemyData.WallAvoidWeight));
        }
        //transform.position += _velocity * Time.deltaTime;
        //        {
        //            move = BehaviourUpdate.BehaviourUpdated(CohesionBehavior.CalculateMove(agent.transform, swarmNeighbors), 5.0f);
        //            move *= speed;
        //            if (move.sqrMagnitude > squareMaxSpeed)
        //            {
        //                move = move.normalized * maxSpeed;
        //            }
        //            agent.transform.position += (Vector3)move * Time.deltaTime;
        //        }
    }