Exemple #1
0
    public SteeringData getCollideAvoid()
    {
        Vector3 ahead = this.transform.position + _currentVelocity.normalized * _max_See_Ahead * 0.5f;

        Circle       _ClosestObsCirle = findMostThreateningObstacle();
        SteeringData _SteeringOut     = new SteeringData();

        //lengkapi .... yang dibawah ini

        if (_ClosestObsCirle != null)
        {
            _SteeringOut._linear = ahead - _ClosestObsCirle._center;
            if (_SteeringOut._linear.magnitude > _max_Avoid_Force)
            {
                _SteeringOut._linear.Normalize();
                _SteeringOut._linear *= _max_Avoid_Force;
            }
        }
        else
        {
            _SteeringOut._linear = Vector3.zero;
        }
        Debug.Log("col:" + _SteeringOut._linear.magnitude);
        return(_SteeringOut);
    }
    SteeringData getSteering()
    {
        float        targetSpeed;
        Vector3      targetVelocity;
        SteeringData steering = new SteeringData();

        steering._linear = target.position - transform.position;
        float distance = steering._linear.magnitude;

        if (distance > slowRadius)
        {
            targetSpeed = maxAcc;
        }
        else if (distance <= targetRadius)
        {
            targetSpeed = 0;
        }
        else
        {
            targetSpeed = maxSpeed * distance / slowRadius;
        }
        targetVelocity   = steering._linear.normalized * targetSpeed;
        steering._linear = targetVelocity - velocity;
        if (steering._linear.magnitude > maxAcc)
        {
            steering._linear.Normalize();
            steering._linear *= maxAcc;
        }
        return(steering);
    }
Exemple #3
0
                public void Execute(int index)
                {
                    SteeringData steering = Steerings[index];
                    MovementData movement = Movements[index];
                    float3       position = Positions[index].Value;

                    float3     steeringVelocity = steering.Velocity;
                    float      distance         = math.distance(movement.TargetPos, position);
                    ref float3 velocity         = ref movement.Velocity;
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear  = transform.position - _target.position; //#direction
        _SteeringOut._linear  = _SteeringOut._linear.normalized;       // normalize membuat resultan vektor = 1.
        _SteeringOut._linear *= _maxAcceleration;
        return(_SteeringOut);
    }
    SteeringData getSteering()
    {
        SteeringData steering = new SteeringData();

        steering._linear = target.position - transform.position;
        steering._linear.Normalize();
        steering._linear *= maxAcc;
        steering._angular = Vector3.zero;
        return(steering);
    }
Exemple #6
0
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear  = _target - transform.position;
        _SteeringOut._linear  = _SteeringOut._linear.normalized;
        _SteeringOut._linear *= _maxAcceleration;
        _SteeringOut._angular = Vector3.zero;
        return(_SteeringOut);
    }
Exemple #7
0
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear  = _target.position - transform.position; //#direction
        _SteeringOut._linear  = _SteeringOut._linear.normalized;       // normalize membuat resultan vektor = 1.
        _SteeringOut._linear *= _maxAcceleration;
        // this.transform.eulerAngles = getNewOrientation(this.transform.eulerAngles, _KinematicOut._velocity); //rotation menggunakan euler angle
        _SteeringOut._angular = Vector3.zero; //orientasi belum kita hitung
        return(_SteeringOut);
    }
    // Update is called once per frame
    void Update()
    {
        _velocity = _velocity + getSteering()._linear *Time.deltaTime;  // Vt = Vo +a.t

        if (_velocity.magnitude > _maxSpeed)
        {
            _velocity = _velocity.normalized * _maxSpeed;
        }

        this.transform.position    = transform.position + _velocity * Time.deltaTime;
        this.transform.eulerAngles = SteeringData.getNewOrientation(transform.eulerAngles, _velocity);
    }
    // Update is called once per frame
    void Update()
    {
        //lengkapi Update
        _steeringAll = getSteering()._linear + getCollideAvoid()._linear; // Vt = Vo +a.t
        _velocity   += _steeringAll * Time.deltaTime;

        if (_velocity.magnitude > _maxSpeed)
        {
            _velocity = _velocity.normalized * _maxSpeed;
        }

        this.transform.position   += _velocity * Time.deltaTime;
        this.transform.eulerAngles = SteeringData.getNewOrientation(transform.eulerAngles, _velocity);
    }
                public void Execute(int index)
                {
                    SteeringData       steering       = Steerings[index];
                    SteeringSharedData steeringShared = SharedSteering;
                    MovementData       movement       = Movements[index];
                    float3             position       = Positions[index].Value;

                    steering.Velocity = movement.TargetPos - position;
                    if (math.lengthsq(steering.Velocity) > steeringShared.MaxAccelerationSqr)
                    {
                        steering.Velocity = math.normalizesafe(steering.Velocity) * steeringShared.MaxAcceleration;
                    }
                    steering.Velocity.y = 0.0f;
                    Steerings[index]    = steering;
                }
