Nous souhaitons déposer des cookies à des fins de mesure d'audience avec Google Analytics. Vous êtes libre d'accepter ou de refuser. En poursuivant votre navigation sur ce site sans exprimer votre choix, vous autorisez la mesure d'audience.
J'ai un script avec des caméras de surveillances, qui fonctionne parfaitement tant que je n'ai qu'une seule caméra. Si je duplique le préfab de la caméra avec le script, j'ai un problème (du à de l'inexpérience et pas à un véritable bug, je sais d'où il vient).
En effet, j'ai dupliqué ma caméra, et l'alarme ne s'active que sur la première caméra, pas sur les dupliquées. J'utilise un prefab avec le même script, j'ai vérifié les variables sont les mêmes, mais je vois pas comment lui dire que le script doit fonctionner indépendamment sur chaque caméra ?
usingUnityEngine;usingSystem.Collections;publicclassGuard:MonoBehaviour{publicTransformsightStart,sightEnd;publicboolspotted=false;publicboolfacingLeft=true;publicGameObjectarrow;voidStart(){InvokeRepeating("Patrol",0f,Random.Range(3f,6f));}// Update is called once per framevoidUpdate(){Raycasting();Behaviours();}voidRaycasting(){Debug.DrawLine(sightStart.position,sightEnd.position,Color.green);spotted=Physics2D.Linecast(sightStart.position,sightEnd.position,1<<LayerMask.NameToLayer("Player"));}voidBehaviours(){if(spotted==true){arrow.SetActive(true);Alarm_Behaviours();}else{arrow.SetActive(false);if(Enemy_Script.Speed<0){Enemy_Script.Speed=-2f;}else{Enemy_Script.Speed=2f;}}}voidPatrol(){facingLeft=!facingLeft;if(facingLeft==true){transform.eulerAngles=newVector2(0,0);}else{transform.eulerAngles=newVector2(0,180);}}voidAlarm_Behaviours(){if(spotted==true){if(Enemy_Script.Speed<0){Enemy_Script.Speed=-8f;}else{Enemy_Script.Speed=8f;}}}}
Est ce que quelqu'un aurait une idée de ce qui pourrait causer ce petit problème ?
Merci d'avance.
quand tu dis j'ai vérifié les variables sont les mêmes, tu veux dire que les variables sightStart de chaque caméra correspondent au même Transform ? si c'est le cas, alors tu as ton problème.
En fait chaque caméra me détecte, et la variable spotted prend bien true comme je le souhaite. Mais l'alarme qui se déclenche si spotted est activée elle ne se lance que pour le spotted de la caméra 1, comme si c'était différent entre les caméras, et c'est ça que je ne comprend pas…
y'aurait moyen d'avoir une scène de test qui reproduit le problème ? (plus simple si on peut tester directement) et aussi, tu parles d'une alarme qui se déclenche mais dans le script y'a aucune référence à du son.
je viens de comprendre le problème, c'est très con quand on y pense. Toutes les caméras ont le même script, donc toutes les caméras remettent à 2 la vitesse des ennemis si elles ne détectent pas le joueur. Donc si une caméra détecte le joueur, la caméra d'après à être testée remettra la vitesse à 2 comme elle aura spotted à false d'où le fait que la seule caméra qui fonctionne est celle qui est testée en dernière.
edit: je viens de modifier vite fait le script pour gérer ça:
usingUnityEngine;usingSystem.Collections;publicclassGuard:MonoBehaviour{publicTransformsightStart,sightEnd;publicboolspotted=false;publicboolfacingLeft=true;privatestaticGuardspottedCam=null;publicGameObjectarrow;voidStart(){InvokeRepeating("Patrol",0f,Random.Range(3f,6f));}// Update is called once per framevoidUpdate(){Raycasting();Behaviours();}voidRaycasting(){Debug.DrawLine(sightStart.position,sightEnd.position,Color.green);spotted=Physics2D.Linecast(sightStart.position,sightEnd.position,1<<LayerMask.NameToLayer("Player"));if(spotted)spottedCam=this;}voidBehaviours(){if(spotted==true){arrow.SetActive(true);Alarm_Behaviours();}elseif(spottedCam==this){arrow.SetActive(false);if(Enemy_Script.Speed<0){Enemy_Script.Speed=-2f;}else{Enemy_Script.Speed=2f;}spottedCam=null;}}voidPatrol(){facingLeft=!facingLeft;if(facingLeft==true){transform.eulerAngles=newVector2(0,0);}else{transform.eulerAngles=newVector2(0,180);}}voidAlarm_Behaviours(){if(spotted==true){if(Enemy_Script.Speed<0){Enemy_Script.Speed=-8f;}else{Enemy_Script.Speed=8f;}}}}
Effectivement, "si" on y pense.
Je me rends compte que j'ai pas fait assez attention à ce genre de problème
Et du coup merci pour la modification du script, par contre pourrais tu m'expliquer ce qu'est la variable spottedCam, et la valeur this. C'est une sorte de true mais pour ce type de variable ?
this correspond au script en lui-même. spottedCam contient la caméra qui a détecté le joueur (null si le joueur n'est détecté par aucune), donc seulement ce script (donc lorsque spottedCam == this) peut remettre à 2 la vitesse des ennemis.
J'aurai appris une nouvelle possibilité
Merci de ton aide, résolu.
+0
-0
Vous devez être connecté pour pouvoir poster un message.
Connexion
Pas encore inscrit ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte