Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 51,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
Alvaro95

Controlar parametros de un particle system

Recommended Posts

¡Buenas a todos!


Es posible con un script C poder modificar los parametros de un particle system?

En este caso por ejemplo quiero que se modifique el "force over lifetime", que por ejemplo que cuando pulse W el parametro y sea -2 o cuando le de a la X sea -3.

Ante todo, gracias y me estoy refiriendo a la version unity 2018.

Una foto de lo que quiero modificar a traves de script.

parametro.png.36832ce5414c449654018629522e79d5.png

Share this post


Link to post
Share on other sites
8 hours ago, Alvaro95 said:

Pero puedo hacerlo controlable estilo asi:

Sin título.png

Lee el ejemplo del link que te pasó @iRobb, ahí está todo, la guía de referencia te saca la duda siempre para todo tipo de componente,. En general toda propiedad que vos tocás en el inspector de algun componente de Unity podés controlarla en un script, o por lo menos casi todos los campos que tienen sentido que sean accesibles por fuera (muchas veces no necesariamente porque estén en el inspector son accesibles, ej son los [SerializeField] ).

 

12 hours ago, Alvaro95 said:

Es posible con un script C poder modificar los parametros de un particle system?

Creo que no, vas a tener que usar C# :22_stuck_out_tongue_winking_eye::22_stuck_out_tongue_winking_eye::22_stuck_out_tongue_winking_eye:

Share this post


Link to post
Share on other sites

jajajaja, si entendi, el problema que es que no se adjuntar ese componente con un If imput keycodedown

Share this post


Link to post
Share on other sites
14 minutes ago, Alvaro95 said:

jajajaja, si entendi, el problema que es que no se adjuntar ese componente con un If imput keycodedown

22 hours ago, Alvaro95 said:

que por ejemplo que cuando pulse W el parametro y sea -2 o cuando le de a la X sea -3.

Aahh, disculpá, algo así ?

if(Input.GetKeyDown(Keycode.W))
{
	ParticleTest.forceOverLifetime.y = -2;
}
else if(Input.GetKeyDown(Keycode.X))
{
	ParticleTest.forceOverLifetime.y = -3;
}

 

Share this post


Link to post
Share on other sites
6 hours ago, lightbug said:

Aahh, disculpá, algo así ?


if(Input.GetKeyDown(Keycode.W))
{
	ParticleTest.forceOverLifetime.y = -2;
}
else if(Input.GetKeyDown(Keycode.X))
{
	ParticleTest.forceOverLifetime.y = -3;
}

 

Hola Lightbug, graicas por tu ayuda pero si pongo el script segun me lo has dado no me sirve :61_sob:

No se si me podrias ayudar con esto, como recompensa, puedo pagarte por paypal o ayudarte en cuauquer ambito de diseño 2D/3D, debido a que soy diseñador grafico y no programador, ahi el problema jajjaa.

 

Saludos!

Share this post


Link to post
Share on other sites
Just now, Alvaro95 said:

Hola Lightbug, graicas por tu ayuda pero si pongo el script segun me lo has dado no me sirve :61_sob:

No se si me podrias ayudar con esto, como recompensa, puedo pagarte por paypal o ayudarte en cuauquer ambito de diseño 2D/3D, debido a que soy diseñador grafico y no programador, ahi el problema jajjaa.

Serían unos $15 por if ... jaja

pero hombre, qué es lo que no anda?, poné el mensaje de la consola, es un error de compilación (no te deja dar play) o simplemente no anda en el juego?

Share this post


Link to post
Share on other sites

Jaja.

 

Pues, esto es lo que he intentado montar en el script, (personalmente creo que esta lleno de fallos)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        ParticleSystem ps = GetComponent<ParticleSystem>();
        var fo = ps.forceOverLifetime;
        fo.enabled = true;

        AnimationCurve curve = new AnimationCurve();
        curve.AddKey(0.0f, 0.1f);
        curve.AddKey(0.75f, 1.0f);
        fo.x = new ParticleSystem.MinMaxCurve(1.5f, curve);

    void Update () {
    if(Input.GetKeyDown(Keycode.W))
    {
    ParticleTest.forceOverLifetime.y = -2;
    }
    else if(Input.GetKeyDown(Keycode.X))
    {
    ParticleTest.forceOverLifetime.y = -3;
    }

     }
}

 

Foto:

 

 

 

foto.png

Edited by Bamf
No te cobramos por usar <> al pegar el código.

Share this post


Link to post
Share on other sites

El error es que te falta la llave de cierre en el método Start. Éste debería ir debajo de la línea 13 del código que incluiste.

Edit: He revisado el código en mi pc, y hay más errores pero son sencillos de arreglar. En cuanto al forceOverLifetime, no lo puedes editar directamente. Tienes que asignarlo a una variable, algo así:

using UnityEngine;
using System.Collections;

public class Particulas : MonoBehaviour {

    // Creamos la variable para guardar el sistema de partículas
    ParticleSystem ps;

    void Start() {
        // Asignamos el sistema de partículas a la variable global
        ps = GetComponent<ParticleSystem>();
    }

    void Update () {
        // Si se presiona la tecla W...
        if(Input.GetKeyDown(KeyCode.W))
        {
            // entonces asigna el "forceOverLifetime" a una variable...
            var forceOverLifetime = ps.forceOverLifetime;
            // y modifica los parámetros de esa variable
            forceOverLifetime.y = -100;
        }
        // Si se presiona la tecla X...
        else if(Input.GetKeyDown(KeyCode.X))
        {
            // haz lo mismo que en el caso anterior
            var forceOverLifetime = ps.forceOverLifetime;
            forceOverLifetime.y = 100;
        }

    }
}

Y por favor no copies directamente el código. Trata de entender cómo funciona y haz las modificaciones necesarias.

Edited by luciferk9
Agregué más información

Share this post


Link to post
Share on other sites
Sign in to follow this  

×