[RESOLU] Comment switcher le mode déplacement ?

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Nattahnam
Messages : 18
Inscription : 31 Mars 2017 16:26

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

Message par Nattahnam » 31 Août 2017 10:41

Ce sont les Triggers qui envoies les infos de contact, et effectivement j'ai un Trigger pour activer et un autre pour désactiver !

Code : Tout sélectionner

#pragma strict

function start () 
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	if (trigger.tag.localeCompare("Enemy")) 
	{
		gameObject.SetActive (!gameObject.activeSelf);
	}
}
Lorsque j'écrit ce code, j'ai l'erreur suivante :

" Assets/Scripts/TEST.js(11,26): BCE0019: 'localeCompare' is not a member of 'String'. "

Peux tu m'expliquer comment marche le localeCompare ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 31 Août 2017 11:00

Documentation localeCompare: https://msdn.microsoft.com/fr-fr/librar ... s.94).aspx
C'est une fonction de String pour comparer 2 chaînes de caractères. C'est juste plus propre que le ==, mais si ça ne marche pas, vu mes connaissances en Js, remplace le par un ==...

Donc tu as bien 2 types de triggers? Il faut donc vérifier quel trigger est touché? C'est à dire que si le joueur1 touche un trigger "Activé" alors il ne se passe rien, mais s'il touche un "Désactivé" alors il passe au joueur2, et inversement?
Est-ce que les 2 joueurs sont au même endroit à tout moment? --> Les triggers s'activeraient donc au même moment.

Si c'est le cas, ça change un peu la façon de voir la chose...

Code : Tout sélectionner

#pragma strict

function start () 
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	//Dans le cas d'un trigger d'activation du joueur2
	if (trigger.name == "NOMDUTRIGGERACTIVATION") ) 
	{
		//Si le joueur 1 est actif (et donc le 2 inactif)
		if ((gameObject.name == "NOMDUPLAYER1" && gameObject.activeSelf) || (gameObject.name == "NOMDUPLAYER2" && !gameObject.activeSelf))
			gameObject.SetActive (!gameObject.activeSelf);
	}
	//Dans le cas d'un trigger de désactivation du joueur2
	if (trigger.name == "NOMDUTRIGGERDESACTIVATION") 
	{
		//Si le joueur 1 est inactif (et donc le 2 actif)
		if ((gameObject.name == "NOMDUPLAYER1" && !gameObject.activeSelf) || (gameObject.name == "NOMDUPLAYER2" && gameObject.activeSelf))
			gameObject.SetActive (!gameObject.activeSelf);
	}
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nattahnam
Messages : 18
Inscription : 31 Mars 2017 16:26

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

Message par Nattahnam » 31 Août 2017 11:19

C'est exactement ca, deux type de trigger !
Et les player ne sont pas au même endroit au même moment !

Ton code fonctionne et je t'en remercie grandement ! Cependant, le switch ne marche toujours que dans un sens :
Player1 > Trigger1 >Player2

Mais lorsque

Player2 > Trigger2 > Rien ne se passe !

Code : Tout sélectionner

#pragma strict

function start () 
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	//Dans le cas d'un trigger d'activation du joueur2
	if (trigger.name == ("EnemyTriggerFly") ) 
	{
		//Si le joueur 1 est actif (et donc le 2 inactif)
		if ((gameObject.name == "FPScontroller" && gameObject.activeSelf) || (gameObject.name == "FPSfly" && !gameObject.activeSelf))
			gameObject.SetActive (!gameObject.activeSelf);
	}
	//Dans le cas d'un trigger de désactivation du joueur2
	if (trigger.name == ("BodyTriggerWalk")) 
	{
		//Si le joueur 1 est inactif (et donc le 2 actif)
		if ((gameObject.name == "FPScontroller" && !gameObject.activeSelf) || (gameObject.name == "FPSfly" && gameObject.activeSelf))
			gameObject.SetActive (!gameObject.activeSelf);
	}
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 31 Août 2017 11:41

Oui, je pensais que tes personnages étaient superposés, mais s'il ne le sont pas il va falloir donc ajouter quelques petits ingrédients notamment que chacun influe sur l'autre, alors qu'avant chacun était indépendant.

Code : Tout sélectionner

#pragma strict

//Si joueur1 alors renseigner Joueur2, et inversement
var otherPlayer : gameObject;

function start () 
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	//Dans le cas d'un trigger d'activation du joueur2
	if (trigger.name == ("EnemyTriggerFly") ) 
	{
		//Si le joueur 1 est actif
		if ((gameObject.name == "FPScontroller" && gameObject.activeSelf) {
			gameObject.SetActive (false);
			otherPlayer.SetActive (true);
		}
	}
	//Dans le cas d'un trigger de désactivation du joueur2
	if (trigger.name == ("BodyTriggerWalk")) 
	{
		//Si le joueur 2 est actif)
		if ((gameObject.name == "FPSfly" && gameObject.activeSelf))
			gameObject.SetActive (false);
			otherPlayer.SetActive (true);
	}
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nattahnam
Messages : 18
Inscription : 31 Mars 2017 16:26

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

Message par Nattahnam » 31 Août 2017 12:02

Toujours le même probléme, je peux passer du player1 au player2, mais pas l'inverse ..
De plus ils sont toujours indépendants !

Code : Tout sélectionner

#pragma strict

var otherPlayer : GameObject;

function start ()
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	if (trigger.name == ("EnemyTriggerFly"))
	{
		if ((gameObject.name == "FPScontroller" && gameObject.activeSelf)) 
		{
			gameObject.SetActive (!gameObject.activeSelf);
			otherPlayer.SetActive (!otherPlayer.activeSelf);
		}
	}

	if (trigger.name == ("BodyTriggerWalk"))
	{
		if ((gameObject.name == "FPSfly" && gameObject.activeSelf))
		{ gameObject.SetActive (!gameObject.activeSelf);
			otherPlayer.SetActive (!otherPlayer.activeSelf);
		}
	}
}
Merci de l'aide encore une fois

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 31 Août 2017 12:51

