Utilisation de FindObjectOfType

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Suladân
Messages : 2
Inscription : 25 Avr 2010 16:50

Utilisation de FindObjectOfType

Message par Suladân » 25 Avr 2010 17:08

Bonjour.

Débutant avec Unity, je n'arrive pas vraiment à utiliser la fonction FindObjectOfType, malgré des recherches.
Dans mon projet, j'ai un objet Properties et un script du même nom avec certaines variables qui passe de scène en scène avec DontDestroyOnLoad. Je veux lire les variables contenus dans cet objet à n'importe quelle scène, donc il faut que je puisse y accéder à partir d'un autre script

Le code de Properties :

Code : Tout sélectionner

public class Properties : MonoBehaviour {

	public int lives=3;
	
	void Update(){
		DontDestroyOnLoad(this);
	}
	
}
Le code du script qui cherche à accéder à Properties :

Code : Tout sélectionner

public class ThirdPersonStatus : MonoBehaviour {

	public Properties properties;
	public int health=3;
	public int maxHealth=3;
	public int maxLives=3;
	public Vector3 respawn;
	public float score=1000;
	public float remainingTime=120;
	public CloudMove cloud;
	public int win=17;
	
	void Start(){
		respawn=Vector3.zero;
		transform.position=respawn;
		properties=FindObjectOfType(typeof(Properties));
	}
...
Le message d'erreur qui apparait est "Cannot implicitly convert 'UnityEngine.Object' to 'Properties'. An explicit conversion exists". J'ai suivi des exemples que j'ai trouvés, alors je ne comprends pas où est l'erreur.

Merci d'avance pour vos réponses.

romaing
Messages : 2
Inscription : 25 Avr 2010 19:05

Re: Utilisation de FindObjectOfType

Message par romaing » 25 Avr 2010 19:09

Essaie

Code : Tout sélectionner

FindObjectOfType<Properties>();
Dernière édition par romaing le 25 Avr 2010 22:15, édité 1 fois.

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Utilisation de FindObjectOfType

Message par giyomuSan » 25 Avr 2010 19:17

Code : Tout sélectionner

properties = (Properties)GameObject.FindObjectOfType(typeof(Properties));

//pour acceder a ta valeur ensuite 
properties.taValeur;
tu dois passer par le game object qui contient la valeur que tu cherche, ensuite ta variable properties et de type Properties , donc il faut un cast explicite car evidemment tu ne peu pas retourner un type GameObject ds un champ de type "Properties"

romaing
Messages : 2
Inscription : 25 Avr 2010 19:05

Re: Utilisation de FindObjectOfType

Message par romaing » 25 Avr 2010 22:13

giyomuSan a écrit :

Code : Tout sélectionner

properties = (Properties)GameObject.FindObjectOfType(typeof(Properties));

//pour acceder a ta valeur ensuite 
properties.taValeur;
La version générique ne nécessite pas de cast, c'est plus propre de l'utiliser d'ailleurs.
FindObjectOfType est static donc si on est dans un GameObject, pas besoin de préfixer, c'est déjà assez verbeux comme ça ;)

Et si on veut pas utiliser la version générique, ça devrait sans doute être plus lisible et propre de le faire comme ça

Code : Tout sélectionner

properties = FindObjectOfType(Properties) as Properties;

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Utilisation de FindObjectOfType

Message par giyomuSan » 26 Avr 2010 06:39

dis moi t es sur que tu as une veriosn de FindObjectOfType d implementer de base ds unity , j en suis pas sur moi ..si c le cas , faudra lui filer le code pour implementer sa verison generic lui meme :mrgreen:

http://forum.unity3d.com/viewtopic.php? ... c&start=15

ah et l'habitude iphone m 'a appris a eviter les generic comme de la peste car la veriosn de mono les encaisser pas , ce qui ets plus le cas sur la derniere veriosn 1.7 remarque :D

pour ta 2eme ligne de code parcontre , ca fonctionne effectivement sans avoir besoind du GameObject.Func
mais en tapant ca ..je sais que la veriosn javascript unity n 'as pas besoin de "typeof"..mais c pas le cas en C#..

Code : Tout sélectionner

properties = FindObjectOfType(typeof(Properties)) as Properties;

Suladân
Messages : 2
Inscription : 25 Avr 2010 16:50

Re: Utilisation de FindObjectOfType

Message par Suladân » 26 Avr 2010 10:11

giyomuSan a écrit :

Code : Tout sélectionner

properties = FindObjectOfType(typeof(Properties)) as Properties;
Ca semble marcher comme ça, en effet.
J'avais déjà vu sous cette forme-là avant, mais des scripts que j'avais trouvés après n'utilisait pas le "as ..." et je n'y avais plus pensé par la suite.

Merci beaucoup pour vos réponses et leur rapidité. ;)

Répondre

Revenir vers « Scripting »