Esempio n. 1
0
    void Start()
    {
        Separation separate = new Separation();

        separate.character = this;
        GameObject[] goBirds = GameObject.FindGameObjectsWithTag("bird");
        kBirds = new Kinematic[goBirds.Length - 1];
        int j = 0;

        for (int i = 0; i < goBirds.Length - 1; i++)
        {
            if (goBirds[i] == this)
            {
                continue;
            }
            kBirds[j++] = goBirds[i].GetComponent <Kinematic>();
        }
        separate.targets = kBirds;
        Arrive cohere = new Arrive();

        cohere.character = this;
        cohere.target    = myCohereTarget;
        LookWhereGoing myRotateType = new LookWhereGoing();

        myRotateType.character = this;

        mySteering                       = new BlendedSteering();
        mySteering.behaviors             = new BehaviorAndWeight[3];
        mySteering.behaviors[0]          = new BehaviorAndWeight();
        mySteering.behaviors[0].behavior = separate;
        mySteering.behaviors[0].weight   = 1f;
        mySteering.behaviors[1]          = new BehaviorAndWeight();
        mySteering.behaviors[1].behavior = cohere;
        mySteering.behaviors[1].weight   = 1f;
        mySteering.behaviors[2]          = new BehaviorAndWeight();
        mySteering.behaviors[2].behavior = myRotateType;
        mySteering.behaviors[2].weight   = 1f;

        ObstacleAvoidance myAvoid = new ObstacleAvoidance();

        myAvoid.character = this;
        myAvoid.target    = myCohereTarget;
        myAvoid.flee      = true;
        BlendedSteering myHighPrioritySteering = new BlendedSteering();

        myHighPrioritySteering.behaviors             = new BehaviorAndWeight[1];
        myHighPrioritySteering.behaviors[0]          = new BehaviorAndWeight();
        myHighPrioritySteering.behaviors[0].behavior = myAvoid;
        myHighPrioritySteering.behaviors[0].weight   = 1f;

        myAdvancedSteering           = new PrioritySteering();
        myAdvancedSteering.groups    = new BlendedSteering[2];
        myAdvancedSteering.groups[0] = new BlendedSteering();
        myAdvancedSteering.groups[0] = myHighPrioritySteering;
        myAdvancedSteering.groups[1] = new BlendedSteering();
        myAdvancedSteering.groups[1] = mySteering;
    }
