Acendendo e apagando luz no Unity 5

Gunnar CorreaGunnar Correa12/04/2017 às 12:05:51 - 10.513 acessos

Neste artigo apresento como podemos obter um resultado de iluminação mais realista.


Quando trabalhamos com iluminação em qualquer Game Engine, precisamos deixar ela de uma forma mais realista, pois não é só clarear o cenário, mas também precisamos trabalhar em outros aspectos, como: mapa de emissão, som dos interruptores e até mesmo recalcular a reflexão do ambiente.

Este artigo é um complemento de uma videoaula disponibilizada em nosso canal e também logo abaixo. Aqui você encontra o script criado durante a aula e a também algumas explicações.

Em nossa aula mostramos três recursos, que são:

Objeto emitir luz -  Utilizando um mapa de iluminação, conseguimos determinar que apenas as lâmpadas e não o suporte iria emitir luz, pois através do script acessamos está propriedade e definimos a cor e a intensidade da emissão.

Emitir som – Quando acionamos o interruptor, reproduzimos um som para dar a sensação ao jogador que algo foi realmente pressionado.

Acender e Apagar a luz – De forma bem simples, acessamos todos os componentes light, e de acordo com o estado da ação do usuário, ativamos ou desativamos o componente através da propriedade enabled(bool).

Na figura 1 podemos ver o cenário de onde vamos iluminar, note que ele não está completamente escuro, então precisamos ajustar a intensidade da luz e também o alcance delas.

Cenário para iluminação no Unity 3D 5.

Figura 1: Cenário onde é iluminamos de forma realista.

Todo código criado e utilizado no vídeo está comentando, então leia com atenção.

Código 01:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControlarLuz : MonoBehaviour
{

    public GameObject[] _objetos; //Objetos que vão emitir luz
    public Light[] _luzes; //Objetos com o componente Light
    public string _playerTag = "Player"; //Tag do player

    private AudioSource _audio; //Áudio para efeito
    private bool _colidindo = false; //Controla se o player está ou não colidindo
    private bool _estado = false; //Controla se a luz está ligada ou ou desligada
    private List _listRenderComponents = new List(); //Lista de Render
    void Start()
    {
        _audio = this.GetComponent(); //Acessa o componente audiosurce
        for (int i = 0; i < _objetos.Length; i++)
        {
            _listRenderComponents.Add(_objetos[i].GetComponent()); //Acessamos todos os objetos
        }
    }


    void Update()
    {
        if (_colidindo && Input.GetKeyDown(KeyCode.E))
        {
            _estado = !_estado; //Nega o valor atual da variável.
            AcenderApagar(_estado); //Chama o método de acender ou apagar a luz
            AcenderSpot(_estado); //Chama o método de emitir ou não luz no objeto
        }
    }

    //linha 1
    //linha 2
    //linha 3
    void AcenderSpot(bool _estado)
    {
        foreach (Renderer _rd in _listRenderComponents)
        {
            _rd.material.EnableKeyword("_EMISSION");
            Material _mt = _rd.material;
            if (_estado)
            {
                _mt.SetColor("_EmissionColor", new Color(177f, 116f, 203f, 1) * 1);
            }
            else
            {
                _mt.SetColor("_EmissionColor", new Color(177f, 116f, 203f, 1) * 0);
            }

        }
    }


    void AcenderApagar(bool _acao)
    {
        if (!_audio != null && !_audio.isPlaying)
        {
            _audio.Play();
        }

        for (int i = 0; i < _luzes.Length; i++)
        {
            if (_acao)
            {
                _luzes[i].enabled = true;
            }
            else
            {
                _luzes[i].enabled = false;
            }
        }
    }

    private void OnTriggerEnter(Collider _col)
    {
        if (_col.gameObject.tag == _playerTag)
        {
            _colidindo = true;
        }
    }

    private void OnTriggerExit(Collider _col)
    {
        if (_col.gameObject.tag == _playerTag)
        {
            _colidindo = false;
        }
    }
}

 

Confira a videoaula completa.

Por hora é isto, quaisquer dúvidas deixem nos comentários, até a próxima!



Unity 5 Iluminação Tutorial Unity iluminação Acender e Apagar luz unity Acender luz Unity Iluminação via script Unity Script light Unity Emissive via script Mapa de emissão unity via script Ma

Compartilhe


Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web (FIPP), Especialista em Tecnologias na Educação (Unoeste) e Pós-graduando em Segurança da Informação (Universidade Cruzeiro do Sul). Começou seus estudos na área de programação quando era criança, e atualmente está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.



Comentários

1 / 8