Acendendo e apagando luz no Unity 5

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

Publicado em

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.
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!

Gunnar Correa
Gunnar Correa

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

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção


Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção