[Résolu] [DB] souci avec startLifetime

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

[Résolu] [DB] souci avec startLifetime

Message par jmhoubre » 01 Nov 2019 22:45

Bonsoir,
je visionne une série de tuto sur Youtube (Unity : Create a game series), mais elle date de 2015 et concerne Unity 5. J'ai déjà réglé quelques soucis (fonctions deprecated), mais là je bloque un peu sur l'épisode 15. Je suis en 2019.2.6f1.

Contexte : l'auteur crée un système de particules basique qui s'instancie quand l'ennemi meurt. Le système de particule est construit en prefab, dont la référence dans le script est deathEffect. Il détruit le système au bout de 2 secondes, en dur, c'est également la valeur du startLifetime dans le module principal du système. Pas de soucis, cela fonctionne :

Code : Tout sélectionner

// Code qui fonctionne.
if (_damage >= health) {
            Destroy(Instantiate(deathEffect, hitPoint, Quaternion.FromToRotation(
            	Vector3.forward, hitDirection)), 2f);
}
Un peu plus tard, il décide de ne plus mettre en dur la valeur, si on décide de changer la valeur du startLifetime. Le code devient :

Code : Tout sélectionner

// Code déclenchant un avertissement.
if (_damage >= health) {
            Destroy(Instantiate(deathEffect, hitPoint, Quaternion.FromToRotation(
            	Vector3.forward, hitDirection)), deathEffect.startLifetime);
}
Cela fonctionne encore, mais j'obtiens l'avertissement suivant :
Avertissement CS0618 'ParticleSystem.startLifetime' est obsolète : 'startLifetime property is deprecated. Use main.startLifetime or main.startLifetimeMultiplier instead.'

J'ai essayé pas mal de choses, qui se finissent généralement par Erreur CS0029 Impossible de convertir implicitement le type 'UnityEngine.ParticleSystem.MinMaxCurve' en 'float', bref je cale.

Je suis assez perplexe devant ce pathétique essai, dans lequel j'arrive à affecter un float à startLifetime, mais pas à récupérer sa valeur...

Code : Tout sélectionner

var main = deathEffect.main;
main.startLifetime = 2f;
float test = main.startLifetime; // Erreur CS0029
La lecture de la documentation m'a procuré une agréable moment de lecture, sans plus.
Quelqu'un voit où je me fourvoie ?

Merci.
Dernière édition par jmhoubre le 01 Nov 2019 23:00, édité 2 fois.

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: [DB] souci avec startLifetime

Message par jmhoubre » 01 Nov 2019 22:58

Je ne dois pas être le premier qui se répond, mais si vite... :gene2:
J'ai parcouru les commentaires (j'avais oublié), et un sympathique candidat a donné la réponse :

Code : Tout sélectionner

Destroy(Instantiate(deathEffect, _hitPoint, Quaternion.FromToRotation(
	Vector3.forward, _hitDirection)), deathEffect.main.startLifetime.constant);

Répondre

Revenir vers « Scripting »