Esempio n. 2
0
    // Start is called before the first frame update
    void Start()
    {
        //DATOS DE PERSONAJE
        kineticsAgent = agent.kineticsAgent;
        steeringAgent = agent.steeringAgent;


        //ARRIVE INITIALIZATION

        enemy = new GameObject();//creamos un enemigo ficticio que sera el mouse
        enemy.transform.position = Vector3.zero;
        kineticsEnemy            = new Kinetics(0f, Vector3.zero, enemy.transform);

        arrive        = new Arrive(kineticsAgent, kineticsEnemy, maxAccelerationArrive, agent.maxspeed, targetRadiusArrive, slowRadiusArrive, timeTotargetArrive);
        arrive.weigth = 1f;

        //AVOID INITIALIZATION

        obstacles = GameObject.FindGameObjectsWithTag("Obstacle");

        for (int i = 0; i < obstacles.Length; i++)
        {
            obs_trans.Add(obstacles[i].transform);
        }

        Transform[] obstacles_transforms = obs_trans.ToArray();

        obstacleAvoidance        = new ObstacleAvoidance(kineticsAgent, obstacles_transforms, avoidDistance, lookAheadAvoid, steeringAgent);
        obstacleAvoidance.weigth = 1f;

        //FACE INITIALIZATION

        face        = new Face(kineticsAgent, kineticsEnemy);
        face.weigth = 1f;



        //BLEND INITIALIZATION

        behaviorsArrive[0] = arrive;
        behaviorsArrive[1] = face;

        behaviorsAvoid[0] = obstacleAvoidance;


        blendArrive = new BlendedSteering(behaviorsArrive, maxAccelBlend, maxAngularBlend);
        blendAvoid  = new BlendedSteering(behaviorsAvoid, maxAccelBlend, maxAngularBlend);

        //PRIORITY INITIALIZATION

        groups[0] = blendAvoid;//OJO avoid tiene prioridad por eso va primero
        groups[1] = blendArrive;

        priority = new PrioritySteering(groups, steeringAgent);
    }
    private void Start()
    {
        //Separate
        Separation separation = new Separation();

        separation.character = this;
        GameObject[] goBirds = GameObject.FindGameObjectsWithTag("Bee");

        kBirds = new Kinematic[goBirds.Length - 1];

        int a = 0;

        for (int i = 0; i < goBirds.Length - 1; i++)
        {
            if (goBirds[i] == this)
            {
                continue;
            }
            kBirds[a++] = goBirds[i].GetComponent <Kinematic>();
        }
        separation.targets = kBirds;

        //Cohere
        Arrive cohere = new Arrive();

        cohere.character = this;
        cohere.target    = myCohereTarget;

        //Rotate
        LookWhereGoing myRotateType = new LookWhereGoing();

        myRotateType.character = this;

        blendedSteering                       = new BlendedSteering();
        blendedSteering.behaviors             = new WeightedBehavior[3];
        blendedSteering.behaviors[0]          = new WeightedBehavior();
        blendedSteering.behaviors[0].behavior = separation;
        blendedSteering.behaviors[0].weight   = 1f;
        blendedSteering.behaviors[1]          = new WeightedBehavior();
        blendedSteering.behaviors[1].behavior = cohere;
        blendedSteering.behaviors[1].weight   = 1f;
        blendedSteering.behaviors[2]          = new WeightedBehavior();
        blendedSteering.behaviors[2].behavior = myRotateType;
        blendedSteering.behaviors[2].weight   = 1f;

        //Priority Arbitration
        AvoidObstacle avoid = new AvoidObstacle();

        avoid.character = this;
        avoid.target    = myCohereTarget;
        avoid.flee      = false;
        BlendedSteering prioritySteering = new BlendedSteering();

        prioritySteering.behaviors             = new WeightedBehavior[1];
        prioritySteering.behaviors[0]          = new WeightedBehavior();
        prioritySteering.behaviors[0].behavior = avoid;
        prioritySteering.behaviors[0].weight   = 1f;

        advancedSteering             = new PrioritySteering();
        advancedSteering.myGroups    = new BlendedSteering[2];
        advancedSteering.myGroups[0] = new BlendedSteering();
        advancedSteering.myGroups[0] = prioritySteering;
        advancedSteering.myGroups[1] = new BlendedSteering();
        advancedSteering.myGroups[1] = blendedSteering;
    }
    void Start()
    {
        steering = new PrioritySteering();
        //Make 2 groups, one for flocking, and one for avoiding obstacles
        steering.groups = new BlendedSteering[2];
        //Initialize them
        steering.groups[0] = new BlendedSteering();
        steering.groups[1] = new BlendedSteering();

        //Put obstacle avoidance into its own group
        ObstacleAvoidance avoidAI = new ObstacleAvoidance();

        avoidAI.character = GetComponent <Kinematic>();

        //Initialize array, only 1 behavior needed in this group's consideration
        steering.groups[0].behaviors    = new BehaviorAndWeight[1];
        steering.groups[0].behaviors[0] = new BehaviorAndWeight();

        //Assign specific behavior
        steering.groups[0].behaviors[0].behavior = avoidAI;

        //Set weight
        steering.groups[0].behaviors[0].weight = 4f;

        //Create behaviors to go into the bird
        Arrive arriveAI = new Arrive();

        arriveAI.character = GetComponent <Kinematic>();
        arriveAI.target    = arriveTarget;

        Seperation seperateAI = new Seperation();

        seperateAI.character = GetComponent <Kinematic>();
        GameObject[] allBirds = GameObject.FindGameObjectsWithTag("bird");
        Kinematic[]  allOtherBirdKinematics = new Kinematic[allBirds.Length];
        int          j = 0;

        foreach (GameObject bird in allBirds)
        {
            if (bird != this)
            {
                allOtherBirdKinematics[j] = bird.GetComponent <Kinematic>();
                j++;
            }
            else
            {
                Debug.Log("caught myself");
            }
        }
        seperateAI.targets = allOtherBirdKinematics;

        LookWhereGoing lookAI = new LookWhereGoing();

        lookAI.character = GetComponent <Kinematic>();

        //Set up flocking group in priority steering
        steering.groups[1].behaviors    = new BehaviorAndWeight[3];
        steering.groups[1].behaviors[0] = new BehaviorAndWeight();
        steering.groups[1].behaviors[1] = new BehaviorAndWeight();
        steering.groups[1].behaviors[2] = new BehaviorAndWeight();

        //Assign specific behaviors
        steering.groups[1].behaviors[0].behavior = arriveAI;
        steering.groups[1].behaviors[1].behavior = seperateAI;
        steering.groups[1].behaviors[2].behavior = lookAI;

        //Set weight of each behavior
        steering.groups[1].behaviors[0].weight = 1f;
        steering.groups[1].behaviors[1].weight = 20f;
        steering.groups[1].behaviors[2].weight = 4f;
    }
