Tutoriels Jeux de plateforme

part6 - La vie

Partie 6 : la vie

  Création du scripts Life   Script Life   Ajout d'intéractivité   Bonus vie   Script Generateur de bonus vie   Création du bonus vie   Intéraction avec le bonus vie
  Partie 1 : La création du monde   Partie 2 : La création du personnage   Partie 3 : Les plateformes   Partie 4 : Intéractions plateformes   Partie 5 : La caméra

Création du scripts Life

Créer votre scripts C# ou JavaScript. et nommez le Life et ajouter le à votre prefab Player.


Script Life

//Code c#
using UnityEngine;
using System.Collections;

public class Life : MonoBehaviour {


	public int maxLife  = 3; // point de vie maximal
	public int currentLife; // vie actuel
	
	// au lancement notre vie actuel est egale à notre vie maximale
	void Start () {
		currentLife = maxLife;
	}
	
	// si on reçoit des dégats, ils sont amputé de notre vie actuelle. 
	void LosePointLife (int dammage){
		currentLife-=dammage; 
	}

	// si on reçoit des points de vie, ils sont ajoutés de notre vie actuelle.
	void GetPointLife (int pointLife ){
		currentLife+=pointLife;
	}



	void Update () {
		// si notre vie est inférieur ou egale à zero alors on a perdu la partie
		if ( currentLife < = 0 )
		{
			currentLife = 0;
            //Load GameOver
		}
		/* si notre vie actuel est supérieur ou égale
         à notre vie maximale alors elle est égale à notre vie maximale
         */
		if ( currentLife >= maxLife ) 
		{
			currentLife = maxLife;
		}
	}
}
// code : JS
#pragma strict
var maxLife : int = 3;// point de vie maximal
var currentLife : int;// vie actuel

// au lancement notre vie actuel est egale à notre vie maximale
function Start () {
	currentLife = maxLife;
}

// si on reçoit des dégats, ils sont amputé de notre vie actuelle. 
function LosePointLife (dammage : int){
	currentLife-=dammage*Time.deltaTime;
}

// si on reçoit des points de vie, ils sont ajoutés de notre vie actuelle.
function GetPointLife (pointLife : int){
	currentLife+=pointLife*Time.deltaTime;
}

function Update () {
	// si notre vie est inférieur ou egale à zero alors on a perdu la partie
	if ( currentLife < = 0 )
	{
		currentLife = 0;
        //Load GameOver
	}
	/* si notre vie actuel est supérieur ou égale
    à notre vie maximale alors elle est égale à notre vie maximale
    */
	if ( currentLife > = maxLife )
	{
		currentLife = maxLife;
	}
}

Ajout d'intéraction

Maintenant que nous avons notre script Life, nous allons pouvoir rajouter une intéraction avec notre personnage. Retournez dans votre scripts Interactions et rajouter ceci dans l'Update :


//Code C#
if ( transform.position.y < = -6 ){
    gameObject.SendMessage("LosePointLife",1, SendMessageOptions.DontRequireReceiver);
    transform.position = new Vector3(0,0.815,0);
}
                                    

//Code JS
if ( transform.position.y < = -6 ){
    gameObject.SendMessage("LosePointLife",1, SendMessageOptions.DontRequireReceiver);
    transform.position = Vector3(0,0.815,0);
}
                                    

Bonus vie

Nous allons désormais mettre en place le moyen de gagné des points de vie :

  • Création du générateur de point de vie

Créer un objet vide et nommez le BonusPointGenerator, ensuite mettez lui un Cube en enfant et enlevez lui son Component Collider pour le mettre sur le parent.
Créer ensuite un script CreateBonusLife :


Script CreateBonusLife

//C# script
using UnityEngine;
using System.Collections;

public class CreateBonusLife : MonoBehaviour {
	RaycastHit hit;
	public GameObject bonus;
	int canCreate;// limit la creation du bonus
	public bool infinite;//si l'on souhaite pouvoir recreer à l'infini un bonus
	
	// Update is called once per frame
	void Update ()
	{
		//si on detecte le Player on active la creation du bonus
		if ( Physics.Raycast( transform.position, -Vector3.up, out hit, 2)) 
		{
			if ( hit.collider.gameObject.name == "Player")
			{
				if ( canCreate == 0 )
				{
					CreateBonus();
				}else
				{
					if (infinite ) canCreate = 0;
				}
			}
		}
	}

		void CreateBonus ()
	{
		Instantiate (bonus, transform.position, Quaternion.identity);
		canCreate++;

	}
}
//JS script
#pragma strict
	private var hit : RaycastHit ;
	var bonus : GameObject ;
	private var canCreate : int ;// limit la creation du bonus
	var infinite : boolean ;//si l'on souhaite pouvoir recreer à l'infini un bonus
	function Update ()
	{
		//si on detecte le Player on active la creation du bonus
		if ( Physics.Raycast( transform.position, -Vector3.up, hit, 2)) 
		{
			if ( hit.collider.gameObject.name == "Player")
			{
				if ( canCreate == 0 )
				{
					CreateBonus();	
				}
			}
		}else
		{
			if ( infinite) canCreate = 0;
		}
	}

	function CreateBonus ()
	{
		Instantiate (bonus, transform.position, Quaternion.identity);
		canCreate++;
	}

