• Register

Software Architect during the day, Game Designer & Developer rest of the time.

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
RSS My Blogs

This post is a repost of my blog entry.
The following article & the code is intended for developers using the Unity engine for their game.

Homing missiles have been my favorite in all types of games. There is nothing more fun than a fire & forget weapon. Homing missiles will generally lock on to a target & keep following it till a collision occurs OR the missile might auto-destruct after a certain period of time.

I have implemented homing missiles in Hawks using a kinematic rigidbody in order to keep things simple. A kinematic rigidbody’s transform can be manipulated directly. Hence, it is much easier to write code for such an object.
The following script should be attached to a gameobject having a Rigidbody component with isKinematic set to true.

A basic homing missile will operate based on three properties: Speed, Auto Destruct time & target.

  1. Speed: Since we are using a kinematic rigidbody, the speed of the projectile can be controlled by translating in the Update() function:
    transform.Translate(0,0,speed * Time.deltaTime,Space.Self);
  2. Auto Destruct: This functionality can be implemented by calling a coroutine which self-destructs after a set amount of time:
    function Start () {
    	StartCoroutine(AutoExplode());
    }
    
    private function ExplodeSelf() {
    	Instantiate(explosion,transform.position,Quaternion.identity);
    	Destroy(gameObject);
    }
    
    private function AutoExplode() {
    	yield WaitForSeconds(autoDestroyAfter);
    	ExplodeSelf();
    }
  3. Target: The missile needs to follow the target. We can achieve this by rotating the missile towards the target transform using the wonderful Slerp function:
    var relativePos : Vector3 = target.position - transform.position;
    var rotation : Quaternion = Quaternion.LookRotation(relativePos);
    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, homingSensitivity);

Notice the homingSensitivity variable that is used as the last parameter to the Quaternion.Slerp(from, to, t) function. To understand its usage, we need to look at what the Slerp actually does. Slerp == Spherical Interpolation. Mathematical details available at: En.wikipedia.org. For those not so mathematically inclined, given two values, the Slerp function will calculate an intermediate position between ‘from’ & ‘to’ based on the third parameter which lies in the range [0,1]. If the third param is 0, the ‘from’ value will be returned & 1 will return the ‘to’ value. Try experimenting with different values to achieve the desired effect in your game.

Below is the complete code for the HomingMissile.js script:

#pragma strict
var target : Transform;
var speed : float;

var autoDestroyAfter : float;
//prefab for explosion
var explosion : GameObject;

/* Represents the homing sensitivity of the missile. 
Range [0.0,1.0] where 0 will disable homing and 1 will make it follow the target like crazy.
This param is fed into the Slerp (defines the interpolation point to pick) */
var homingSensitivity : float = 0.1;

function Start () {
	StartCoroutine(AutoExplode());
}

function Update () {
	if(target != null) {
		var relativePos : Vector3 = target.position - transform.position;
		var rotation : Quaternion = Quaternion.LookRotation(relativePos);

		transform.rotation = Quaternion.Slerp(transform.rotation, rotation, homingSensitivity);
	}

	transform.Translate(0,0,speed * Time.deltaTime,Space.Self);
}

function OnTriggerEnter(other: Collider) {
	//Damage the other gameobject & then destroy self
        ExplodeSelf();
}

private function ExplodeSelf() {
	Instantiate(explosion,transform.position,Quaternion.identity);
	Destroy(gameObject);
}

private function AutoExplode() {
	yield WaitForSeconds(autoDestroyAfter);
	ExplodeSelf();
}

Like our facebook page if you find this stuff interesting:
Facebook.com

Start a group Groups
PKSArena.com

PKSArena.com

1 member Developer & Publisher

Lone video game designer, developer. Looking forward to entertain you :)

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account:

X

Latest posts from @pkminhas

🔨Building a social network from scratch is no easy feat, but I took on the challenge with a vision to connect ppl i… T.co

Jul 9 2023

Have you ever encountered the "Unsupported FILE" error on your #sp404mk2 ? If yes, the fix is simple but converting… T.co

Jul 8 2023

Now that Meta has launched Threads and it is already at the #1 spot, I think it is the right time to post about wha… T.co

Jul 8 2023

For a long time, I have been trying to keep multiple different social profiles for my tech and music channels. On t… T.co

Jul 8 2023

My first jam with the #sp404mk2 resulted in this beat… T.co

Jul 2 2023