Esempio n. 5
0
    void Start()
    {
        ///Setup behaviours and BlendSteer for general flocking
        #region General Flocking

        ///Start Separation
        //Separate from others and not self
        Separation _separate = new Separation();
        _separate.character = this;
        GameObject[] _goBirds = GameObject.FindGameObjectsWithTag("birds");
        relevantBirds = new GameObject[_goBirds.Length - 1];


        int _relevantBirdCount = 0;
        for (int _bird = 0; _bird < _goBirds.Length - 1; _bird++)
        {
            if (_goBirds[_bird] == this)
            {
                //Ignore self for separation
                continue;
            }
            ///Else separate from them
            relevantBirds[_relevantBirdCount++] = _goBirds[_bird];
        }
        _separate.neighborhood = relevantBirds;
        ///End Separation

        ///Start Cohere
        Arrive _cohere = new Arrive();
        _cohere.character = this;
        _cohere.target    = flockCoMTarget;
        ///End Cohere

        ///Start LWYG
        LookWhereGoing _lWYG = new LookWhereGoing();
        _lWYG.character = this;
        ///End LWYG



        ///Start Blending for general flocking
        _generalFlockSteering            = new BlendedSteering();
        _generalFlockSteering.behaviours = new BehaviourAndWeight[3];

        //Separation
        _generalFlockSteering.behaviours[0]           = new BehaviourAndWeight();
        _generalFlockSteering.behaviours[0].behaviour = _separate;
        _generalFlockSteering.behaviours[0].weight    = 1f; //Weights are still not great, but functional

        //Cohere
        _generalFlockSteering.behaviours[1]           = new BehaviourAndWeight();
        _generalFlockSteering.behaviours[1].behaviour = _cohere;
        _generalFlockSteering.behaviours[1].weight    = .4f;

        //Look Where Going
        _generalFlockSteering.behaviours[2]           = new BehaviourAndWeight();
        _generalFlockSteering.behaviours[2].behaviour = _lWYG;
        _generalFlockSteering.behaviours[2].weight    = 20f;
        ///End Blending

        #endregion General Flocking



        #region Obst Avoid
        ///Start ObstAvoid
        ObstAvoid _obstAvoid = new ObstAvoid();
        _obstAvoid.character     = this;
        _obstAvoid.lookAheadDist = 5f;
        //_obstAvoid.target = flockCoMTarget;

        ///End ObstAvoid

        ///Start Blending for obstacle avoidance
        _obstAvoidSteering            = new BlendedSteering();
        _obstAvoidSteering.behaviours = new BehaviourAndWeight[1];

        //ObstAvoid
        _obstAvoidSteering.behaviours[0]           = new BehaviourAndWeight();
        _obstAvoidSteering.behaviours[0].behaviour = _obstAvoid;
        _obstAvoidSteering.behaviours[0].weight    = 1f; //Priority handles this
        ///End Blending

        #endregion Obst Avoid



        #region Priority Blending
        ///Start Prioritization
        _prioritySteering        = new PrioritySteering();
        _prioritySteering.blends = new BlendedSteering[2];

        //General Flocking
        _prioritySteering.blends[0] = new BlendedSteering();
        _prioritySteering.blends[0] = _obstAvoidSteering;

        //Obst Avoid
        _prioritySteering.blends[1] = new BlendedSteering();
        _prioritySteering.blends[1] = _generalFlockSteering;
        ///End Prioritization

        #endregion Priority Blending
    }
