Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Wesley21spelde · May 10, 2014 at 09:44 AM · ai

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;
 }        

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image mattyman174 · May 10, 2014 at 11:27 AM 0
Share

"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.

1 Reply

· Add your reply
  • Sort: 
avatar image
-1

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/

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

22 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges