Page 2 sur 4

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 18 Août 2017 14:33
par boubouk50
Humm, alors je ne vois pas trop...
Je n'aime pas trop ton CameraController_fly, il n'utilise pas le rigidbody attaché à ton perso. Mais si tu me dis qu'il fonctionne correctement avec, alors il n'y a pas de raison qu'il ne marche pas après le switch...
Peux-tu éditer ton post précédent avec le script du switch stp, tu as copier 2 fois le CameraController_fly, ou bien est-ce exactement celui de Greg du post précédent?

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 21 Août 2017 10:15
par Nattahnam
Erreur de copié/coller ! Le Switch est bien celui de Greg !

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 21 Août 2017 10:33
par boubouk50
Dans ce cas, je ne vois pas. Peut-être essayer de nous vfaire une vidéo pour qu'on se rende compte du comportement.
La prochaine étape est de coller des Debug.Log ("Mon Texte ici"); dans tes conditions pour avoir un peu plus d'infos sur où cela pourrait venir.

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 21 Août 2017 13:42
par Nattahnam
D'accord ! Merci quand même, je vais continué a chercher ! :)

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 28 Août 2017 20:43
par Greg
Je n'aime pas ton controller non plus... C'est pas juste cette ligne :

Code : Tout sélectionner

transform.position += (transform.right * Input.GetAxis("Horizontal") + transform.forward * Input.GetAxis("Vertical") + transform.up * Input.GetAxis("Depth")) * movementSpeed;
qui devrait être genre :

Code : Tout sélectionner

transform.position += new Vector3(Input.GetAxis("Horizontal") * movementSpeed, Input.GetAxis("Vertical") * movementSpeed, Input.GetAxis("Depth") * movementSpeed);
Si non, afin de vérifier dans la console si le player est bien "repoussé", tu peux essayer de rajouter ça sur le controller_fly :

Code : Tout sélectionner

    void OnCollisionEnter(Collision collision)
    {
	Debug.Log(collision.gameObject.name);
    }
si rien ne s'affiche dans la console, c'est clairement un problème de controller... tu peux essayer de rajouter :

Code : Tout sélectionner

    void Update()
    {
	Debug.Log(GetComponent<Rigidbody>().velocity);
    }

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 30 Août 2017 15:49
par Nattahnam
Hello !

Après moult recherche, j'ai la moitié de mon problème résolu !

Je peux switcher le mode de contrôle dans un sens, mais pas dans l'autre !

J'ai fais un système a deux joueur : Lorsque le jeu démarre, player1 est activer et player2 est désactiver. Lorsque je rentre dans un trigger, player1 est désactiver et player2 est activé.

Le probléme, c'est que je n'arrive pas a revenir a la condition de base (player1 activer / player2 désactiver)




DISABLEPLAYER1

Code : Tout sélectionner

 
#pragma strict


var Obj : GameObject;

function Start () {



}

function OnTriggerEnter (trigger:Collider) { if(trigger.GetComponent.<Collider>().tag=="Player1") Obj.SetActive (false); 


  DontDestroyOnLoad (gameObject);
}
 

ENABLEPLAYER2

Code : Tout sélectionner

 
#pragma strict

var Obj : GameObject;

function Start () {

Obj.SetActive(false);

}

function OnTriggerEnter (trigger:Collider) { if(trigger.GetComponent.<Collider>().tag=="Player2") Obj.SetActive (true); 


  DontDestroyOnLoad (gameObject);
}

Une idée pour inverser cela ?

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 30 Août 2017 16:14
par boubouk50
Je ne suis pas bien sur que tu aies compris le fonctionnement des triggers.
La fonction OnTriggerEnter () est appelé à chaque fois que le GameObject qui possède le script entre dans un Trigger.
Donc si tu veux switcher entre les deux, il te faut simplement activer l'autre et désactiver lui-même. Ce sera donc le même script pour les 2, il ne faut pas séparer en Activation ou désactivation.

Par contre, je n'ai pas saisi la condition: if (trigger.GetComponent.<Collider>().tag=="Player1") présente dans les 2 scripts.
A quoi sont appliqués ces scripts?
Si Player1 est désactivé, tu ne pourras pas le toucher donc activer son Collider donc vérifier cette condition. Et quand bien même, ça n'a pas de sens si Player1 se touche lui-même...

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 30 Août 2017 17:15
par Nattahnam
Les codes s'appliques sur des GameObject, pas sur Player1 / Player2.

Comment faire pour réunir les deux codes en un ?

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 30 Août 2017 18:21
par ZJP
boubouk50 a écrit :
30 Août 2017 16:14
...Si Player1 est désactivé, tu ne pourras pas le toucher donc activer son Collider donc vérifier cette condition. Et quand bien même ( :mrgreen: ) , ça n'a pas de sens si Player1 se touche lui-même...
Les Onxxx fonctionnent même avec un GO déactivé (comme tu le soupçonnais). Cela permet justement de ré-activer un GO en "sommeil".
Ces "trucs" peuvent être bénéfique, mais peuvent aussi (souvent?!) plomber les performances d'un projet vu que TOUT les GOs qui en comporte (actif ou pas) sont dans la boucle de "scrutation" d'Unity. :?

Re: [HELP] Comment switcher le mode déplacement ?

Publié : 30 Août 2017 18:38
par boubouk50
Ce sont les triggers qui envoient l'info de contact?
Tu as un trigger pour activer et l'autre pour désactiver?

Ce devrait être les persos qui doivent avoir ce code, ainsi si le trigger touché est le bon switch, hop tu bascules. Et le comme le joueur 2 bascule sur le joueur 1 (et inversement) tu n'as pas à t'embêter à savoir qui est actif ou non.

Brrr, du JS:
A mettre sur chacun de tes persos.

Code : Tout sélectionner

 
#pragma strict

function Start () {
	//Si tu dois garder ton personnage entre les niveaux mieux vaut le faire au Start ()
	DontDestroyOnLoad (gameObject);
	//Dois-tu désactiver le joueur 2 par code obligatoirement? Tu peux le mettre inactif dans la scène
	//Si par code alors
	gameObject.SetActive (gameObject.name.localeCompare("METTRE LE NOM DU JOUEUR1 ICI"));
	//Cela activera le joueur1 et désactivera le joueur2 (sauf s'ils ont le même nom...)
}

function OnTriggerEnter (trigger:Collider) {
	//Si le trigger est bien du type à switcher de perso alors on switche
	if (trigger.tag.localeCompare("NOM DU TAG DES TRIGGERS DE SWITCH")) {
		//Changer son activité revient à désactiver l'un et activer l'autre puisque chacun s'auto-gère
		gameObject.SetActive (!gameObject.activeSelf);
	}
}