Sauvegarde entre 2 niveau

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Sauvegarde entre 2 niveau

Message par cayou66 » 29 Fév 2012 03:14

L'idée pour déporter tes variables est de créer un script "static", comme par exemple
(JS, je suppose...)

Code : Tout sélectionner

static var niveauJoueur : int = 1;
Tu vires tout le reste du script JS, tu créés juste des variables statiques, celles que tu souhaites garder à travers tes niveaux.

Ce script là tu ne le met sur aucun objet, et pour accéder à ces valeurs et les mettre à jour depuis n'importe quel autre script tu fais (par exemple, le nom du script est fictif):

Code : Tout sélectionner

MonScriptStatique.niveauJoueur = 2;
Maintenant que ça c'est ok, tu termine par rajouter une ligne à un de tes scripts de ta 1ere scène, genre celui qui affiche le menu.

Code : Tout sélectionner

DontDestroyOnLoad(MonScriptStatique);
De cette manière, toutes les variables statiques contenues dedans existeront au travers des niveaux.
Ceci dit, ce n'est pas une sauvegarde, si tu relances le jeu, tout sera remit à zéro.
Voilà, je t'ai tout expliqué, tu as toutes les cartes en main pour réussir ce que tu demandes.


cAyou.

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Sauvegarde entre 2 niveau

Message par Freelax » 29 Fév 2012 04:05

pas mieux ..+1
Image

Avatar de l’utilisateur
Loulou
Messages : 239
Inscription : 23 Nov 2011 01:04
Localisation : Paris
Contact :

Re: Sauvegarde entre 2 niveau

Message par Loulou » 29 Fév 2012 12:35

Il me semble que le DontDestroyOnLoad() n'est pas necessaire pour garder des variables static.
Mais n'embrouillons pas Tony 1923.
Normalement, avec ce que vient de te donner Cayou, tu as tous ce qu'il faut pour avoir des variables partage d'une scene a l'autre.
ok, quand je dis "téléporte", je veux dire entre deux scènes, mais variables sont affichées, elles donnent le niveau de santé et les points gagnés.
Pense a verifier aussi que dans la seconde scene tu as bien toujours un script qui fait l'affichage de tes variables. Tu peux encore avoir tes variable en memoire mais ne plus avoir de script qui les affiche.

Tony 1923
Messages : 83
Inscription : 22 Août 2011 16:48
Localisation : sur Toulouse
Contact :

Re: Sauvegarde entre 2 niveau

Message par Tony 1923 » 29 Fév 2012 16:03

donc, voici, le code tel quel sans les static var

Code : Tout sélectionner

var hitPoints=20;
var fireRate = 0.5;
var impact:GameObject;
var canFire = true;
var damageHit:float=4;



var shootSound:AudioClip;


private var gainPoints = 0;

private var menuScore:GameObject;
menuScore=GameObject.Find("ScorePoints");

private var hitPointsScore:GameObject;
hitPointsScore=GameObject.Find("ScoreHitPoints");

menuScore.GetComponent(GUIText).text="Score : "+gainPoints;
hitPointsScore.GetComponent(GUIText).text="PV : "+hitPoints;

function ApplyPoints(points:float){
	gainPoints=gainPoints+points;
	menuScore.GetComponent(GUIText).text="Kill : "+gainPoints;
}


function makeDamage(damage:float){
	hitPoints+=damage;
	hitPointsScore.GetComponent(GUIText).text="PV :"+hitPoints;
	
	if(hitPoints<=0){
		Application.LoadLevel(1);
	}
}

function Update () {
	if(Input.GetButton("Fire1")){
	fire();
	if (gainPoints>=1000){
		Application.loadLevel(3);
	}
	}
}

function fire(){
	if (canFire==true){
		canFire=false;
		FireOneShot();
	}
}

function FireOneShot(){
	audio.PlayOneShot(shootSound);
	
	var direction=transform.TransformDirection(Vector3.forward);
	var hit:RaycastHit;
	
	if(Physics.Raycast(transform.position,direction,hit,100)){
	
	tempRot=Quaternion.FromToRotation(Vector3.up,hit.normal);
	
	Instantiate(impact,hit.point,tempRot);
	
	if (hit.rigidbody){
	hit.rigidbody.AddForce(400*direction);
	}
	
	hit.collider.SendMessageUpwards("makeDamage",damageHit,SendMessageOptions.DontRequireReceiver);
	
}
	yield WaitForSeconds(fireRate);
	canFire=true;
	
}
Un jour un ami m'a dit : "Attrape ton courage à deux main et affronte ton destin"
"Tout est en haut , Tout est en bas, Tout l'est."