Esempio n. 6
0
    // Failed attempt to add observer pattern to allow for adding
    // or deleting boids
    //private void OnEnable()
    //{
    //    DestroyerAngel.OnKillBoid += killBoids;
    //    //PriorityGame.OnAddBoid += addBoids;
    //}

    //private void OnDisable()
    //{
    //    DestroyerAngel.OnKillBoid -= killBoids;
    //    //PriorityGame.OnAddBoid -= addBoids;
    //}

    // Start is called before the first frame update
    protected override void Start()
    {
        // personal space for the boidies
        separate           = new Separation();
        separate.character = this;
        GameObject[] goBoids = GameObject.FindGameObjectsWithTag("boid");
        kBoids = new Kinematic[goBoids.Length - 1];
        int j = 0;

        for (int i = 0; i < goBoids.Length - 1; i++)
        {
            if (goBoids[i] == this)
            {
                continue;
            }
            kBoids[j++] = goBoids[i].GetComponent <Kinematic>();
        }
        separate.targets = kBoids;

        // cohere to center of mass
        Arrive cohere = new Arrive();

        cohere.character = this;
        cohere.target    = cohereTarget;

        // and look where center of mass is going
        Face rotateType = new Face();

        rotateType.character = this;
        rotateType.target    = cohereTarget;

        // m_Steering = new BlendedSteering();
        m_Steering                       = gameObject.AddComponent <BlendedSteering>();
        m_Steering.behaviors             = new BehaviorAndWeight[3];
        m_Steering.behaviors[0]          = new BehaviorAndWeight();
        m_Steering.behaviors[0].behavior = separate;
        m_Steering.behaviors[0].weight   = 1f;
        m_Steering.behaviors[1]          = new BehaviorAndWeight();
        m_Steering.behaviors[1].behavior = cohere;
        m_Steering.behaviors[1].weight   = 1f;
        m_Steering.behaviors[2]          = new BehaviorAndWeight();
        m_Steering.behaviors[2].behavior = rotateType;
        m_Steering.behaviors[2].weight   = 1f;

        // add prioritysteering
        ObstacleAvoidance avoid = new ObstacleAvoidance();

        avoid.character     = this;
        avoid.target        = avoidThis;
        avoid.lookAhead     = 200f;
        avoid.avoidDistance = 100f;
        avoid.flee          = true;

        // blend the priority steering with the original blended steering
        BlendedSteering highPriority = gameObject.AddComponent <BlendedSteering>();

        highPriority.behaviors             = new BehaviorAndWeight[1];
        highPriority.behaviors[0]          = new BehaviorAndWeight();
        highPriority.behaviors[0].behavior = avoid;
        highPriority.behaviors[0].weight   = 100f;

        prioritySteering           = gameObject.AddComponent <PrioritySteering>();
        prioritySteering.groups    = new BlendedSteering[2];
        prioritySteering.groups[0] = gameObject.AddComponent <BlendedSteering>();
        prioritySteering.groups[0] = highPriority;
        prioritySteering.groups[1] = gameObject.AddComponent <BlendedSteering>();
        prioritySteering.groups[1] = m_Steering;
    }
Esempio n. 7
0
    void Start()
    {
        // Separate from other birds
        Separation separate = new Separation();

        separate.character = this;
        GameObject[] goBirds = GameObject.FindGameObjectsWithTag("bird");
        kBirds = new Kinematic[goBirds.Length - 1];
        int j = 0;

        for (int i = 0; i < goBirds.Length - 1; i++)
        {
            if (goBirds[i] == this)
            {
                continue;
            }
            kBirds[j++] = goBirds[i].GetComponent <Kinematic>();
        }
        separate.targets = kBirds;

        // Cohere to center of mass - ez mode
        Arrive cohere = new Arrive();

        cohere.character = this;
        cohere.target    = myCohereTarget;

        // look where center of mass is going - ez mode
        LookWhereGoing myRotateType = new LookWhereGoing();

        myRotateType.character = this;

        mySteering                       = new BlendedSteering();
        mySteering.behaviors             = new BehaviorAndWeight[3];
        mySteering.behaviors[0]          = new BehaviorAndWeight();
        mySteering.behaviors[0].behavior = separate;
        mySteering.behaviors[0].weight   = 1f; //3
        mySteering.behaviors[1]          = new BehaviorAndWeight();
        mySteering.behaviors[1].behavior = cohere;
        mySteering.behaviors[1].weight   = 1f; //.5
        mySteering.behaviors[2]          = new BehaviorAndWeight();
        mySteering.behaviors[2].behavior = myRotateType;
        mySteering.behaviors[2].weight   = 1f;

        // set up prioritysteering
        ObstacleAvoidance myAvoid = new ObstacleAvoidance();

        myAvoid.character = this;
        myAvoid.target    = myCohereTarget;
        myAvoid.flee      = true; // otherwise I seek to the obstacle
        BlendedSteering myHighPrioritySteering = new BlendedSteering();

        myHighPrioritySteering.behaviors             = new BehaviorAndWeight[1];
        myHighPrioritySteering.behaviors[0]          = new BehaviorAndWeight();
        myHighPrioritySteering.behaviors[0].behavior = myAvoid;
        myHighPrioritySteering.behaviors[0].weight   = 1f;

        myAdvancedSteering           = new PrioritySteering();
        myAdvancedSteering.groups    = new BlendedSteering[2];
        myAdvancedSteering.groups[0] = new BlendedSteering();
        myAdvancedSteering.groups[0] = myHighPrioritySteering;
        myAdvancedSteering.groups[1] = new BlendedSteering();
        myAdvancedSteering.groups[1] = mySteering;
    }