Page 3 sur 4

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

Publié : 31 Août 2017 10:41
par Nattahnam
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 ?

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

Publié : 31 Août 2017 11:00
par boubouk50
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);
	}
}

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

Publié : 31 Août 2017 11:19
par Nattahnam
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);
	}
}

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

Publié : 31 Août 2017 11:41
par boubouk50
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);
	}
}

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

Publié : 31 Août 2017 12:02
par Nattahnam
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

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

Publié : 31 Août 2017 12:51
par boubouk50
As-tu bien renseigné les variables otherPlayer?

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

Publié : 31 Août 2017 13:41
par Nattahnam
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

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

Publié : 31 Août 2017 13:48
par boubouk50
Exactement, chacun doit posséder ce script.

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

Publié : 31 Août 2017 13:53
par Nattahnam
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;
        }
    }
}

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

Publié : 31 Août 2017 14:28
par boubouk50
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.