Example #1
0
    bool lineIntersecCircle(Vector3 ahead, Vector3 ahead2, CircleObs obstacle)
    {
        float distance1 = (obstacle._center - ahead).magnitude;
        float distance2 = (obstacle._center - ahead2).magnitude;

        return((distance1 <= obstacle._radius) || (distance2 <= obstacle._radius));
    }
Example #2
0
    public CircleObs getClosetObstacle()
    {
        Vector3   ahead           = this.transform.position + _currentVelocity.normalized * _maxAhead;
        Vector3   ahead2          = this.transform.position + _currentVelocity.normalized * _maxAhead * 0.5f;
        CircleObs mostThreatening = null;

        foreach (GameObject _obstacle in GameObject.FindGameObjectsWithTag("Obstacle"))
        {
            CircleObs circleObs = _obstacle.GetComponent <CircleObs>();
            bool      _isColide = lineIntersecCircle(ahead, ahead2, circleObs);
            if (_isColide)
            {
                if (mostThreatening == null)
                {
                    mostThreatening = circleObs;
                }
                else
                {
                    float distanceCurrent = (this.transform.position - mostThreatening._center).magnitude;
                    float distanceCek     = (this.transform.position - circleObs._center).magnitude;
                    mostThreatening = distanceCek < distanceCurrent ? circleObs : mostThreatening;
                }
            }
        }

        return(mostThreatening);
    }
Example #3
0
    public KinematicData getCollideAvoid()
    {
        Vector3 ahead = this.transform.position + _currentVelocity.normalized * _maxAhead * 0.5f;

        CircleObs     _ClosestObsCirle = getClosetObstacle();
        KinematicData _SteeringOut     = new KinematicData();

        //lengkapi .... yang dibawah ini

        if (_ClosestObsCirle != null)
        {
            _SteeringOut._velocity = ahead - _ClosestObsCirle._center;
            if (_SteeringOut._velocity.magnitude > _maxAvoidanceForce)
            {
                _SteeringOut._velocity  = _SteeringOut._velocity.normalized;
                _SteeringOut._velocity *= _maxAvoidanceForce;
            }
        }
        else
        {
            _SteeringOut._velocity = Vector3.zero;
        }
        return(_SteeringOut);
    }