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 Robwhitlow3 · Jan 17, 2012 at 05:41 AM · aienemytargeting

Enemy AI targeting script

Hey I am having trouble with my enemy AI script. The enemy targets work well. The only thing I can't figure out is how to make it so when the enemy gets so close to me he stops. The problem I am having now is he gets close and starts going around in circles. Here is the script if that helps!

var target : Transform; var moveSpeed = 3; var rotationSpeed = 3; var attackThreshold = 3; var chaseThreshold = 10; var maxDistance = 3; var giveUpThreshold = 20; var attackRepeatTime = 1;

private var chasing = false; private var attackTime = Time.time;

var myTransform : Transform;

function Awake() { myTransform = transform; }

function Start() { target = GameObject.FindWithTag("Player").transform; //target the player }

function Update () {

 // check distance to target every frame:
 var distance = (target.position - myTransform.position).magnitude;

 if (chasing) {

     //rotate to look at the player
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);

     //move towards the player
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

     // give up, if too far away from target:
     if (distance > giveUpThreshold) {
         chasing = false;
     }

     // attack, if close enough, and if time is OK:
     if (distance < attackThreshold && Time.time > attackTime) {
         // Attack! (call whatever attack function you like here)
         attackTime = Time.time + attackRepeatTime;
     }

 } else {
     // not currently chasing.

     // start chasing if target comes close enough
     if (distance < chaseThreshold) {
         chasing = true;
     }
 }

}

Comment
Add comment
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

3 Replies

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by doomprodigy · Jan 17, 2012 at 06:28 AM

What you want to use for a easy method is just a

 if (Vector3.Distance(other.position, transform.position) < tooClose){
 moveSpeed = 0;
 }

That way once the AI's distance between the player and the AI is less than the tooClose variable you cut the move speed to 0, then just simply add another distance script asking if the distance between the player and the AI is greater than tooClose and make the moveSpeed variable = 3 (or whatever your movespeed was).

This is essentially what you are doing there but you are just not cutting of the moveSpeed variable to 0 and then once you are greater than you tooClose variable putting it back to normal.

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
avatar image
0

Answer by Robwhitlow3 · Jan 25, 2012 at 02:10 AM

Thank you so much! That worked perfectly :) Sorry for the late reply, between work and college I'm swamped. But you were a great help!

Comment
Add comment · Show 2 · 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
avatar image doomprodigy · Jan 25, 2012 at 03:47 AM 0
Share

Ins$$anonymous$$d of using an answer as a reply use the comment and edit function as I am using now. Also if someone has solved your problem then accept there answer as the correct answer so that others no need to look at it while trying to help.

avatar image Robwhitlow3 · Jan 25, 2012 at 12:41 PM 0
Share

Ahhhhh gocha. Sorry about that :p Is there a different way I should put it in there?

avatar image
0

Answer by Robwhitlow3 · Jan 25, 2012 at 03:16 AM

Sorry but it's actually not 100% working. The target stops following me like expected, but he doesn't start following back. I thought I did a right if, else statement. But Im new to this. Did I put It in the wrong spot or is it not formatted right?

var target : Transform; //the enemy's target

var moveSpeed = 3; //move speed

var rotationSpeed = 3; //speed of turning

var attackThreshold = 3; // distance within which to attack

var chaseThreshold = 10; // distance within which to start chasing

var maxDistance = 3;

var giveUpThreshold = 20; // distance beyond which AI gives up

var attackRepeatTime = 1; // delay between attacks when within range

var tooClose = 2;

private var chasing = false; private var attackTime = Time.time;

var myTransform : Transform; //current transform data of this enemy

function Awake() { myTransform = transform; //cache transform data for easy access/preformance }

function Start() { target = GameObject.FindWithTag("Player").transform; //target the player }

function Update () {

 // check distance to target every frame:
 var distance = (target.position - myTransform.position).magnitude;

 if (chasing) {
 
 if (Vector3.Distance(target.position, transform.position) < tooClose){
     moveSpeed = 0;
     
     else(Vector3.Distance(target.position, transform.position) > tooClose) {
     moveSpeed = 3;
     }
 }

     //rotate to look at the player
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);

     //move towards the player
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

     // give up, if too far away from target:
     if (distance > giveUpThreshold) {
     
         chasing = false;
     }

     // attack, if close enough, and if time is OK:
     if (distance < attackThreshold && Time.time > attackTime) {
         // Attack! (call whatever attack function you like here)
         attackTime = Time.time + attackRepeatTime;
     }

 } else {
     // not currently chasing.

     // start chasing if target comes close enough
     
     if (distance < chaseThreshold) {
         chasing = true;
        
     }
 }

}

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

2D Random AI 1 Answer

free roaming enemy ai 1 Answer

Ai Targetting feet instead of my body 2 Answers

faster target selection 2 Answers

A* pathfinding avoidance 0 Answers


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