Problème de dégât

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
jeje
Messages : 5
Inscription : 10 Avr 2016 21:49

Problème de dégât

Message par jeje » 10 Avr 2016 21:59

Bonsoir, voilà j'ai un problème assez récurent sur Unity. Mon personnage à une arme auquel je lui et affecter un script weapons lui permettant de faire des dégâts sur un ennemi mais l'ennemi ne reçoit pas les dégâts que je devrais lui faire, je lui et ajouter un collider un character controller un script ai, Lock rotations et Health ennemy mais rien n'y fait mon arme ne fait pas de dégats voici mon script weapons:

Code : Tout sélectionner

var TheDammage : int = 50;
private var Distance : float;
var MaxDistance : float = 1.5;
var DammageDelay : float = 0.6;

function Update () 
{
    if (Input.GetButtonDown("Fire1"))
    {
       AttackDammage();
    }
}

function AttackDammage()
{
    yield WaitForSeconds(DammageDelay);
    
    var hit : RaycastHit;
    var ray = Camera.main.ScreenPointToRay(Vector3(Screen.width/2, Screen.height/2, 0));
    
    if (Physics.Raycast (ray, hit))
    {
       Distance = hit.distance;
       if (Distance < MaxDistance)
       {
          hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
       }
    }
}
Les balises CODE! le 4e bouton avec les <> --<>

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6243
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème de dégât

Message par boubouk50 » 11 Avr 2016 09:35

Quand tu tires, tu délaies le calcul de 0.6 secondes (pourquoi?)
Ta distance max est de 1.5 mètres, c'est pas un peu court?
Ta cible possède bien le script qui contient la fonction ApplyDammage ()? On peut le voir ce script?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

jeje
Messages : 5
Inscription : 10 Avr 2016 21:49

Re: Problème de dégât

Message par jeje » 11 Avr 2016 18:41

Re. Voici mon Script AI qui et sur mon ennemi . Le 0.6 c'est parce-que j'ai une épee pour mon arme et j'ai calculé se délai en fonction de l'annimation de mon arme pour ne pas quelle tue trop vite mon ennemi.

Code : Tout sélectionner

var Distance;
var Target : Transform;
var lookAtDistance = 25.0;
var chaseRange = 15.0;
var attackRange = 1.5;
var moveSpeed = 5.0;
var Damping = 6.0;
var attackRepeatTime = 1;

var TheDammage = 40;

private var attackTime : float;

var controller : CharacterController;
var gravity : float = 20.0;
private var MoveDirection : Vector3 = Vector3.zero;

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

function Update ()
{
	Distance = Vector3.Distance(Target.position, transform.position);
	
	if (Distance < lookAtDistance)
	{
		lookAt();
	}
	
	if (Distance > lookAtDistance)
	{
		GetComponent.<Renderer>().material.color = Color.green;
	}
	
	if (Distance < attackRange)
	{
		attack();
	}
	else if (Distance < chaseRange)
	{
		chase ();
	}
}

function lookAt ()
{
	GetComponent.<Renderer>().material.color = Color.yellow;
	var rotation = Quaternion.LookRotation(Target.position - transform.position);
	transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);	
	}


function chase ()
{
    GetComponent.<Animation>().Play("run");
	GetComponent.<Animation>()["run"].speed = 1;
			
	GetComponent.<Renderer>().material.color = Color.red;
	
	moveDirection = transform.forward;
	moveDirection *= moveSpeed;
	
	moveDirection.y -= gravity * Time.deltaTime;
	controller.Move(moveDirection * Time.deltaTime);
}

function attack ()
{
	if (Time.time > attackTime)
	{
	    GetComponent.<Animation>().Play("attack");
	    GetComponent.<Animation>()["attack"].speed = 1;

	    
			
		Target.SendMessage("ApplyDammage", TheDammage);
		Debug.Log("The Enemy Has Attacked");
		attackTime = Time.time + attackRepeatTime;
	}
}

function ApplyDammage ()
{
    
	chaseRange += 30;
	moveSpeed += 2;
	lookAtDistance += 40;
}
Le balises codes, second (et dernier) rappel ! Merci

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Problème de dégât

Message par Moi 1971 » 11 Avr 2016 21:05

Bonsoir,
Boubouk à le nez fin.
Tu appel ta fonction ApplyDammage() ici :

Code : Tout sélectionner

 hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
