In the script I have whenever the player clicks when the enemy is within the attack-range, it is supposed to do damage and delete the enemy. But it doesn’t work. When I click, nothing happens.
The enemy script:
var damageToPlayer : int = 0; // De damage de de enemy doet naar de speler
var distance;
var maxDistance : float = 1.5;
var target : Transform; //In de inspector kan je hierin het speler object plaatsen waardoor die die registreerd als target
var lookAtDistance = 25.0; // de afstand waarop de speler word ge"detect"
var attackRange = 5.0; //zover kan de enemy de speler raken
var moveSpeed = 5.0; // snelheid van de enemy
var damping = 6.0; // 2) creeërt een damping effect waarmee de beweging natuurlijker uit ziet
var enemyMace : Transform; // net als bij de target alleen hier kan je de mace-object als wapen van de enemy registreren
/*
var attackRepeatTime = 1;
var attackThreshold = 10;
*/ // 1)
private var enemyHealth = 100; // levenspunten van de enemy
function Update ()
{
//var attackTime = Time.time; //1)
distance = Vector3.Distance(target.position, transform.position);
if(enemyHealth <= 0) // 2) geeft aan dat wanneer de enemy minder dan 0 levenspunten heeft de functie enemyDead moet aanroepen
{
enemyDead();
}
if (distance < lookAtDistance) //2) wanneer de speler door de enemy gespot word word de enemy geel en voert die de functie lookAt uit
{
renderer.material.color = Color.yellow;
lookAt();
}
if (distance > lookAtDistance) //2) Wanneer de speler buiten de lookAtDistance bevind word die genegeerd door de vijand en word de vijand groen
{
renderer.material.color = Color.green;
}
/*if (distance <attackRange) //2) wanneer de speler zich in de attackrange bevind zal de enemy rood worden en de speler achterna rennen
{
renderer.material.color = Color.red;
//chase
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
enemyMace.animation.CrossFade("Sprint");
//attack
// if (distance < attackThreshold Time.time > attackTime) { //1)
attack ();
// attackTime = Time.time + attackRepeatTime; //1)
}*/
if (enemyMace.animation.isPlaying == false) // geeft aan dat wanneer de enemy geen animatie heeft spelen, die de idle animatie moet spelen
{
enemyMace.animation.CrossFade("Idle"); //crossfade zorgt voor een soepele overgang van de ene animatie naar de andere
}
}
function lookAt() //2) roept de locatie op van de speler en zegt tegen de vijand dat die zich geleidelijk moet omdraaien richting de speler
{
var rotation = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
}
/*function applyDamage (damage : int) //2) wanneer de speler damage doet roept die deze functie op en stuurt de hoeveelheid damage mee
{
enemyHealth -= damage;
}*/
function enemyDead () //2) wanneer de enemy doodgaat word het gameobject verwijderd van het spel
{
Destroy (gameObject);
}
function attack () // stuurt een raycast om te zien of de speler zich binnen de maximale distance bevind en stuurt door middel van een message de damage door. Deze messag activeert dan meteen de functie applyDamageToPlayer in het Player script
{
var hit : RaycastHit;
if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
{
distance = hit.distance;
if (distance < maxDistance)
{
var playerHealth =- damageToPlayer; //haalt de damage die de enemy doet van de spelers health af
enemyMace.animation.Play("Attack"); //zegt dat de enemyMace de attack animatie moet afspelen
}
}
}
The player script:
var damage : int = 50; //2) de damage die de speler doet
var distance : float;
var MaxDistance : float = 1.5;
var Mace : Transform; // het wapen van de speler die in de inspector word geregisteerd
public var playerHealth = 100; //de levenspunten van de speler
function Update ()
{
if (Input.GetButtonDown("Fire1")) //2) roept de de functie op die in het standaar script FPcontroller staat, als je op de muisknop drukt kan je slaan
{ //attack animation
Mace.animation.Play("Attack"); //2) zegt dat de attack animatie afgespeelt moet worden
//attack function
var hit : RaycastHit; //2) controleert of de vijand binnen maximale distance is en doet de damage wanneer dat wel het geval is
if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
{
distance = hit.distance;
if (distance < MaxDistance)
{
//hit.transform.SendMessage("applyDamage", damage, SendMessageOptions.DontRequireReceiver); //2) stuurt een message naar het enemy script waarmee die de functie applyDamage mee activeert
var enemyHealth =- damage;
}
}
}
if (Mace.animation.isPlaying == false) // 2) geeft aan dat wanneer er geen animatie speelt de mace de Idle animatie moet spelen
{
Mace.animation.CrossFade("Idle");
}
if (Input.GetKey (KeyCode.LeftShift))
{
Mace.animation.CrossFade("Sprint"); // 2) wanneer de speler sneller rent speelt die de sprint animatie af
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
Mace.animation.CrossFade("Idle");
}
if(playerHealth <= 0)
{
playerDead();
}
}
function playerDead (){ //wanneer deze functie word aangeroepen word het game over scherm ingeladen als een nieuw level
Application.LoadLevel ("GameOver");
}