Exemple #11
0
    // Update is called once per frame
    void Update()
    {
        _velocity = _velocity + getSteering()._linear *Time.deltaTime;  // Vt = Vo +a.t

        if (_velocity.magnitude > _maxSpeed)
        {
            _velocity = _velocity.normalized * _maxSpeed;
        }
        this.transform.position    = transform.position + _velocity * Time.deltaTime;
        this.transform.eulerAngles = SteeringData.getNewOrientation(transform.eulerAngles, _velocity);

        if (Result() > 0 && currentWp < waypoints.Count - 1)
        {
            currentWp++;
            _target = waypoints[currentWp];
        }
    }
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear = _target.position - transform.position; //#direction

        distance = _SteeringOut._linear.magnitude;

        if (distance > _slowRadius)
        {
            _targetSpeed = _maxSpeed;
        }

        else if (distance <= _targetRadius)
        {
            _targetSpeed = 0;
        }

        else
        {
            _targetSpeed = _maxSpeed * distance / _slowRadius;
        }

        _targetVelocity      = _SteeringOut._linear.normalized * _targetSpeed;
        _SteeringOut._linear = (_targetVelocity - _currentVelocity);

        if (_targetSpeed < _maxSpeed)                                //jika melambat gunakan brakeForce
        {
            _SteeringOut._linear  = _SteeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
            _SteeringOut._linear *= _maxBrakeForce;
        }
        else
        {
            if (_SteeringOut._linear.magnitude > _maxAcceleration)
            {
                _SteeringOut._linear  = _SteeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
                _SteeringOut._linear *= _maxAcceleration;
            }
        }

        // this.transform.eulerAngles = getNewOrientation(this.transform.eulerAngles, _KinematicOut._velocity); //rotation menggunakan euler angle
        _SteeringOut._angular = Vector3.zero; //orientasi belum kita hitung
        return(_SteeringOut);
    }
Exemple #13
0
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear = _target.position - transform.position; //#direction

        distance = _SteeringOut._linear.magnitude;

        if (distance > _slowRadius)
        {
            _targetSpeed = _maxSpeed;
        }

        else if (distance <= _targetRadius)
        {
            _targetSpeed = 0;
        }

        else
        {
            _targetSpeed = _maxSpeed * distance / _slowRadius;
        }

        _targetVelocity      = _SteeringOut._linear.normalized * _targetSpeed;
        _SteeringOut._linear = (_targetVelocity - _velocity);

        // if (_targetSpeed < _maxSpeed)  //jika melambat gunakan brakeForce
        // {
        //         _SteeringOut._linear = _SteeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
        //         _SteeringOut._linear *= _maxBrakeForce;
        // }
        //  else
        // {
        if (_SteeringOut._linear.magnitude > _maxAcceleration)
        {
            _SteeringOut._linear  = _SteeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
            _SteeringOut._linear *= _maxAcceleration;
        }
        //  }

        return(_SteeringOut);
    }