Tu passes en paramètre TheDammage a la fonction ici :

Code : Tout sélectionner

function ApplyDammage ()
{   
   chaseRange += 30;
   moveSpeed += 2;
   lookAtDistance += 40;
}
Ta fonction ne prend pas de paramètre en entré! et en plus elle ne possède pas de code pour traiter l'information.
Peux-tu nous expliquer comment tu veux que des dommages soient occasionnés à ton perso?

jeje
Messages : 5
Inscription : 10 Avr 2016 21:49

Re: Problème de dégât

Message par jeje » 12 Avr 2016 01:54

Bonsoir et merci de ton raisonnement mais je suis débutant dans Unity je suis des tutos pour réaliser quelques idées de jeu mais pourrais tu m'aider à corriger mes erreurs que je puisse en finir avec cela.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6243
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème de dégât

Message par boubouk50 » 12 Avr 2016 09:30

C'est reparti!

Code : Tout sélectionner

hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
Hop, un petit tour sur la doc: SendMessage ()
-> Appelle une fonction du component avec un paramètre max et une option de message d'erreur en cas d'échec.
Donc cette ligne va appeler la fonction ApplyDammage () avec le paramètre TheDammage à l'objet présent dans hit.
Il te faut donc une fonction de type:

Code : Tout sélectionner

function ApplyDammage (int dammages)
{   
   vie -= dammages;
   if (vie <= 0) {	//Ce GameObject meurt
   	//ICI IMPLEMENTER LA MORT DE CE GAMEOBJECT
   	//JOUER L'ANIMATION DE MORT -> Animation.Play ();
   	//DÉTRUIRE LE GAMEOBJECT A PARTIR D'UN DÉLAI -> Destroy ();
   }
}
Par contre j'ai rien pigé pourquoi quand tu infliges des dégâts, tu ajoute du range, de la distance et de l’acuité visuelle...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Problème de dégât

Message par ZJP » 12 Avr 2016 14:29

jeje a écrit : Le 0.6 c'est parce-que j'ai une épee pour mon arme et j'ai calculé se délai en fonction de l'annimation de mon arme pour ne pas quelle tue trop vite mon ennemi.
TRÈS MAUVAISE approche ( Il te faudra faire des calculs à chaque animations qui incluent cette épée) : mets un "Collider" sur l'épée, éventuellement sur un "Layer" différent pour ne pas perturber les "Colliders" du perso qui tient cette épée. ;-)

jeje
Messages : 5
Inscription : 10 Avr 2016 21:49

Re: Problème de dégât

Message par jeje » 13 Avr 2016 00:03

Bonsoir merci de vos réponses mai rien n'y fait le problème persiste toujours, j'ai ajouté un script EnnemyHealth à mon ennemi avec la fonction applydammage et la function dead mais sa ne marche toujours pas.

jeje
Messages : 5
Inscription : 10 Avr 2016 21:49

Re: Problème de dégât

Message par jeje » 13 Avr 2016 00:05

Voici mon script

Code : Tout sélectionner

var vie : float = 75;
var EnemyName : String;

    function ApplyDammage (TheDammage : int)  
        {
            vie -= TheDammage;
	
            if(vie <= 0)
            {
                GameObject.Find(EnemyName).GetComponent(AdvancedAI).enabled = false;
                GetComponent.<Animation>().Play("die");
                GetComponent.<Animation>()["die"].speed = 1;
                yield WaitForSeconds (30);
                Dead();
            }
        }

        function Dead()
        {
            Destroy (gameObject);
        }

BON JEJE, LA VA FALLOIR TE BOUGER UN PEU! CA FAIT TROIS FOIS QU'ON TE DIT DE METTRE LES BALISES CODE! C'EST QUAND MEME PAS COMPLIQUE!

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Problème de dégât

Message par Moi 1971 » 13 Avr 2016 09:59

Bonjour,
Toujours pareil, montre nous le code du script qui appel la fonction "ApplyDammage"

Pour trouver tout seul d'où vient le problème, tu peux mettre des Debug.Log("") un peu partout dans ton code pour comprendre comment celui-ci se déroule.
Exemple :

Code : Tout sélectionner

function ApplyDammage (TheDammage : int) 
        {
   	Debug.Log("Dans la function ApplyDammage");
            vie -= TheDammage;
   
            if(vie <= 0)
            {

Verrouillé

Revenir vers « (Js) Javascript »