68. CLASE PARTICLEEMITTER (y III)
particles:
var particles : Particle[]
Devuelve una copia de todas las partículas y asigna un array de todas las partículas. Hemos de tener en cuenta que después de modificar el array de partículas debemos asignarlo de vuelta al particleEmitter para ver el cambio. Partículas con energía de cero o menos serán elmiminadas cuando se asignen las partículas. Así cuando se crea un completo nuevo array de partículas, necesitaremos colocar la energía de todas las partículas explicitamente.
particleCount:
var particleCount : int
El corriente número de partículas. Variable de sólo lectura.
enabled:
var enabled : boolean
Establece el ParticleEmitter en on o off. Un ParticleEmitter que no está habilitado no emitirá ninguna partícula, y las partículas emitidas no se animarán. Así, este valor nos permite pausar un sistema de partículas.
Reutilicemos el ejemplo anterior para pausar nuestro sistema de partículas transcurridos cinco segundos.
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.worldVelocity = Vector3(0,3,0);
particleEmitter.rndVelocity = Vector3(1,0.5,0.5);
particleEmitter.rndRotation = true;
particleEmitter.angularVelocity = 1;
particleEmitter.rndAngularVelocity = 66;
yield WaitForSeconds(5);
particleEmitter.enabled = false;
FUNCIONES:
ClearParticles:
function ClearParticles () : void
Borra todas las partículas del sistema de partículas.
Emit:
function Emit () : void
Emite un número de partículas. Hace que el emitter escupa un número aleatorio de partículas que se establecen entre las propiedades minEmission y maxEmission. Probemos:
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 20;
particleEmitter.maxEmission = 150;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.angularVelocity = 1;
particleEmitter.rndAngularVelocity = 66;
particleEmitter.Emit();
function Emit (count : int) : void
Esta variante de la función emite el número count de partículas inmediatamente. Pasémosle el parámetro 300 a la función Emit del ejemplo anterior, por poner un caso muy exagerado.
function Emit (pos : Vector3, velocity : Vector3, size : float, energy : float, color : Color) : void
Este tercer prototipo de la función Emit emite una partícula individual con unos parámetros dados. Expliquemos brevemente qué representa cada parámetro:
pos: La posición de la partícula.
velocity: La velocidad de la partícula.
size: El tamaño de la partícula.
energy: El tiempo de vida restante de la partícula.
color: El color de la partícula.
particleEmitter.Emit(Vector3.zero, Vector3.up, 0.4, 4, Color.yellow);
Cuando le damos al play veremos una partícula en la posición central, con dirección hacia arriba, un tamaño de 0.4 unidades, que tardará 4 segundos en desvanecerse y tendrá color amarillo.
function Emit (pos : Vector3, velocity : Vector3, size : float, energy : float, color : Color, rotation : float, angularVelocity : float) : void
Y aún tenemos una tercera variante de la función, que incluye la rotación inicial de la partícula en grados y la velocidad angular por segundo.
particleEmitter.Emit(Vector3.zero, Vector3.up, 0.4, 4, Color.yellow, 75, 150);
Simulate:
function Simulate (deltaTime : float) : void
Avanzado sistema de simulación de partículas por un tiempo dado. Es útil para precalentar un sistema de partículas, como si se estuviera gestando:
particleEmitter.Simulate(5);
67. CLASE PARTICLEEMITTER (II)
minEmission:
var minEmission : float
El mínimo número de partículas que serán generadas cada segundo.
maxEmission:
var maxEmission : float
El máximo número de partículas que serán generadas cada segundo.
Los valores por defecto en el inspector son 50. Editemos nuestro script para alterarlo.
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
Tenemos ahora un sistema de partículas más denso y compacto, como vemos.
emitterVelocityScale:
var emitterVelocityScale : float
La cantidad de la velocidad de emisión que las partículas heredan. Por defecto 0.05.
worldVelocity:
var worldVelocity : Vector3
La velocidad inicial de las partículas en el mundo global, a lo largo de x,y,z.
Incorporemos estas dos últimas variables a nuestro ejemplo, dándole a nuestro sistema de partículas una mayor velocidad de emisión y haciendo que nuestras partículas se desplacen hacia arriba (en coordenadas globales):
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.worldVelocity = Vector3(0,3,0);
localVelocity:
var localVelocity : Vector3
Es como la anterior, pero el desplazamiento se efectúa en las coordenadas locales del propio sistema de partículas.
rndVelocity:
var rndVelocity : Vector3
Una velocidad aleatoria con relación a los ejes x,y,z que es añadida a la velocidad. En nuestro ejemplo:
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.worldVelocity = Vector3(0,3,0);
particleEmitter.rndVelocity = Vector3(1,0.5,0.5);
useWorldSpace:
var useWorldSpace : boolean
Si está habilitado, las partículas no se mueven cuando el emitter se mueve. Si está en false, cuando muevas el emitter, las partículas lo siguen.
rndRotation:
var rndRotation : boolean
Si está habilitado, las partículas serán generadas con rotaciones aleatorias. Por defecto está en false, así que observemos qué ocurre si lo habilitamos:
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.worldVelocity = Vector3(0,3,0);
particleEmitter.rndVelocity = Vector3(1,0.5,0.5);
particleEmitter.rndRotation = true;
angularVelocity:
var angularVelocity : float
La velocidad angular de las nuevas partículas en grados por segundo.
rndAngularVelocity:
var rndAngularVelocity : float
Un modificador aleatorio de velocidad angular para nuevas partículas. Un valor aleatorio en el rango de [-rndAngularVelocity,rndAngularVelocity] será aplicado a todas las nuevas partículas, en adición a ParticleEmitter. angularVelocity.
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
particleEmitter.minEmission = 70;
particleEmitter.maxEmission = 110;
particleEmitter.emitterVelocityScale = 0.4;
particleEmitter.worldVelocity = Vector3(0,3,0);
particleEmitter.rndVelocity = Vector3(1,0.5,0.5);
particleEmitter.rndRotation = true;
particleEmitter.angularVelocity = 1;
particleEmitter.rndAngularVelocity = 66;
66. CLASE PARTICLEEMITTER (I)

