Logo SatellaSoft



Criando uma Árvore de Natal com Blender e Unity

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


Ícone homem Gunnar Correa
Ícone data de publicação 22/12/2019
Ícone quantidade de visualização 183
Ícone bandeira do Brasil Português

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];
    }
}



Sobre o autor


Gunnar Correa

Nome: Gunnar Correa

Site: http://www.gunnarcorrea.com


Autodidata, graduado em Desenvolvimento Web e especialista em Tecnologias na Educação em uma universidade no interior de São Paulo. Comecei meus estudos na área de programação quando ainda era criança, e atualmente estou estudando desenvolvimento de jogos.

Sou o CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.


Comentários



É necessário estar autenticado para comentar, clique aqui para se registrar ou aqui para acessar a sua conta!

 


 

Siga-nos