Criando uma Árvore de Natal com Blender e Unity

Gunnar CorreaGunnar Correa22/12/2019 às 01:51:23 - 1.713 acessos

Veja como criar um pisca-pisca usando a Unity com poucas linhas de código e configurações.


Para aquecer o nosso clima natalino, nesse artigo você confere duas videoaulas na qual criamos, importamos e programamos uma Árvore de Natal com pisca-pisca usando a Unity e o Blender 3D.

Está disponível também, o código utilizado durante as aulas, então, foque a sua atenção na explicação e no que está acontecendo, e não em copiar os códigos, afinal, eles estão disponíveis logo abaixo.

Basicamente no Blender modelamos uma lâmpada única e elá é duplicada várias vezes dentro da Unity.

Criamos um script que processa todas as lâmpadas e insere uma cor com emissão de acordo com o array de cores estabelecido. Ainda nesse mesmo script, criamos também uma opção para que as luzes fiquem piscando aleatoriamente, que é executado através de um método pela função InvokeRepeating.

Vídeo 1

Vídeo 2

 

ArvoreDeNatal.cs

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

public class ArvoreDeNatal : MonoBehaviour
{
    public GameObject[] parentLamps; //Setar o objeto que os filhos são as lampadas
    public Color[] colorsLamps; //Cores que podemos personalizar
    [Range(1.0f, 5.0f)]
    public float intensity = 1; //Itensidade da emissão de luz

    [Space(5)]
    public bool flasher = true;//Vai ficar piscando?
    [Range(0.1f, 5.0f)]
    public float timeRefresh = 1.0f;

    private List lamps = new List(); //Todas as lâmpadas encontradas durante o get

    private void Start()
    {
        foreach (GameObject go in parentLamps)
        {
            for (int i = 0; i < go.transform.childCount; i++)
            {
                GameObject g = go.transform.GetChild(i).gameObject;
                lamps.Add(g);
            }
        }

        foreach (GameObject go in lamps)
        {
            Color c = this.GetColor();
            Renderer re = go.GetComponent();
            re.material.color = c;
            re.material.EnableKeyword("_EMISSION");
            re.material.SetColor("_EmissionColor", c * intensity);
        }

        if (this.flasher)
        {
            InvokeRepeating("Flasher", this.timeRefresh, this.timeRefresh);
        }
    }


    private void Flasher()
    {
        foreach (GameObject go in lamps)
        {
            bool turnOn = (UnityEngine.Random.Range(0, 10) <= 5 ? true : false);
            Renderer re = go.GetComponent();

            if (turnOn)
                re.material.EnableKeyword("_EMISSION");
            else
                re.material.DisableKeyword("_EMISSION");
        }
    }

    private Color GetColor()
    {
        int rand = UnityEngine.Random.Range(0, this.colorsLamps.Length);
        return this.colorsLamps[rand];
    }
}

 


Unity tutorial unity curso unity aulas arvore de natal unity unity luz unity emissive unity bloom unity arvore unity luz natal unity programação unity pisca pisca unity 3d aprenda unity

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.



Site atualizado

Olá, nosso site recebeu uma nova atualização e por conta disso, alguns artigos ainda estão sendo atualizados. Dependendo do conteúdo que você procura, poderá encontrar imagens e trechos de códigos mal formatados.

Estamos trabalhando para normalizar todos os conteúdos, muito em breve, esse problema não mais existirá.


Comentários