I have a script on a cannonball so that when it hits a target directly, it kills them instantly, if it hits near them, they might die instantly, or they might get severely damage. If they’re farther away, less damaged, etc. So I tried doing that with this script:
#pragma strict
var explosion : GameObject;
var blast : AudioClip;
var waterHit : GameObject;
var waterBlast : AudioClip;
var target : Transform;
var closeAreaEffect : float = 1.5;
var mediumAreaEffect : float = 3;
var farAreaEffect : float = 5;
private var speed : float = 100;
private var destroyTime : float = 5;
private var detachChildren : boolean = false;
private var closeDamage : float = 100;
private var mediumDamage : float = 50;
private var farDamage : float = 25;
function Update ()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
function Awake ()
{
Invoke ("DestroyNow", destroyTime);
}
function DestroyNow ()
{
if (detachChildren) {
transform.DetachChildren ();
}
DestroyImmediate(gameObject);
}
function OnCollisionEnter (collision : Collision) {
if(collision.gameObject.CompareTag("British")){
Instantiate(explosion, transform.position, transform.rotation);
audio.PlayOneShot(blast);
}
if(collision.gameObject.CompareTag("Terrain")){
Instantiate(explosion, transform.position, transform.rotation);
audio.PlayOneShot(blast);
}
if(collision.gameObject.CompareTag("Water")){
Instantiate(waterHit, transform.position, transform.rotation);
audio.PlayOneShot(waterBlast);
}
Destroy(gameObject);
var distance = Vector3.Distance(target.transform.position, transform.position);
if(collision.gameObject.CompareTag("British")){
collision.collider.gameObject.SendMessage("ApplyDamage", closeDamage, SendMessageOptions.DontRequireReceiver);
}
if(collision.gameObject.CompareTag("British") && distance <= closeAreaEffect){
collision.collider.gameObject.SendMessage("ApplyDamage", closeDamage, SendMessageOptions.DontRequireReceiver);
}
if(collision.gameObject.CompareTag("British") && distance <= mediumAreaEffect){
collision.collider.gameObject.SendMessage("ApplyDamage", mediumDamage, SendMessageOptions.DontRequireReceiver);
}
if(collision.gameObject.CompareTag("British") && distance <= farAreaEffect){
collision.collider.gameObject.SendMessage("ApplyDamage", farDamage, SendMessageOptions.DontRequireReceiver);
}
}
@script RequireComponent(Rigidbody);
The problem with this script is that the only way for it to calculate the distance is according to it’s target. Well the target is a transform, but the cannonball itself is a GameObject, so I can’t assign the transform. How should I change this?