Pour éviter quelques soucis ( des problème de collision entre notre générateur et notre bonus). Nous allons ajouter à notre generateur de bonus un Layer. Pour cela dans l'inspacteur cliquez sur Layer / Add Layer

Tuto_Plateforme_08

Ce qui vous ouvrira cette fenêtre : Tuto_Plateforme_09

Inscrivez donc un nom pour le nouveau Layer : generatorBonus, puis re-sélectionner votre objet et assigné lui son Layer. (Layer / generatorBonus). Une fois ceci fait, Allez dans la barre de Menu en haut : Edit/ProjectSettings/Physics. Tuto_Plateforme_10

une nouvelle fenêtre s'affichera au noveau de l'Inspector et décocher la case de notre generatorBonus comme encadré sur l'image : Tuto_Plateforme_11

De cette manière, generatorBonus ne prend pas en compte la collision si il est en contact avec un autre generatorBonus.


Création du bonus de vie


Créer un objet vide et nommer le BonusLife.
Mettez lui en enfant une sphere et enlever à cette sphere son collider.
Sur BonusLife, ajouter un CharaterController et dans les paramètres du CharacterController, mettez son height à 1.
Créer un script et nommez le BonusLife, assignez-le à votre objet et glisser le dans le dossier Prefab. Ensuite, supprimez-le de votre scene
N'oubliez pas de re-selectionner votre prefab et d'assigner le champ BonusLife du script. Assignez lui aussi le layer generatorBonus, comme expliqué précédemment.

Code du script BonusLife

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

public class bonusLife : MonoBehaviour {
	CharacterController m_CharaterController;
	public Vector3 force;
	float gravity;

	// Use this for initialization
	void Start () {
		if (m_CharaterController == null)
		{
			if(GetComponent < CharacterController > ())
			{
				m_CharaterController = GetComponent < CharacterController > ();
			}else
			{
				m_CharaterController = gameObject.AddComponent < CharacterController > ();
			}
		}

		m_CharaterController.height = 1;
	}
	
	// Update is called once per frame
	void Update ()
	{
		gravity -= 9.81f * Time.deltaTime;
		force.y += gravity * Time.deltaTime;
		m_CharaterController.Move (force * Time.deltaTime);

		if (transform.position.y < = -6)
			Destroy (gameObject);
	}
}
//JS
#pragma strict
	private var m_CharaterController : CharacterController ;
	var force : Vector3;
	private var gravity :float;
	
	function Start () {
		if (m_CharaterController == null) // on assigne un CharacterController si ce n'est pas le cas
		{
			if(GetComponent. < CharacterController > ())
			{
				m_CharaterController = GetComponent. < CharacterController > ();
			}else
			{
				m_CharaterController = gameObject.AddComponent. < CharacterController > ();
			}
		}

		m_CharaterController.height = 1;//on met la grandeur du collider à 1
	}
	
	function Update ()
	{
		gravity -= 9.81f * Time.deltaTime;
		force.y += gravity * Time.deltaTime;
		m_CharaterController.Move (force * Time.deltaTime);// on applique la gravité

		if (transform.position.y < = -6) // si le bonus tombe trop bas on le détruit.
		{
			Destroy (gameObject);
		}
	}

Ajout d'intéraction

Retourner sur le script d'interaction et rajouter ceci en dessous de l'Update :
//C#
    void OnControllerColliderHit ( ControllerColliderHit hit )
	{
		if (hit.collider.gameObject.name == "bonusLife")//si l'on touche un bonus de vie
		{
			gameObject.SendMessage("GetPointLife",1, SendMessageOptions.DontRequireReceiver);//on gagne 1 point de vie
			Destroy(hit.collider.gameObject);// et on detruit le bonus de vie
		}
	}
    
//Js
    function OnControllerColliderHit ( hit : ControllerColliderHit )
	{
		if (hit.collider.gameObject.name == "bonusLife")//si l'on touche un bonus de vie
		{
			gameObject.SendMessage("GetPointLife",1, SendMessageOptions.DontRequireReceiver);//on gagne 1 point de vie
			Destroy(hit.collider.gameObject);// et on detruit le bonus de vie
		}
	}
    


Fin de la partie 6
  Partie 7 : Les ennemies


  Partie 1 : La création du monde   Partie 2 : La création du personnage   Partie 3 : Les plateformes   Partie 4 : Intéractions plateformes   Partie 5 : La caméra

Les tutoriels que nous vous proposons