Avatar de l’utilisateur
Loulou
Messages : 239
Inscription : 23 Nov 2011 01:04
Localisation : Paris
Contact :

Re: Sauvegarde entre 2 niveau

Message par Loulou » 29 Fév 2012 17:14

Essai avec ca :

Code : Tout sélectionner

var hitPoints=20;
var fireRate = 0.5;
var impact:GameObject;
var canFire = true;
var damageHit:float=4;
var shootSound:AudioClip;

private var gainPoints = 0;
private var menuScore:GameObject;
private var hitPointsScore:GameObject;

function Start() {
	hitPointsScore=GameObject.Find("ScoreHitPoints");
	hitPointsScore.GetComponent(GUIText).text="PV : "+hitPoints;
	DontDestroyOnLoad(hitPointsScore);

	menuScore=GameObject.Find("ScorePoints");
	menuScore.GetComponent(GUIText).text="Score : "+gainPoints;
	DontDestroyOnLoad(menuScore);

	DontDestroyOnLoad(this.gameObject);
}

function ApplyPoints(points:float) {
   gainPoints=gainPoints+points;
   menuScore.GetComponent(GUIText).text="Kill : "+gainPoints;
}

function makeDamage(damage:float) {
   hitPoints+=damage;
   hitPointsScore.GetComponent(GUIText).text="PV :"+hitPoints;
   
   if(hitPoints<=0){
      Application.LoadLevel(1);
   }
}

function Update () {
   if(Input.GetButton("Fire1")) {
	   fire();
	   if (gainPoints>=1000){
		  Application.loadLevel(3);
	   }
   }
}

function fire(){
   if (canFire==true){
      canFire=false;
      FireOneShot();
   }
}

function FireOneShot(){
	audio.PlayOneShot(shootSound);

	var direction=transform.TransformDirection(Vector3.forward);
	var hit:RaycastHit;

	if(Physics.Raycast(transform.position,direction,hit,100)){
		tempRot=Quaternion.FromToRotation(Vector3.up,hit.normal);
		Instantiate(impact,hit.point,tempRot);
		if (hit.rigidbody){
			hit.rigidbody.AddForce(400*direction);
		}
		hit.collider.SendMessageUpwards("makeDamage",damageHit,SendMessageOptions.DontRequireReceiver);

	}
	yield WaitForSeconds(fireRate);
	canFire=true;
}

Tony 1923
Messages : 83
Inscription : 22 Août 2011 16:48
Localisation : sur Toulouse
Contact :

Re: Sauvegarde entre 2 niveau

Message par Tony 1923 » 29 Fév 2012 17:18

ok, merci j'y vais de-suite

[edit] bon j'ai essayé, pour la sauvegarde des variables, ça marche, mais, lorsque j'arrive sur ma 2nde scène, mon boss (c'est un test), ne se déplace plus et ne meurt plus.
Un jour un ami m'a dit : "Attrape ton courage à deux main et affronte ton destin"
"Tout est en haut , Tout est en bas, Tout l'est."

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Sauvegarde entre 2 niveau

Message par cayou66 » 29 Fév 2012 17:55

Il me semble que le DontDestroyOnLoad() n'est pas necessaire pour garder des variables static.
A vrai dire, je n'ai jamais essayé...:D Tu as sans doute raison ^^

Tony 1923
Messages : 83
Inscription : 22 Août 2011 16:48
Localisation : sur Toulouse
Contact :

Re: Sauvegarde entre 2 niveau

Message par Tony 1923 » 29 Fév 2012 18:04

euh, voici la démo, pour voir si vous comprenez (ce n'est qu'un test) :

http://www.mediafire.com/?kcsle7je6n4daru (c'est pour windows)
Un jour un ami m'a dit : "Attrape ton courage à deux main et affronte ton destin"
"Tout est en haut , Tout est en bas, Tout l'est."

Avatar de l’utilisateur
Freelax
Messages : 1595
Inscription : 30 Déc 2009 23:02
Localisation : Niort
Contact :

Re: Sauvegarde entre 2 niveau

Message par Freelax » 29 Fév 2012 20:31

Il me semble que le DontDestroyOnLoad() n'est pas necessaire pour garder des variables static.

A vrai dire, je n'ai jamais essayé...:D Tu as sans doute raison ^^
Non pas nécessaire mais mieux quand même ...
Image

Répondre

Revenir vers « Unity le logiciel »