As-tu bien renseigné les variables otherPlayer?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nattahnam
Messages : 18
Inscription : 31 Mars 2017 16:26

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

Message par Nattahnam » 31 Août 2017 13:41

Le code s'applique sur les deux player c'est bien ca ?
Et pour le player 1, j'indique dans le gameObject player 2 et inversement ?
Et de base je désactive player 2

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 31 Août 2017 13:48

Exactement, chacun doit posséder ce script.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Nattahnam
Messages : 18
Inscription : 31 Mars 2017 16:26

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

Message par Nattahnam » 31 Août 2017 13:53

J'ai bien fait comme cela...
Le problème reste le même, le changement du Player2 au Player1 se s'applique pas quand je rentre dans le BodyTriggerWalk.



Peut être qu'un code en C# fonctionnerait mieux, tu y semble plus a l'aise que sur Java

Code : Tout sélectionner

#pragma strict

var otherPlayer : GameObject;

function start ()
{
	DontDestroyOnLoad (gameObject);
}

function OnTriggerEnter (trigger:Collider)
{
	if (trigger.name == ("EnemyTriggerFly"))
	{
		if ((gameObject.name == "FPScontroller" && gameObject.activeSelf)) 
		{
			gameObject.SetActive (!gameObject.activeSelf);
			otherPlayer.SetActive (!otherPlayer.activeSelf);
		}
	}

	if (trigger.name == ("BodyTriggerWalk"))
	{
		if ((gameObject.name == "FPSfly" && gameObject.activeSelf))
		{ 
			gameObject.SetActive (!gameObject.activeSelf);
			otherPlayer.SetActive (!otherPlayer.activeSelf);
		}
	}
}
Voici mon code pour le Player2, le pb vient peut être de la :

Code : Tout sélectionner

using UnityEngine;

[RequireComponent(typeof(Camera))]
public class GhostFreeRoamCamera : MonoBehaviour
{
    public float initialSpeed = 10f;
    public float increaseSpeed = 1.25f;

    public bool allowMovement = true;
    public bool allowRotation = true;

	public KeyCode forwardButton = KeyCode.Z;
	public KeyCode backwardButton = KeyCode.S;
    public KeyCode rightButton = KeyCode.D;
	public KeyCode leftButton = KeyCode.Q;

    public float cursorSensitivity = 0.025f;
    public bool cursorToggleAllowed = true;
    public KeyCode cursorToggleButton = KeyCode.Escape;

    private float currentSpeed = 0f;
    private bool moving = false;
    private bool togglePressed = false;

    private void OnEnable()
    {
        if (cursorToggleAllowed)
        {
            Screen.lockCursor = true;
            Cursor.visible = false;
        }
    }

    private void Update()
    {
        if (allowMovement)
        {
            bool lastMoving = moving;
            Vector3 deltaPosition = Vector3.zero;

            if (moving)
                currentSpeed += increaseSpeed * Time.deltaTime;

            moving = false;

            CheckMove(forwardButton, ref deltaPosition, transform.forward);
            CheckMove(backwardButton, ref deltaPosition, -transform.forward);
            CheckMove(rightButton, ref deltaPosition, transform.right);
            CheckMove(leftButton, ref deltaPosition, -transform.right);

            if (moving)
            {
                if (moving != lastMoving)
                    currentSpeed = initialSpeed;

                transform.position += deltaPosition * currentSpeed * Time.deltaTime;
            }
            else currentSpeed = 0f;            
        }

        if (allowRotation)
        {
            Vector3 eulerAngles = transform.eulerAngles;
            eulerAngles.x += -Input.GetAxis("Mouse Y") * 359f * cursorSensitivity;
            eulerAngles.y += Input.GetAxis("Mouse X") * 359f * cursorSensitivity;
            transform.eulerAngles = eulerAngles;
        }

        if (cursorToggleAllowed)
        {
            if (Input.GetKey(cursorToggleButton))
            {
                if (!togglePressed)
                {
                    togglePressed = true;
                    Screen.lockCursor = !Screen.lockCursor;
                    Cursor.visible = !Cursor.visible;
                }
            }
            else togglePressed = false;
        }
        else
        {
            togglePressed = false;
            Cursor.visible = false;
        }
    }

    private void CheckMove(KeyCode keyCode, ref Vector3 deltaPosition, Vector3 directionVector)
    {
        if (Input.GetKey(keyCode))
        {
            moving = true;
            deltaPosition += directionVector;
        }
    }
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 31 Août 2017 14:28

Je ne vais pas faire tes tests à distances quand même, il faut aussi que tu apprennes à te débrouiller tout seul, sans les roulettes ;-) .

Le Debug.Log (). Tu en mets dans tes boucles voir si tu passes dedans, déjà. Parce que si ça se trouve le code marche bien, mais autre chose masque ton gameObject.
Ce qui est bien avec le Debug.Log () c'ets que tu peux afficher les valeurs de ce que tu veux. Par exemple, le nom du trigger, si ça se trouve il y a une faute d'orthographe ou une majsucule, etc.
Fais les tests nécessaires, stp.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Verrouillé

Revenir vers « (Js) Javascript »