So I cant figure out the life of me, why the player can send his damage by the line:
“hit.transform.SendMessage(“applyDamage”, damage, SendMessageOptions.DontRequireReceiver);”
But i can’t do the same for when the enemy wants to send damage
hit.transform.SendMessage(“applyDamageToPlayer”, damageToPlayer, SendMessageOptions.DontRequireReceiver);
Player script:
#pragma strict
var playerHealth = 100;
function Update ()
{
if(playerHealth <= 0)
{
playerDead();
}
}
function applyDamageToPlayer (damage : int)
{
playerHealth -= damageToPlayer;
}
function playerDead (){
Application.LoadLevel ("GameOver");
}
Melee system script:
#pragma strict
var damage : int = 50;
var distance : float;
var MaxDistance : float = 1.5;
var Mace : Transform;
function Update ()
{
if (Input.GetButtonDown("Fire1"))
{ //attack animation
Mace.animation.Play("Attack");
//attack function
var hit : RaycastHit;
if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
{
distance = hit.distance;
if (distance < MaxDistance)
{
hit.transform.SendMessage("applyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
}
}
if (Mace.animation.isPlaying == false)
{
Mace.animation.CrossFade("Idle");
}
if (Input.GetKey (KeyCode.LeftShift))
{
Mace.animation.CrossFade("Sprint");
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
Mace.animation.CrossFade("Idle");
}
}
and finally the enemy AI script:
var damageToPlayer : int = 20;
var distance;
var maxDistance : float = 1.5;
var target : Transform;
var lookAtDistance = 25.0;
var attackRange = 5.0;
var moveSpeed = 5.0;
var damping = 6.0;
var enemyMace : Transform;
private var enemyHealth = 100;
function Update ()
{
distance = Vector3.Distance(target.position, transform.position);
if(enemyHealth <= 0)
{
enemyDead();
}
if (distance < lookAtDistance)
{
renderer.material.color = Color.yellow;
lookAt();
}
if (distance > lookAtDistance)
{
renderer.material.color = Color.green;
}
if (distance <attackRange)
{
renderer.material.color = Color.red;
//chase
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
enemyMace.animation.CrossFade("Sprint");
attack ();
}
if (enemyMace.animation.isPlaying == false)
{
enemyMace.animation.CrossFade("Idle");
}
}
function lookAt()
{
var rotation = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
}
function applyDamage (damage : int)
{
enemyHealth -= damage;
}
function enemyDead ()
{
Destroy (gameObject);
}
function attack ()
{
var hit : RaycastHit;
if (Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit))
{
distance = hit.distance;
if (distance < maxDistance)
{
hit.transform.SendMessage("applyDamageToPlayer", damageToPlayer, SendMessageOptions.DontRequireReceiver);
enemyMace.animation.Play("Attack");
}
}
}