Page 1 sur 1

Problème de dégât

Publié : 10 Avr 2016 21:59
par jeje
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 <> --<>

Re: Problème de dégât

Publié : 11 Avr 2016 09:35
par boubouk50
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?

Re: Problème de dégât

Publié : 11 Avr 2016 18:41
par jeje
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

Re: Problème de dégât

Publié : 11 Avr 2016 21:05
par Moi 1971
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?

Re: Problème de dégât

Publié : 12 Avr 2016 01:54
par jeje
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.

Re: Problème de dégât

Publié : 12 Avr 2016 09:30
par boubouk50
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...

Re: Problème de dégât

Publié : 12 Avr 2016 14:29
par ZJP
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. ;-)

Re: Problème de dégât

Publié : 13 Avr 2016 00:03
par jeje
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.

Re: Problème de dégât

Publié : 13 Avr 2016 00:05
par jeje
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!

Re: Problème de dégât

Publié : 13 Avr 2016 09:59
par Moi 1971
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)
            {