Antes que nada, pediros disculpas porque esa clase se me había pasado. Como podéis ver en el gráfico, ParticleEmitter deriva de Component (como Collider, Rigidbody, Transform...) y por lo tanto la debería haber explicado antes, pero bueno, subsanamos el error ahora.
Vamos a preparar antes que nada nuestra escena para acoger los nuevos ejemplos de esta clase:
1.- Borramos la cámara que creamos en la clase RenderTexture
2.- Devolvemos el cubo a sus valores previos: position (-2,0,0) scale(1,1,1)
3.- Eliminamos el script vinculado a la esfera.
4.- Eliminamos la render texture en la carpeta Proyecto.
5.- Nos vamos al menú Gameobject=>Create other=>Particle System.
6.- Ubicamos nuestro nuevo gameobject en 0,0,0 y lo renombramos como "Particulas".
7.- Salvamos la escena.
Deberíamos tener ahora una escena parecida a esta:

Vale, ya estamos listos.
VARIABLES:
emit:
var emit : boolean
Booleano que indica si deben las partículas ser automáticamente emitidas cada frame o no.
Podemos usar esta variable para "encender o apagar" la emisión de partículas.
Editemos nuestro script de la siguiente manera:
yield WaitForSeconds(5);
particleEmitter.emit = false;
yield WaitForSeconds(5);
particleEmitter.emit = true;
Observaremos que tras los cinco segundos iniciales, nuestro sistema de partículas comienza a extinguirse hasta desaparecer, y pasados otros cinco, vuelve a encenderse.
minSize:
var minSize : float
El tamaño mínimo que cada partícula puede tener cuando se genera.
maxSize:
var maxSize : float
El tamaño máximo que cada particular puede tener al tiempo de ser generada.
Si tenemos el gameobject Particulas seleccionado, podemos comprobar que por defecto el tamaño mínimo (y máximo) es 0.1. Veamos qué pasa si alteramos estos valores:
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
minEnergy:
var minEnergy : float
El mínimo tiempo de vida de cada particular, medido en segundos.
maxEnergy:
var maxEnergy : float
El máximo tiempo de vida de cada partícula, medido en segundos.
En el inspector esta variable y la anterior está colocada en 3 por defecto. Añadamos al script anterior unos valores distintos.
particleEmitter.minSize = 0.2;
particleEmitter.maxSize = 0.5;
particleEmitter.minEnergy = 1;
particleEmitter.maxEnergy = 5;
Vemos que conseguimos así una mayor variedad en la persistencia de cada partícula, dándole mayor dinamismo a nuestro sistema de partículas.
Dejamos aquí esta lección. Si aún te queda algo de tiempo no cierres el editor de scripts, ya que seguiremos en la próxima lección añadiendo modificaciones a nuestro ejemplo.
Hasta ahora.
Con la tecnología de Blogger.
BUSCADOR
PÁSATE POR EL FORO
API DE UNITY
TEMAS
- 00_INTRODUCCION (3)
- 01_CLASE OBJECT (3)
- 02_ESTRUCTURA VECTOR3 (4)
- 03_CLASE TRANSFORM (7)
- 04_CLASE RIGIDBODY (8)
- 05_CLASE COLLIDER (2)
- 06_CLASE MESHCOLLIDER (1)
- 07_CLASE CHARACTERCONTROLLER (3)
- 08_CLASE RENDERER (2)
- 09_CLASE MESHFILTER (1)
- 10_CLASE JOINT (2)
- 11_CLASE HINGEJOINT (2)
- 12_CLASE SPRINGJOINT (1)
- 13_CLASE CHARACTERJOINT (1)
- 14_CLASE BEHAVIOUR (1)
- 15_CLASE MONOBEHAVIOUR (9)
- 16_CLASE CAMERA (6)
- 17_CLASE LIGHT (3)
- 18_CLASE MATERIAL (3)
- 19_CLASE CUBEMAP (1)
- 20_CLASE RENDERTEXTURE (3)
- 21_CLASE PARTICLEEMITTER (3)
- 22_CLASE MESH (2)
- 23_CLASE GAMEOBJECT (6)
- 24_CLASE SHADER (1)
- 25_CLASE PHYSICMATERIAL (1)
- 26_CLASE COMPONENT (1)
- 27_CLASE GUIELEMENT (1)
- 28_CLASE GUITEXT (2)
- 29_CLASE GUITEXTURE (1)
- 30_CLASE GUI (8)
- 31_CLASE GUILAYOUT (4)
- 32_CLASE TEXTURE (1)
- 33_CLASE TEXTURE2D (2)
- 34_CLASE INPUT (4)
- 35_ESTRUCTURA BOUNDS (1)
- 36_CLASE COLLISION (1)
- 37_CLASE CONTROLLERCOLLIDERHIT (1)
- 38_CLASE DEBUG (1)
- 39_CLASE EVENT (3)
- 40_CLASE GIZMOS (1)
- 41_CLASE LIGHTMAPSETTINGS (1)
- 42_ESTRUCTURA MATHF (3)
- 43_CLASE PHYSICS (2)
- 44_ESTRUCTURA QUATERNION (1)
- 45_CLASE RANDOM (1)
- 46_ESTRUCTURA RAY (1)
- 47_ESTRUCTURA RAYCASTHIT (1)
- 48_ESTRUCTURA RECT (1)
- 49_CLASE RENDERSETTINGS (1)
- 50_CLASE SCREEN (1)
- 51_CLASE TIME (1)
- 52. CLASE YIELDINSTRUCTION (1)
- MONOGRAFICOS (2)
