예제 #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);
        }
    }
예제 #2
0
파일: Wings.cs 프로젝트: lwsn/SPACE
    public void Impact(Vector2 impactDir, Destructables target)
    {
        ShieldImpact clone = Instantiate(impact, parent.transform.position + new Vector3(0, 0, -2), Quaternion.LookRotation(transform.forward, impactDir)) as ShieldImpact;

        clone.transform.parent = parent.transform;
    }
예제 #3
0
파일: Wings.cs 프로젝트: LatexBotox/SPACE
	public void Impact(Vector2 impactDir, Destructables target) {
		ShieldImpact clone = Instantiate (impact, parent.transform.position+new Vector3(0,0,-2), Quaternion.LookRotation(transform.forward, impactDir)) as ShieldImpact;
		clone.transform.parent = parent.transform;
	}