Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Controlar parametros de un particle system

Iniciado por Alvaro95, Junio 09, 2019, 09:52:41 PM

Tema anterior - Siguiente tema
¡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.
 


Pero puedo hacerlo controlable estilo asi:
 
 
 

Cita de: Alvaro95 date=1560123208Pero puedo hacerlo controlable estilo asi:
   
   
      
   


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] ).
 
 
 
Cita de: Alvaro95 date=1560109961Es posible con un script C poder modificar los parametros de un particle system?
   


Creo que no, vas a tener que usar C#

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

Cita de: Alvaro95 date=1560189060jajajaja, si entendi, el problema que es que no se adjuntar ese componente con un If imput keycodedown
   

Cita de: Alvaro95 date=1560109961que 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;
}

 
 

Cita de: lightbug date=1560190548Aahh, 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
 
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!

Cita de: Alvaro95 date=1560212722Hola Lightbug, graicas por tu ayuda pero si pongo el script segun me lo has dado no me sirve
   
      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?

Junio 15, 2019, 02:44:19 AM #8 Ultima modificación: Junio 16, 2019, 05:43:01 PM por Bamf
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:
 
 
 
 
 
 
 

Gracuas por los  <> sinceramente no tenia ni idea de como insertar el codigo en el foro.

Junio 18, 2019, 02:40:39 AM #10 Ultima modificación: Junio 18, 2019, 03:12:20 AM por luciferk9
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.

Etiquetas: