Tutoriels Jeux de plateforme

part2 - Création du personnage

Partie 2 :La création du personnage

  Création du personnage   Le script de déplacement
  Partie 1 : La création du monde
  Partie 3 : Code

Création du personnage

Assurer vous que les Transform de vos objets soient tous à 0 mis à part le scale étant à 1
Créer un objet vide et nommé le Player( Create / Create Empty ).
Créer ensuite une capsule( Create / 3d Object / Capsule )
et enlever lui son son Component Collider.( dans le fenêtre Inspector le symbole :tout à droite.
Cliquer dessus et choisissez Remove Component).
Assurer vous que la capsule soit enfant de votre objet vide Player.Si vous le souhaitez ajouter d'autres objets pour créer votre personnage.

Personnellement, mon personnage va être structuré de cette manière :
(objet vide )Player
( enfant de Player- Objet vide )Mesh
( enfant de Mesh - Objet3d Capsule ) Capsule
( enfant de Mesh - Objet3d Cube ) Cube
Sur votre Player rajouter un Character Controller. Dans la fenêtre de l'Inspector cliquez sur Add Component / Physics / Character Controller.
Voila, notre personnage est créer. Nous allons commencer à le coder.

Le script de déplacement

Pour créer notre script aller sur votre dossier Script, puis faites un clic droit / Create / C# Script ou JavaScript et nommez le Move. Que vous choisissiez le C# ou le JavaScript je vous donnerai le code pour les deux. Ensuite double cliquez dessus et MonoDevelop ou Visual Studio va s'ouvrir.

//Code : C#
using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour {

	CharacterController m_CharaterController ;
	public float speedMove = 10.0f;
	float gravity ;
	public float forceJump;
	Vector3 moveUp = Vector3.zero;
	
	
	
	// Use this for initialization
	void Start ()
	{
		/*
        Si la variabme m_CharacterController n'est pas assigné
        {
            si l'objet ou ce trouve ce script possede un CharacterController
            {
                on dit alors que  m_Character prend les propriétés du CharacterController 
            }Sinon si l'objet ne possède pas de CharacterController
            {
                On dit à l'objet de posséder un CharacterController
                puis
                on dit au  m_Character de prendre les propriétés du CharacterController 
            }
        }
    */
		if (m_CharaterController == null) 
		{
			if (GetComponent < CharacterController > ())
			{
				m_CharaterController = GetComponent < CharacterController > ();
			}
			else
			{
				gameObject.AddComponent < CharacterController > ();
				m_CharaterController = GetComponent < CharacterController > ();
			}
		}
	}
	
	// Update is called once per frame
	void Update()
	{
		/*
            On utilise le GetAxisRaw car il possède les valeurs suivantes -1;0;1
            contrairement au GetAxis qui passe graduellement de 0;-0.1;-0.2;.... jusqu'à -1 et de 0;0.1;0.2.... jusqu'à 1
        */
		if (Input.GetAxisRaw("Horizontal")>0)// si on appuie sur la flèche droite du clavier ou si on dirige le joystick à droite, la valeur est à 1
		{
			MoveRight();//On execute les instructions données par la fonction MoveRight()
		}
		if (Input.GetAxisRaw("Horizontal") < 0)// si on appuie sur la flèche gauche du clavier ou si on dirige le joystick à gauche, la valeur est à -1
		{
			MoveLeft();//On execute les instructions données par la fonction MoveLeft()
		}
		//si on appuie sur rien la valeur est à 0 pour le déplacement.
		
		if (Input.GetButton("Jump"))// le bouton jump est un bouton préconfigurer dans unity, par défaut il s'agit de la barre espace. 
		{
			Jump();//On execute la fonction Jump()
		}
		
		if (!m_CharaterController.isGrounded)// si le personnage n'est pas en collision avec quelque chose
		{
			// On applique la gravité pour le rediriger vers le bas.
			gravity -= 9.81f * Time.deltaTime;//9.81 est la valeur basique de la gravité.
			//   m_CharaterController.Move(transform.up * gravity * Time.deltaTime);// On  applique la gravité à notre personnage.
			
			moveUp.y += gravity * Time.deltaTime; // on utilise la variable moveUp pour gerer notre position sur l'axeY
			
		}
		else
		{
			gravity = 0;// si on est en collision avec quelque chose nous remettons la valeur de la gravité à 0 pour être sur qu'elle ne s'applique plus à notre personnage.
		}
		
		m_CharaterController.Move(moveUp * Time.deltaTime);//On deplace le personnage en fonction de la valeur moveUp 
	}
	
	void MoveLeft()
	{
		m_CharaterController.Move(transform.right * speedMove * Time.deltaTime);//Ici nous disons à notre personnage( au CharacterController ) de ce déplacer vers la gauche
        //	transform.localScale = new Vector3(-1, 1, 1);// Ancienne méthode
        transform.eulerAngles = new Vector3(0, -180, 0);//Nous faisons porter son regard dans l'autre sens
	}
	
	void MoveRight()
	{
		m_CharaterController.Move(transform.right * speedMove * Time.deltaTime);//le CharacterController ce déplace vers la droite
		//transform.localScale = new Vector3(1, 1, 1);//  Ancienne méthode
        transform.eulerAngles = new Vector3(0, 0, 0);// direction initiale ( vers la droite )
    }
	
	void Jump () {
		if(m_CharaterController.isGrounded){ 
			moveUp.y = forceJump;
		}	
	}
	
}



