- Home /
Adding Object Avoidance to my Enemy AI Script
I'm really having trouble adding the ability for my enemy to avoid onjects. I know I should be using some kind of ray-casting but I just can' figure it out. Any help is very much appreciated. Here is my code without the object avoiding:
var player : Transform; var speed : float=5; var range : float=15; var hitRange : float=6; var enemyDamage : float=10; var rotationSpeed : float=5; var damageTimer : float=0; var delta : Vector3; var distance;
function Update() { distance = Vector3.Distance(transform.position, player.transform.position); if(distance<=range) {
MoveTowards(); AttackPlayer(); } }
var moveSpeed = Vector3.zero; // this variable stores the current velocity var gravity: float = 20; // gravity like in the Move example
function MoveTowards() { if(distance<=(hitRange/1.5)) return; var character = GetComponent(CharacterController); if (character.isGrounded){ delta = player.transform.position - transform.position; delta.y = 0; // zero delta.y before normalization! delta.Normalize(); transform.forward = delta; // turn enemy to the player moveSpeed = delta speed; } moveSpeed.y -= gravity Time.deltaTime; // apply gravity acceleration character.Move(moveSpeed * Time.deltaTime); // move the character }
function AttackPlayer() { damageTimer+=Time.deltaTime; if (distance < hitRange && damageTimer>=1.5) { damageTimer=0f; player.SendMessageUpwards ("ApplyDamage", enemyDamage, SendMessageOptions.DontRequireReceiver); } }
Answer by Ben Ezard · Dec 13, 2011 at 10:08 PM
To use ray casting for object avoidance, what you do is draw, say, 5 rays out of the front of the enemy covering the front 180°, so that if, for example, a ray on the left hand side hits a collider, the enemy with rotate a bit to the right every frame until that ray is no longer hitting a collider Hope this helps a bit :-) A good place to learn how to use ray casting is the unity page below: http://unity3d.com/support/documentation/ScriptReference/Physics.Raycast.html