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
1
Question by JoshMBeyer · Mar 21, 2014 at 02:13 PM · playerenemydistancerangedetect

Detect if player is in range?

Trying to detect if the play is within range of the enemy for a simple AI script. It's been a while since i last coded so I am suffering memory loss lol. I tried OnCollisionEnter, OnTriggerEnter, but was having trouble remembering, Rigid body on just one? or Both? Collider on one or both? is trigger isn't trigger? is Kinematic isn't kinematic? So I thought well lets just detect distance on a Vector3 but not even that is working for me now. Here is what I have, let me know some tips, or any advice to solve this issue.

 using UnityEngine;
 using System.Collections;
 
 public class EnemyAI : MonoBehaviour {
 
     public GameObject target;
 
     public int maxRange;
     public int minRange;
     private Vector3 targetTran;
     // Use this for initialization
     void Start () 
     {
         target = GameObject.FindWithTag("Player");
         targetTran = target.transform.position;
     }
     
     // Update is called once per frame
     void Update () 
     {
         if ((Vector3.Distance(transform.position, target.transform.position) < maxRange)
            && (Vector3.Distance(transform.position, target.transform.position) > minRange))
         {
             transform.LookAt(targetTran);
             transform.Translate(Vector3.forward * Time.deltaTime);
         }
     }
 }
 
Comment
Add comment · Show 2
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 suribe · Mar 21, 2014 at 03:00 PM 0
Share

What do you mean with not working? It does not rotate, it does it when it should not... ? What happens if you add some debug lines to print the distance on each frame?

avatar image JoshMBeyer · Mar 21, 2014 at 03:15 PM 0
Share

I mean its just not working. Nothing is happening, no comments to the console nothing. No matter what i try, none of the OnTriggers will work. I've used other peoples scripts, the one I posted below, followed tutorials, nothing is working when i try to detect collisions

2 Replies

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

Answer by TonyLi · Mar 21, 2014 at 03:04 PM

If you use the Physics system like you originally thought, you can avoid the distance computations every frame. Add a SphereCollider to your AI. Set the radius to minRange. You could add the collider by hand or automatically within the EnemyAI script. Tick Is Trigger to make it a trigger. Since the AI will presumably move, add a Rigidbody and tick Is Kinematic (unless the AI already has a rigidbody).

Then add OnTriggerEnter and OnTriggerExit methods to keep track of when the player enters the trigger area:

 private Transform target = null;

 void OnTriggerEnter(Collider other) {
     if (other.tag == "Player") target = other.transform;
 }
 
 void OnTriggerExit(Collider other) {
     if (other.tag == "Player") target = null;
 }

In Update, move to the target (or away, if it's too close):

 void Update() {
     if (target == null) return;
     transform.LookAt(target);
     float distance = Vector3.Distance(transform.position, target.position);
     bool tooClose = distance < minRange;
     Vector3 direction = tooClose ? Vector3.back : Vector3.forward;
     transform.Translate(direction * Time.deltaTime);
 }
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 JoshMBeyer · Mar 21, 2014 at 03:15 PM 0
Share

Do you think i have to reinstall unity...

avatar image TonyLi · Mar 22, 2014 at 12:01 AM 0
Share

I don't think you have to reinstall Unity. Try the attached test scene. When playing, in the Scene view I can move the Cube into the AI trigger and it prints the debug line. You can also enable the "$$anonymous$$ove" script on the Cube and watch it move itself into the trigger. Let us know if this works on your machine.link text

triggers.zip (11.7 kB)
avatar image
0

Answer by JoshMBeyer · Mar 21, 2014 at 03:09 PM

I just tried creating an empty scene. Made a cube(With a cube collider set to "is Trigger") and a Sphere, with a Sphere collider, and a rigid body. Pressed play, moved the sphere clear through the cube, several times in several different directions and nothing??? I am starting to think it isn't me, it is unity now.

here is the script for testing it.

 using UnityEngine;
 using System.Collections;
 
 public class EnemyAI : MonoBehaviour
 {
     void OnTriggerEnter(Collider other)
     {
         Debug.Log("Made A collision");
     }
    
 }
 
Comment
Add comment · Show 9 · 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 JoshMBeyer · Mar 21, 2014 at 03:16 PM 0
Share

i even tried every possible combination of the is trigger, is kinematic and stil nothing

avatar image JoshMBeyer · Mar 21, 2014 at 03:22 PM 0
Share

I am posting a video of my screen to youtube so you can see everything i see

avatar image JoshMBeyer · Mar 21, 2014 at 03:23 PM 0
Share

See for yourself

avatar image TykoX64 · Mar 21, 2014 at 03:33 PM 0
Share

To detect collisions at least one of them has to have a rigidbody attached.

avatar image JoshMBeyer · Mar 21, 2014 at 03:38 PM 0
Share

As shown in the video, and mentioned in the commentary of my post here.

Show more comments

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

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

Related Questions

Detect if player is in range? 0 Answers

Follow within a certain distance? 1 Answer

Detect if player is in structure (or in range) 1 Answer

Look at closer to player 1 Answer

Move the enemy object opposite to player and keep its distance relative to the player? 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