- Home /
Ai Upgrade?? Possible
Hey i got a question aboute my ai script. in my sene i have multiple enemys with this script on them. but my problem is that tjay move to me same attack possition thay overlap eatch other or otherwize sayd thay move in to each other can this be fixed by lets say adding a variable that says dont come closer than 20 to anny other ai And i think it can be done by rigidbody??
and second question would be all the AI`s taggs the first enemy in the sene but can it be possible to make it more like this So when an ai has tagged a enemy that the other Ai`s tag the other Enemys in the sene. im sorry my english is not so good but i hope you know what im looking for thaks
Here is the Ai Script
var speed = 1.0;
var attackRange = 30.0;
var shootRange =150.0;
var shootAngleDistance = 10.0;
var dontComeCloserRange = 5.0;
var target : Transform;
function Start () {
if (target == null && GameObject.FindWithTag("Enemy"))
target = GameObject.FindWithTag("Enemy").transform;
Patrol ();
}
function Update () {
if (target == null && GameObject.FindWithTag("Enemy"))
target = GameObject.FindWithTag("Enemy").transform;
if (target == null)
return;
if (!CanSeeTarget ())
return;
}
function CanSeeTarget () : boolean
{
if (Vector3.Distance(transform.position, target.position) > attackRange)
return false;
var hit : RaycastHit;
if (Physics.Linecast (transform.position, target.position, hit))
return hit.transform == target;
return false;
}
function Patrol () {
if (CanSeeTarget ())
yield StartCoroutine("AttackEnemy");
yield;
}
function AttackEnemy () {
var lastVisibleEnemyPosition = target.position;
while (true) {
if (CanSeeTarget ()) {
// Target is dead - stop hunting
if (target == null)
return;
// Target is too far away - give up
var distance = Vector3.Distance(transform.position, target.position);
if (distance > attackRange * shootRange * 3)
return;
lastVisibleEnemyPosition = target.position;
if (distance > dontComeCloserRange)
MoveTowards (lastVisibleEnemyPosition);
else
RotateTowards(lastVisibleEnemyPosition);
var forward = transform.TransformDirection(Vector3.forward);
var targetDirection = lastVisibleEnemyPosition - transform.position;
targetDirection.y = 0;
var angle = Vector3.Angle(targetDirection, forward);
// Start shooting if close and play is in sight
if (distance <shootRange && attackRange && angle < shootAngleDistance)
yield StartCoroutine("");
} else {
yield StartCoroutine("SearchEnemy", lastVisibleEnemyPosition);
// Player not visible anymore - stop attacking
if (!CanSeeTarget ())
return;
}
yield;
}
}
function SearchEnemy (position : Vector3) {
// Run towards the player but after 3 seconds timeout and go back to Patroling
var timeout = 3.0;
while (timeout > 0.0) {
MoveTowards(position);
// We found the player
if (CanSeeTarget ())
return;
timeout -= Time.deltaTime;
yield;
}
}
function RotateTowards (position : Vector3) {
// Rotate towards target
var targetPoint = target.position;
var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 2.0);
}
function MoveTowards (position : Vector3) {
transform.position = Vector3.MoveTowards(transform.position, target.position,speed);
var targetPoint = target.position;
var targetRotation = Quaternion.LookRotation (targetPoint - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 2.0);
}
function PickNextWaypoint (currentWaypoint : AutoWayPoint) {
// We want to find the waypoint where the character has to turn the least
// The direction in which we are walking
var forward = transform.TransformDirection(Vector3.forward);
// The closer two vectors, the larger the dot product will be.
var best = currentWaypoint;
var bestDot = -10.0;
for (var cur : AutoWayPoint in currentWaypoint.connected) {
var direction = Vector3.Normalize(cur.transform.position - transform.position);
var dot = Vector3.Dot(direction, forward);
if (dot > bestDot && cur != currentWaypoint) {
bestDot = dot;
best = cur;
}
}
return best;
}
"Program$$anonymous$$g Game AI by Example" by $$anonymous$$at Buckland is an excellent book on the theory and practice of avoidance and flocking systems for AI among other equally important concepts talked about in the book.
Anyone looking to delve deeper into the world of AI should read this book.
Answer by eeveelution8 · Jun 23, 2014 at 03:25 AM
I made a tutorial with a simpl Ai with path finding here. http://forum.unity3d.com/threads/simple-ai-pathing-and-patrolling-set-of-scripts.253235/
Your answer
Follow this Question
Related Questions
ZOMBIE AI SCRIPT 1 Answer
A question about AI 0 Answers
Enemy Animation Freezing in first frame 2 Answers
Hurting enemy when attacking status is equal to true and player is colliding with enemy object. 1 Answer
AI Patrolling 1 Answer