Logo SatellaSoft



Atenção: nosso site receberá uma nova atualização em seus serviços em breve. Você poderá ter uma experiência ruim com renderização de algumas imagens, porém elas serão solucionadas na próxima atualização.


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 554
Í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