Page 1 sur 2

[RESOLU] MY-AL Appliqué une fonction une fois

Publié : 08 Fév 2017 22:55
par Unity911
Bonsoir j'ai crée un script mais je voudrais que la fonction ApplyDamage
augmente les stats de l'ennemie une fois.
Parce que a chaque balle qu'il recoit les stats augmente et l'ennemie se transforme en superman

Code : Tout sélectionner

#pragma strict

var Distance : float;
var Target : Transform;
var lookAtDistance : float = 20;
var chaseRange : float = 10;
var attackRange : float = 2.2;
var moveSpeed : float = 3;
var Damping : float = 6;
var attackRepeatTime : float = 1;

var damage : float = 10;

private var attackTime : float;

var controller : CharacterController;
var gravity : float = 20;

private var moveDirection : Vector3 = Vector3.zero;



function Start () {
attackTime = Time.time;
FindHealth();
}



function Update () {
Distance = Vector3.Distance(Target.position, transform.position);
if (Distance < lookAtDistance){
lookAt();
}

if (Distance < attackRange){
attack();
}

else if (Distance < chaseRange){
chase();
}
}



function lookAt (){
var rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation,Time.deltaTime * Damping);
}



function chase() {
GetComponent.<Animator>().Play("creature1run");
moveDirection = transform.forward;
moveDirection *= moveSpeed;
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}



function attack() {
if (Time.time > attackTime){
GetComponent.<Animator>().Play("creature1Attack2");
Target.SendMessage("PlayerDamage", damage);
Debug.Log ("The enemy has attacked");
attackTime = Time.time + attackRepeatTime;
}
}



function ApplyDamage(){
chaseRange += 15;
moveSpeed += 2;
lookAtDistance += 20;
}



function FindHealth(){
Target = GameObject.Find("Player").GetComponent(HealthScript).transform;
}

Re: MY-AL Appliqué une fonction une fois

Publié : 08 Fév 2017 23:05
par Unity911
en gros je voudrais savoir dire au script "fait ça une fois"
mais je ne sais pas comment le faire :(

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 10:59
par Iwa
Bien le bonjour,

La solution la plus "'simple" que je vois c'est de créer un booléen qui sert de drapeau (en gros il est à false tant que tu as pas appelé ta fonction ApplyDamage) et dans ta fonction ApplyDamage tu passes ce fameux booléen à true.

Au moment où tu veux l'appeler (je sais pas quand) il faut tester si ton booléen est à true ou false. Si il est à false, tu peux appeler ta fonction, sinon tu ne peux pas.

Voilà :)

P.S : Sinon tu peux éditer ton post quand tu veux rajouter des choses en cliquant sur la première icone du message en haut à droite :)

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 13:19
par Unity911
non sa ne fonctionnerait pas.
enfaite la function ApplyDamage et appeler par a autre script de collisions Raycast(balle)
et l'autre script dis cas chaque collision:

Code : Tout sélectionner

hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
avec une boolean il passerait sur true a chaque balle donc sa ne changerait rien.
je voudrais que cette fonction ce joue une seule fois.
Sans modifier le script de raycast car autre fonction ApplyDamage pour les vies de l'ennemie.

La fonction ApplyDamage s'accumule a chaque appel du raycast
or je voudrais augmenter les stats de l'ennemie seulement une fois et pas a chaque balle reçut

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 13:39
par Moi 1971
Bonjour,
Il te faut utiliser un booléen!

Code : Tout sélectionner

#pragma strict
....



Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 13:57
par Unity911
...

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 14:20
par boubouk50
Vous vous calmez, s'il vous plaît!
C'est pas la récré ici!

@Unity911: Si tu débutes en scripting, écoute ce que les gens te disent: si tu veux que ton script ne se joue qu'une seule fois, il te faut faire une condition pour le déterminer. Cette condition à besoin de 2 états: 1e fois = oui ou non? donc elle a besoin d'un booléen.
Aussi, merci de faire des efforts sur l'orthographe, dyslexie ou pas. Aujourd'hui, il existe des aides en ligne pour cela, tel http://bonpatron.com/, j'ai testé avec ton texte, il te montre 90% des erreurs.

@Moi1971: Encore entrain d'embêter les membres à l'écriture affreuse? Je ne sais pas ce que tu as écrit pour l'agacer comme cela, mais je te prierai de faire l'effort également de ne pas être agressif. Les efforts doivent être fait des deux côtés: relecture pour l'un, patience pour l'autre.

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 17:36
par Moi 1971
boubouk50 a écrit : @Moi1971: Encore entrain d'embêter les membres à l'écriture affreuse? Je ne sais pas ce que tu as écrit pour l'agacer comme cela, mais je te prierai de faire l'effort également de ne pas être agressif. Les efforts doivent être fait des deux côtés: relecture pour l'un, patience pour l'autre.
????!!!.. qu'ai-je écrit?
Je lui dis :
Bonjour,
Il te faut utiliser un booléen!
En confirmation de ce qu'a dit Iwa.
En suite, je lui donne la solution dans le code. et rien d'autre!
Il n'a même pas vu que je lui donnais la solution...
Est-ce mon problème si le gars prend pour lui la citation dans ma signature?
Je suis prié, je comprends...

Re: MY-AL Appliqué une fonction une fois

Publié : 09 Fév 2017 17:43
par boubouk50
Au temps pour moi, au vu de sa réponse, j'ai pensé que tu avais écrit quelque chose concernant son écriture qui l'avait énervé puis édité ton post après coup. Il a juste flambé tout seul en vol, 911...

Re: MY-AL Appliqué une fonction une fois

Publié : 10 Fév 2017 14:47
par Unity911
Erreur de ma part.
J'ai mal interprété son message.
je pensais qu'il s'adressait à moi.