コード例 #1
0
 private void Awake()
 {
     if (_instance == null)
     {
         _instance = this;
     }
 }
コード例 #2
0
    private void Update()
    {
        if (_selfDestructTimerCurrentValue <= _selfDestructTimerDefaultValue)
        {
            _selfDestructTimerCurrentValue += Time.deltaTime;
        }
        else
        {
            Destroy(gameObject);
        }

        if (_launched)
        {
            transform.position += transform.forward * _enemySpeed * Time.deltaTime;
        }

        var screenPoint = Camera.main.WorldToViewportPoint(transform.position);

        _isVisible = screenPoint.z > 0 && screenPoint.x > 0 && screenPoint.x < 1 && screenPoint.y > 0 && screenPoint.y < 1;

        if (GameManager.TankControl && !_isVisible && _needShowArrow)
        {
            var prevSide    = _enemySideIfInvisible;
            var enemyVector = new Vector3(transform.position.x, transform.position.z);
            var tankVector  = new Vector3(GameManager.TankControl.transform.forward.x, GameManager.TankControl.transform.forward.z);

            var crossProduct = Vector3.Cross(tankVector, enemyVector);

            _enemySideIfInvisible = Mathf.Sign(crossProduct.z) < 0 ? Side.Right : Side.Left;

            if (_enemySideIfInvisible != prevSide)
            {
                if (_currentEnemyArrow)
                {
                    Destroy(_currentEnemyArrow);
                }
                _currentEnemyArrow = GaragesManager.SpawnEnemyArrow(_enemySideIfInvisible);
            }
        }
        else
        {
            _enemySideIfInvisible = Side.None;
            if (_currentEnemyArrow)
            {
                Destroy(_currentEnemyArrow);
            }
        }

        if (_enemyHealth <= 0)
        {
            Die();
        }
    }