//Code : JS
#pragma strict

private var m_CharaterController : CharacterController ;
var speedMove : float = 10.0f;
private var gravity : float ;
var forceJump : float;
private var moveUp : Vector3 = Vector3.zero;


          
    // Use this for initialization
    function Start ()
    {
    /*
        Si la variabme m_CharacterController n'est pas assigné
        {
            si l'objet ou ce trouve ce script possede un CharacterController
            {
                on dit alors que  m_Character prend les propriétés du CharacterController 
            }Sinon si l'objet ne possède pas de CharacterController
            {
                On dit à l'objet de posséder un CharacterController
                puis
                on dit au  m_Character de prendre les propriétés du CharacterController 
            }
        }
    */
        if (m_CharaterController == null) 
        {
            if (GetComponent. < CharacterController > ())
            {
                m_CharaterController = GetComponent. < CharacterController > ();
            }
            else
            {
                gameObject.AddComponent. < CharacterController > ();
                m_CharaterController = GetComponent. < CharacterController > ();
            }
        }
    }

    // Update is called once per frame
    function Update()
    {
        /*
            On utilise le GetAxisRaw car il possède les valeurs suivantes -1;0;1
            contrairement au GetAxis qui passe graduellement de 0;-0.1;-0.2;.... jusqu'à -1 et de 0;0.1;0.2.... jusqu'à 1
        */
        if (Input.GetAxisRaw("Horizontal")<0)// si on appuie sur la flèche droite du clavier ou si on dirige le joystick à droite, la valeur est à 1
        {
            MoveRight();//On execute les instructions données par la fonction MoveRight()
        }
        if (Input.GetAxisRaw("Horizontal") > 0)// si on appuie sur la flèche gauche du clavier ou si on dirige le joystick à gauche, la valeur est à -1
        {
            MoveLeft();//On execute les instructions données par la fonction MoveLeft()
        }
        //si on appuie sur rien la valeur est à 0 pour le déplacement.

        if (Input.GetButton("Jump"))// le bouton jump est un bouton préconfigurer dans unity, par défaut il s'agit de la barre espace. 
        {
            Jump();//On execute la fonction Jump()
        }

        if (!m_CharaterController.isGrounded)// si le personnage n'est pas en collision avec quelque chose
        {
            // On applique la gravité pour le rediriger vers le bas.
            gravity -= 9.81f * Time.deltaTime;//9.81 est la valeur basique de la gravité.
         //   m_CharaterController.Move(transform.up * gravity * Time.deltaTime);// On  applique la gravité à notre personnage.
			
			moveUp.y += gravity * Time.deltaTime; // on utilise la variable moveUp pour gerer notre position sur l'axeY
			
        }
        else
        {
            gravity = 0;// si on est en collision avec quelque chose nous remettons la valeur de la gravité à 0 pour être sur qu'elle ne s'applique plus à notre personnage.
        }
        
        m_CharaterController.Move(moveUp * Time.deltaTime);//On deplace le personnage en fonction de la valeur moveUp 
    }

    function MoveLeft()
	{
		m_CharaterController.Move(transform.right * speedMove * Time.deltaTime);//Ici nous disons à notre personnage( au CharacterController ) de ce déplacer vers la gauche
        //	transform.localScale = Vector3(-1, 1, 1);// Ancienne méthode
        transform.eulerAngles = Vector3(0, -180, 0);//Nous faisons porter son regard dans l'autre sens
	}
	
	function MoveRight()
	{
		m_CharaterController.Move(transform.right * speedMove * Time.deltaTime);//le CharacterController ce déplace vers la droite
		//transform.localScale = Vector3(1, 1, 1);//  Ancienne méthode
        transform.eulerAngles = Vector3(0, 0, 0);// direction initiale ( vers la droite )
    }
	
	function Jump () {
		if(m_CharaterController.isGrounded){ 
			moveUp.y = forceJump;
		}	
	}

Nous voila avec un personnage qui bouge et qui saute.
Mettons le maintenant en Prefab en le glissant dans le dossier Prefab.


Fin de la partie 2
  Partie 3 : Les propriétés des plateformes



  Partie 1 : La création du monde   Partie 3 : Les propriétés des plateformes

Les tutoriels que nous vous proposons