Bruno C. de Paula Sistema de Partículas 1º Semestre 2010 > PUCPR > Pós Jogos Resumo Hoje vamos entender o sistema de partículas do Unity 3D; Vamos trabalhar com os componentes: Ellipsoid Particle Emitter; Mesh Particle Emitter; Particle Animator; Particle Renderer; Trail Renderer; World Particle Collider. 05/11/2015 3 Sistema de Partículas Conjunto de componentes dedicado à: Emissão (Particle Emitter); Animação (Particle Animator); Renderização de objetos de partícula (Particle Renderer); Partículas são diferentes dos objetos normais! Vem em grupos de centenas ou milhares; Possuem movimentação com aspectos aleatórios (fuzzy); Lidam com colisão simplificada ou inexistente; São construídos para ter vida curta; Essenciais para efeitos realistas. 05/11/2015 4 05/11/2015 5 Uso de partículas Fogo, explosões, faíscas, água corrente, neve, cabelo, magias, spray, rastros, fumaça, vapor, galáxias, etc. 05/11/2015 6 Prefabs de partículas prontos Particle Emitter Emissor de Partículas Local 05/11/2015 7 que as partículas são emitidas; Tipos: Ellipsoid Particle Emitter: geração em área de uma esfera (elipsóide, na verdade...); Mesh Particle Emitter: geração em área de uma mesh (malha). Ellipsoid Particle Emitter Emissor dentro de “esfera” Mais comum; Usado para fumaça, vapor, etc; Possui propriedades de: Tamanho; Energia (duração da vida); Emissão (num partículas); Velocidade inicial. Não usar partículas muito grandes (performance)! 05/11/2015 8 Ellipsoid Particle Emitter Propriedades Min 05/11/2015 9 / Max Size: tamanho em metros; Min / Max Energy: quantos segundos até desaparecer; Min / Max Emission: número de partículas por segundo; World / Local Velocity: velocidade inicial nas coordenadas do mundo e local; Rnd Velocity: velocidade inicial aleatória; Emmiter Velocity Scale: velocidade que é herdada do emissor se estiver se movendo; Ellipsoid Particle Emitter Propriedades Tangent 05/11/2015 10 Velocity: velocidade inicial em X, Y e Z em relação à superfície do emissor; Simulate in Worldspace: Se não, movem-se quando o emissor se move; One Shot: gera as partículas de uma vez, explosão, magia, etc; Ellipsoid: determina a área de criação das partículas; Min Emitter Range: espaço dentro da elipsóide no qual não são criadas partículas. Quanto maior, mais distante é a criação do centro. Mesh Particle Emitter Emissor dentro de malha Emissão 05/11/2015 11 de partículas seguindo a superfície de uma mesh; Permitem interação com objetos complexos; Também possui propriedades de: Tamanho; Energia (duração da vida); Emissão (num partículas); Velocidade inicial. Útil para efeitos de glow (brilho) em lâmpadas; Passos para criação; Mesh Particle Emitter Propriedades 05/11/2015 12 Interpolate Triangles: Sim: Partículas emitidas na superfície; Não: Partículas emitidas nos vértices; Interpolate = on Interpolate = off Mesh Particle Emitter Propriedades Systematic: Geração das partículas na ordem dos vértices do modelo; 05/11/2015 13 Particle Animator Animador de Partículas Move / transforma / anima as partículas conforme o tempo passa; Determina características individuais de uma partícula; Mudança de: Cor, rotação, tamanho, aceleração; 05/11/2015 14 Particle Animator Propriedades Does 05/11/2015 15 Animate Color: partículas trocam de cor em seu ciclo de vida; Color Animation (0 a 4): Todas as cores pelas quais a partícula passa, usar degradê para fade; World / Local Rotation Axis: rotação da partícula, útil em magias e bolhas; Size Grow: Controla o crescimento das partículas durante a vida, útil em fumaça; Particle Animator Propriedades Rnd Force: força aleatória aplicada a cada frame; Força: força constante aplicada a cada frame; Auto Destruct: destrói o game object associado ao particle animator quando as partículas desaparecerem, útil para explosões; 05/11/2015 16 Particle Animator Damping Damping: 05/11/2015 17 diminuição da velocidade a cada frame; Entre 0 e 1: diminui velocidade; 1: Sem aceleração / desaceleração; 2: Velocidade dobra a cada segundo; Damping<1 Damping=1 Damping > 1 Particle Renderer Renderizador de Partículas Necessário para exibir as partículas no ambiente; Na prática, partículas são sprites quadrados com transparência (gráficos 2D); Pode ser animada; Pode usar billboarding; Partes pretas do material são transparentes. 05/11/2015 18 Particle Renderer Propriedades Materials: textura usada em cada uma das partículas; Ver pasta Standard Assets > Particles > Sources; Criar material novo em Assets > Create Other > Material. 05/11/2015 19 Particle Renderer Propriedades Camera 05/11/2015 20 Velocity Scale: Quantidade que a partícula é esticada conforme o movimento da câmera, útil para efeito de faísca; Strech Particles: determina o modo de renderização: Billboard: virados em direção à câmera; Stretch: virada na direção do movimento; Sorted Billboard: ordenadas pela profundidade (caro); Vertical / Horizontal: alinhamento em X/Z ou X/Y. Particle Renderer Propriedades Length 05/11/2015 21 Scale (se stretch): determina quanto estica na direção do movimento; Velocity Scale (se strech): determina a taxa que as particulas são esticadas; UV Animation: permite a definição de uma textura animada a partir de um sprite formato por X Tiles de largura e Y Tiles de Altura. Cycles determina o número de loops da animação; Trail Renderer Renderizador de rastro Permite 05/11/2015 22 a criação de rastros e trajetórias atrás de objetos, conforme eles se movem; Trail Renderer Propriedades Materials: 05/11/2015 23 textura utilizada; Time: duração do rastro em segundos; Start / End Width: tamanho inicial e final do rastro; Colors (0 a 4): Cores aplicadas do início ao fim do rastro; Min Vertex Distance: determina quanto o objeto deve ir antes de um segmento seja solidificado. Quanto menor, o rastro é mais suave; Auto Destruct: destrói o objeto associado ao rastro depois do tempo. World Particle Collider Colisor de partículas Usado 05/11/2015 24 para colidir as partículas com outros objetos em cena; Caro computacionalmente; Ao colidir, a mensagem enviada ao Particle Collider é OnParticleCollision. World Particle Collider Propriedades Bounce 05/11/2015 25 Factor: Partículas aceleram ou freiam quando colidem com outros objetos; Collision Energy Loss: perda de vida em segundos que a partícula perde quando colide; Min Kill Velocity: Se a velocidade ficar menor que o mínimo ela é eliminada; Collides With: com quais layers colide; Send Collision Message: cada partícula envia uma mensagem de colisão individualmente. Script Aplicar uma força quando colide function OnParticleCollision(obj : GameObject) { var body = obj.rigidbody; // Só aplica se o corpo for corpo rígido if(body) { Debug.Log("colidiu com: " + obj.name); // Obtém a direção var direcao = obj.transform.position - transform.position; direcao = direcao.normalized; // Aplica uma força body.AddForce( direcao * 5); } } 05/11/2015 26 Script Ligar e desligar a emissão Tratar 05/11/2015 27 a propriedade emit do ParticleEmitter; function Update () { var emissor : ParticleEmitter = GetComponent(ParticleEmitter); // Tecla espaço liga e desliga a fogueira if(Input.GetKeyDown("space")) { emissor.emit = ! emissor.emit; } } Script Alterar propriedades do sistema de partículas function Update () { var animator : ParticleAnimator = GetComponent(ParticleAnimator); if(Input.GetKeyDown("g")) { animator.sizeGrow = animator.sizeGrow * 2; } if(Input.GetKeyDown("h")) { animator.sizeGrow = animator.sizeGrow / 2; } } 05/11/2015 28 Script TimedObjectDestructor.js Útil para destruir objetos após certo tempo; var timeOut = 1.0; var detachChildren = false; function Awake () { Invoke ("DestroyNow", timeOut); } function DestroyNow () { if (detachChildren) { transform.DetachChildren (); } DestroyObject (gameObject); } 05/11/2015 29