2016-05-16 1 views
0

J'ai 2 scripts C# dans ma partie. L'un d'eux est dans mon "objet principal" et l'autre script dans "mon appareil photo principal". Je veux déclarer une variable float dans le script de mon lecteur principal, et à chaque seconde de jeu je veux enregistrer la position x de mon lecteur dans cette variable et en même temps passer cette valeur au script de ma caméra principale et assigner cette valeur dans la position x de ma caméra principale dans chaque seconde de jeu. Comment puis-je passer une variable à un script d'un autre? Ou comment puis-je créer une variable qui peut être utilisée par n'importe quel script dans mon jeu?Variables partagées dans Unity 3D

+0

Il y a plusieurs façons de gérer cela. La première consiste à créer une variable publique Transform/GameObject sur le script de la caméra, et à y glisser l'objet lecteur dans l'inspecteur Unity. Ensuite, vous pouvez l'utiliser pour accéder à 'transform.position.x' du lecteur. C'est la solution la plus simple pour votre cas, aucun script supplémentaire n'est nécessaire sur le script du lecteur lui-même. Cependant, cela ne rendrait cette variable accessible au script de caméra - si vous en avez besoin accessible à partir de tous les scripts de votre projet, vous devrez aborder cela différemment. – Serlite

+1

Fais ce que Tom dit. Cette question a été posée 1000 fois! – Fattie

Répondre

2

Il y a une réponse here qui explique ce problème en détail, mais la façon la plus simple qui est inclus dans cette réponse serait de faire quelque chose comme ce qui suit:

public class Speed: MonoBehaviour 
    public float speed; 
    // maybe you want restrict this to have read access, then you should use a property instead 

Et puis dans d'autres scripts:

GameObject gameObject = GameObject.Find ("Some object"); 
Speed theSpeed = gameObject.GetComponent <Speed>(); 
float mySpeed= theSpeed.speed; 
+0

La deuxième voie est plus sûre. Merci beaucoup. –

+0

Aucun problème, si cela vous a aidé à vous assurer de cocher la réponse! :-) – Tom