Ejemplo n.º 1
0
    void Shoot()
    {
        // Armazenando o valor do centro da tela
        // Vector3 _centerOfScreen = new Vector3(Screen.width / 2f, Screen.height / 2f, 0);
        // Criando a origem do disparo do RayCast pelo centro da tela
        // Ray rayOrigin = Camera.main.ScreenPointToRay(_centerOfScreen);


        // Criando a origem do disparo do RayCast usando a viewport como referencia. O calculo da viewport é feito de 0 a 1.
        Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));

        // Tipo de dado para armazenar informacao de retorno do raycast informando o que foi atingido.
        RaycastHit hitInfo;

        Vector3 forward = transform.TransformDirection(Vector3.forward) * 10;

        // Chamando o sistema de disparo do RayCast. Verifica se atinge algum object que possui um Collider. Distancia maximo do raio(MaxDepth) = Infinito
        // if(Physics.Raycast(rayOrigin, Mathf.Infinity)) {


        // Chamando o sistema de disparo do RayCast. Verifica se atinge algum object que possui um Collider. HitInfo retornará informacoes do objeto atingido.
        if (Physics.Raycast(rayOrigin, out hitInfo))
        {
            if (hasWeapon)
            {
                // Com o Quaternion LookRotatiom e passando a normal do hitinfo o efeito será aplicado na angulacao correta do local atingido.
                GameObject hitMarker = Instantiate(_hitMarkerPrefab, hitInfo.point, Quaternion.LookRotation(hitInfo.normal));
                Destroy(hitMarker, 1f);
            }

            // Verifica se atingiu a caixa para fazer a troca pela caixa quebrada
            Destructables _crateDestroy = hitInfo.transform.GetComponent <Destructables> ();
            if (_crateDestroy != null)
            {
                _crateDestroy.DestroyCrate();
            }
        }

        // Verifica se o audio já está sendo tocado antes de dispara outro. Evita bug de som.
        if (_weaponAudio.isPlaying == false)
        {
            _weaponAudio.Play();
        }

        // Verifica se player Possui Arma
        if (hasWeapon)
        {
            currentAmmo--;
            _uiManager.UpdateAmmo(currentAmmo);

            // Ativa particulas de tiro
            _muzzleFlash.SetActive(true);
        }
    }