Exemple #14
0
    public SteeringData getCollideAvoid()
    {
        Vector3 ahead  = this.transform.position + _velocity.normalized * _max_See_Ahead;
        Vector3 ahead2 = this.transform.position + _velocity.normalized * _max_See_Ahead * 0.5f;

        Circle       _ClosestObsCirle = findMostThreateningObstacle(ahead, ahead2);
        SteeringData _SteeringOut     = new SteeringData();


        if (_ClosestObsCirle != null)
        {
            _SteeringOut._linear = ahead - _ClosestObsCirle._center;

            _SteeringOut._linear = _SteeringOut._linear.normalized * _max_Avoid_Force;
        }
        else
        {
            _SteeringOut._linear = Vector3.zero;
        }
        return(_SteeringOut);
    }
    public SteeringData getSteering()
    {
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear = this.transform.position - _target.position;
        if (_SteeringOut._linear.magnitude > _radius * 1.49)
        {
            _SteeringOut._linear = Vector3.zero;
            return(_SteeringOut);
        }
        if (_SteeringOut._linear.magnitude > _radius)
        {
            _SteeringOut._linear.Normalize();
            _SteeringOut._linear *= _maxAcceleration * -1;
            _SteeringOut._angular = Vector3.zero;
            return(_SteeringOut);
        }
        _SteeringOut._linear.Normalize();
        _SteeringOut._linear *= _maxAcceleration;
        _SteeringOut._angular = Vector3.zero;
        return(_SteeringOut);
    }
Exemple #16
0
    private SteeringOutput GetPrioritySteering()
    {
        SteeringOutput steering     = new SteeringOutput();
        float          sqrThreshold = priorityThreshold * priorityThreshold;

        foreach (var steeringdata in SteeringGroups)
        {
            steering = new SteeringOutput();
            for (int i = 0; i < steeringdata.Value.Count; i++)
            {
                SteeringData singlesteering = steeringdata.Value[i];
                steering.linearAcceleration  += (singlesteering.weight * singlesteering.steering.linearAcceleration);
                steering.angularAcceleration += (singlesteering.weight * singlesteering.steering.angularAcceleration);
            }
            if (steering.linearAcceleration.sqrMagnitude > sqrThreshold ||
                Mathf.Abs(steering.angularAcceleration) > priorityThreshold)
            {
                return(steering);
            }
        }
        return(steering);
    }
Exemple #17
0
    public SteeringData getSteering()
    {
        //SteeringData _steeringOut = new SteeringData();
        //_steeringOut._linear = _target.position - this.transform.position; //#direction
        //Debug.Log(_steeringOut._linear.magnitude);
        //if (_steeringOut._linear.magnitude < _radius) //jika di dalam radius velocity = 0; berhenti
        //{
        //    _steeringOut._linear = Vector3.zero; //jika di dalam radius velocity = 0; berhenti
        //    _steeringOut._angular = Vector3.zero;
        //    return _steeringOut;
        //}

        //_steeringOut._linear /= _timeToTarget; //agar datang sesuai waktu yg di tentukan

        //if (_steeringOut._linear.magnitude > _maxSpeed)
        //{
        //    _steeringOut._linear = _steeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
        //    _steeringOut._linear *= _maxSpeed;
        //}
        ////this.transform.eulerAngles = getNewOrientation(this.transform.eulerAngles, _steeringOut._velocity); //rotation menggunakan euler angle
        //_steeringOut._angular = Vector3.zero;
        //return _steeringOut;
        SteeringData _SteeringOut = new SteeringData();

        _SteeringOut._linear = _target.position - transform.position; //#direction
        if (_SteeringOut._linear.magnitude < _radius)                 //jika di dalam radius velocity = 0; berhenti
        {
            _SteeringOut._linear  = Vector3.zero;                     //jika di dalam radius velocity = 0; berhenti
            _SteeringOut._angular = Vector3.zero;
            return(_SteeringOut);
        }
        _SteeringOut._linear  = _SteeringOut._linear.normalized; // normalize membuat resultan vektor = 1.
        _SteeringOut._linear *= _maxAcceleration;
        // this.transform.eulerAngles = getNewOrientation(this.transform.eulerAngles, _steeringOut._velocity); //rotation menggunakan euler angle
        _SteeringOut._angular = Vector3.zero; //orientasi belum kita hitung
        Debug.Log("steer:" + _SteeringOut._linear.magnitude);
        return(_SteeringOut);
    }
Exemple #18
0
 public void SetSteeringData(SteeringData data)
 {
     _steeringData = data;
     _followBehaviour.SetSteeringData(_steeringData);
 }