Page 1 sur 4

[RESOLU] Comment switcher le mode déplacement ?

Publié : 16 Août 2017 14:52
par Nattahnam
Salut a tous !

Je suis nouveau sur unity, et pour les besoins d'un projet scolaire, j'ai besoin de votre aide en code !

Voila, j'ai un controller a la 1ere personne (Prefab de base de Unity), et un controller "aérien" (le personnage est sensé voler) toujours a la 1ere personne.
Mon problème, c'est que j'ignore comment opérer la transition entre les deux mode de déplacement. Celle ci doit survenir lorsque le joueur rentre en contact avec un ennemie. (Contrôle Normal > collision avec un ennemie > Contrôle Aérien )

De même, si le joueur rentre en collision avec un objet précis, il reprend le mode de déplacement normal.

Je suis débutant en code, et toute aide serait bienvenue !
J'espère que ma description est clair ^^

Merci de vos retour ! :)
 ! Message de : boubouk50
SUJET DEPLACE: Si code alors section Code

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

Publié : 16 Août 2017 17:11
par Greg
Hello :merci:

Code : Tout sélectionner

    using UnityEngine;

    public class ExampleClass : MonoBehaviour
    {

    public GameObject player;

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            Destroy(player.GetComponent<playerController1>());
            player.AddComponent<playerController2>();
        }
        else if (collision.gameObject.tag == "Wall")
        {
            Destroy(player.GetComponent<playerController2>());
            player.AddComponent<playerController1>();
        }
    }

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

Publié : 16 Août 2017 17:18
par Nattahnam
Merci pour ta réponse, je test ca ! :)

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

Publié : 17 Août 2017 13:54
par Nattahnam
J'ai testé, en vain, d'appliquer ton code !
Peut tu me l'expliquer ?

Petite précision: Mes scripts "First Person Controller" et "Camera Controller_fly" sont sur le FPSController. Est ce une erreur ? Comment dois-je mis prendre ?

Merci de ton aide en tout cas ! :)

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

Publié : 17 Août 2017 14:35
par Greg
désolé... je code en mode machine depuis 2 jours et je manque sans doute de clarté ^^

je retente et du coup... ce script est à mettre sur l'objet avec le collider du player...

Code : Tout sélectionner

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
// Assign FPSController object in the editor.
public GameObject FPSController;

// When this object enter in collision.
void OnCollisionEnter(Collision collision)
{
// Check if the tag of collided object is 'Enemy'.
if (collision.gameObject.tag == "Enemy")
{
// Destroy FirstPersonController script and add CameraController_fly script on FPSController object.
Destroy(FPSController.GetComponent<FirstPersonController>());
FPSController.AddComponent<CameraController_fly>();
}
// Check if the tag of collided object is 'Wall'.
else if (collision.gameObject.tag == "Wall")
{
// Destroy CameraController_fly script and add FirstPersonController script on FPSController object.
Destroy(FPSController.GetComponent<CameraController_fly>());
FPSController.AddComponent<FirstPersonController>();
}
} 

j'espère ça va aller,moi j'vais m'pieuter! ^^

:merci:

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

Publié : 17 Août 2017 15:12
par Nattahnam
Merci pour ta rapidité !

Le code semble impeccable (merci pour les commentaires, très utiles !)
Cependant cela ne fonctionne toujours pas...

Surement quelque chose que je fais mal !

Merci en tout cas ! :)


[EDIT]

Cela fonctionne ! Cependant, une fois que le player entre en collision avec l'Enemy, le player s'envole sans s'arrêter, impossible de le contrôler normalement !
Une idée ?

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

Publié : 17 Août 2017 16:40
par boubouk50
Ton script (et donc Component) s'apelle bien CameraController_fly avec la même orthographe et majuscules?

Il s'envole sans s'arrêter, ça veut dire quoi exactement? Tu n'as pas les inputs?

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

Publié : 17 Août 2017 17:05
par Nattahnam
Oui c'est bien la même chose !

Le personnage se fait "repoussé" indéfiniment une fois qu'il rentre en collision avec l'objet "enemy". Je peux bouger, mais cela ne compense pas la force exercer de base par la collision..

Je sais que je ne suis pas clair, désolé je suis un nouveau sur Unity et j'essai de comprendre tout ca ^^

Les inputs ?


Voila mon script CameraController_fly


>>>>

Code : Tout sélectionner

using UnityEngine;

public class CameraController_fly : MonoBehaviour {

	private static float movementSpeed = 1.0f;

	void Update () {
		movementSpeed = Mathf.Max(movementSpeed += Input.GetAxis("Mouse ScrollWheel"), 0.0f);
		transform.position += (transform.right * Input.GetAxis("Horizontal") + transform.forward * Input.GetAxis("Vertical") + transform.up * Input.GetAxis("Depth")) * movementSpeed;
		transform.eulerAngles += new Vector3(-Input.GetAxis("Mouse Y"), Input.GetAxis("Mouse X"), Input.GetAxis("Rotation"));
	}
}
>>>>


Le script qui gère le "switch" entre les 2 modes de contrôle :

>>>>

Code : Tout sélectionner


using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;

public class Switch : MonoBehaviour
{
	// Assign FPSController object in the editor.
	public GameObject FPSController;

	// When this object enter in collision.
	void OnCollisionEnter(Collision collision)
	{
		// Check if the tag of collided object is 'Enemy'.
		if (collision.gameObject.tag == "Enemy")
		{
			// Destroy FirstPersonController script and add CameraController_fly script on FPSController object.
			Destroy(FPSController.GetComponent<FirstPersonController>());
			FPSController.AddComponent<CameraController_fly>();
		}
		// Check if the tag of collided object is 'Body'.
		else if (collision.gameObject.tag == "Body")
		{
			// Destroy CameraController_fly script and add FirstPersonController script on FPSController object.
			Destroy(FPSController.GetComponent<CameraController_fly>());
			FPSController.AddComponent<FirstPersonController>();
		}
	}
}

Encore merci de prendre du temps pour m'aider, je me doute que je ne suis pas une fléche en code ^^

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

Publié : 17 Août 2017 17:32
par boubouk50
Est-ce que ta classe CameraController_fly est fonctionnelle? Je veux dire l'as-tu testée avant de faire le switch? Fonctionnait-elle correctement? -> Pour tester, remplace le FirstPersonController par ton CameraController_fly.
Il y a possibilité de conflit entre ce script (qui modifie la position) et le RigidBody (qui utilise les forces physiques). je veux juste m'assurer que le problème ne se situe pas avant le switch (qui à l'air bon).

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

Publié : 18 Août 2017 13:02
par Nattahnam
La CameraController_fly fonctionne correctement !