Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 /
  • Help Room /
avatar image
0
Question by ADay0Remember · Apr 24, 2019 at 02:02 AM · c#aipatrolchase

How do I get my AI to chase the player?,How do I go from patrolling to chasing the player?

I am new to Unity and Scripting. So far I have a code to where my AI makes a patrol around my Nav Mesh. I want to have it chase the player and attack the player when the player comes into a certain range, but return to patrolling once the player gets out of that range. This is for an Oculus project. Any help is greatly appreciated. Here is the code I have so far:

 using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 
 public class NPCSimplePatrol : MonoBehaviour
 {
     //Dictates whether the agent waits on each node
     [SerializeField]
     bool _patrolWaiting;
 
     //The total time we wait at each node
     [SerializeField]
     float _totalWaitTime = 3f;
 
     //The probability of switching direction
     [SerializeField]
     float _switchProbability = 0.2f;
 
     //The list of all patrol nodes to visit
     [SerializeField]
     List<Waypoint> _patrolPoints;
 
     //Private variables for base behaviour
     NavMeshAgent _navMeshAgent;
     int _currentPatrolIndex;
     bool _travelling;
     bool _waiting;
     bool _patrolForward;
     float _waitTimer;
     public Transform player;
     static Animator anim;
 
     //Use this for initialization
     public void Start()
     {
         anim = GetComponent<Animator>();
         _navMeshAgent = this.GetComponent<NavMeshAgent>();
 
         if(_navMeshAgent == null)
         {
             Debug.LogError("The nav mesh agent component is not attached to " + gameObject.name);
         }
         else
         {
             if(_patrolPoints != null && _patrolPoints.Count >= 2)
             {
                 _currentPatrolIndex = 0;
                 SetDestination();
             }
             else
             {
                 Debug.Log("Insufficient patrol points for basic patrolling behaviour.");
             }
         }
     }
 
     public void Update()
     {
         
             //Check if we're close to destination
             if (_travelling && _navMeshAgent.remainingDistance <= 1.0f)
             {
                 _travelling = false;
 
                 //If we're going to wait, then wait
                 if (_patrolWaiting)
                 {
 
                     _waiting = true;
                     _waitTimer = 0f;
                 }
                 else
                 {
 
                     ChangePatrolPoint();
                     SetDestination();
                 }
             }
 
             //Instead if we're waiting
             if (_waiting)
             {
                 anim.SetBool("IsIdle", true);
                 anim.SetBool("IsWalking", false);
                 anim.SetBool("IsAttacking", false);
                 _waitTimer += Time.deltaTime;
                 if (_waitTimer >= _totalWaitTime)
                 {
 
                     _waiting = false;
 
                     ChangePatrolPoint();
                     SetDestination();
 
                     anim.SetBool("IsIdle", false);
                     anim.SetBool("IsWalking", true);
                     anim.SetBool("IsAttacking", false);
                 }
             }
     }       
 
     private void SetDestination()
     {
         if (_patrolPoints != null)
         {
 
             Vector3 targetVector = _patrolPoints[_currentPatrolIndex].transform.position;
             _navMeshAgent.SetDestination(targetVector);
             _travelling = true;
         }
     }
 
     /// <summary>
     /// Selects a new patrol point in the available list but
     /// also with a small probability allows for us to move forward or backwards
     /// </summary>
     private void ChangePatrolPoint()
     {
         if(UnityEngine.Random.Range(0f, 1f) <= _switchProbability)
         {
             _patrolForward = !_patrolForward;
         }
 
         if (_patrolForward)
         {
             _currentPatrolIndex = (_currentPatrolIndex + 1) % _patrolPoints.Count;
         }
         else
         {
             if(--_currentPatrolIndex < 0)
             {
                 _currentPatrolIndex = _patrolPoints.Count - 1;
             }
         }
     }
 }
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 abi-kr01 · Apr 25, 2019 at 10:40 AM 0
Share

Have you tried nev mesh

avatar image ADay0Remember abi-kr01 · Apr 26, 2019 at 06:17 AM 0
Share

What do you mean?

3 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Eyes-Wide-Shut · Apr 24, 2019 at 02:30 AM

I can't write out code to help you, because I'm on my phone but you'll want to setup a trigger, when a player enters it, in the update function or late update function start setting the nav mesh agent destination to the player's position.

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 ADay0Remember · Apr 24, 2019 at 11:20 PM 0
Share

link text

So this is the code I have, but now it only chases but doesn't patrol.

patrolchasecode.txt (4.8 kB)
avatar image ADay0Remember · Apr 24, 2019 at 11:22 PM 0
Share

Okay so that link didn't work, and I can't upload the code because it exceeds 3000 characters.

avatar image
0

Answer by ADay0Remember · Apr 26, 2019 at 06:41 AM

So I created a script to chase, and the AI does. The only problem is that it won't patrol, but just sit there idle here is my code that I have. Thanks for the quick reply by the way.

     using System.Collections;
     using System;
     using System.Collections.Generic;
     using UnityEngine;
     using UnityEngine.AI;
     
     public class Chase : MonoBehaviour
     {
         //Dictates whether the agent waits on each node
         [SerializeField]
         bool _patrolWaiting;
     
         //The total time we wait at each node
         [SerializeField]
         float _totalWaitTime = 3f;
     
         //The probability of switching direction
         [SerializeField]
         float _switchProbability = 0.2f;
     
         //The list of all patrol nodes to visit
         [SerializeField]
         List<Waypoint> _patrolPoints;
     
         //Private variables for base behaviour
         public Transform player;
         static Animator anim;
         NavMeshAgent _navMeshAgent;
         int _currentPatrolIndex;
         bool _travelling;
         bool _waiting;
         bool _patrolForward;
         bool player_detected;
         float _waitTimer;
     
         // Start is called before the first frame update
         void Start()
         {
             anim = GetComponent<Animator>();
             _navMeshAgent = this.GetComponent<NavMeshAgent>();
     
             if (_navMeshAgent == null)
             {
                 Debug.LogError("The nav mesh agent component is not attached to " + gameObject.name);
             }
             else
             {
                 if (_patrolPoints != null && _patrolPoints.Count >= 2)
                 {
                     _currentPatrolIndex = 0;
                     //SetDestination();
                 }
                 else
                 {
                     Debug.Log("Insufficient patrol points for basic patrolling behaviour.");
                 }
             }
         }
     
         // Update is called once per frame
         void Update()
         {
             Vector3 direction = player.position - this.transform.position;
             float angle = Vector3.Angle(direction, this.transform.forward);
             // this affects radius
             if(Vector3.Distance(player.position, this.transform.position) < 20 && angle < 30)
             {
     
                 direction.y = 0;
     
                 this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);
     
                anim.SetBool("IsIdle", false);
                 if(direction.magnitude > 2)
                 {
                     this.transform.Translate(0, 0, 0.05f);
                    anim.SetBool("IsWalking", true);
                    anim.SetBool("IsAttacking", false);
                 }
                 else
                 {
                    anim.SetBool("IsAttacking", true);
                    anim.SetBool("IsWalking", false);
                 }
             }
             else
             {
               anim.SetBool("IsIdle", true);
               anim.SetBool("IsWalking", false);
               anim.SetBool("IsAttacking", false);
             }
     
             //Check if we're close to destination
             if (_travelling && _navMeshAgent.remainingDistance <= 1.0f)
             {
                 _travelling = false;
     
                 //If we're going to wait, then wait
                 if (_patrolWaiting)
                 {
     
                     _waiting = true;
                     _waitTimer = 0f;
                 }
                 else
                 {
     
                     ChangePatrolPoint();
                     SetDestination();
                 }
             }
     
             //Instead if we're waiting
             if (_waiting)
             {
                 anim.SetBool("IsIdle", true);
                 anim.SetBool("IsWalking", false);
                 anim.SetBool("IsAttacking", false);
                 _waitTimer += Time.deltaTime;
                 if (_waitTimer >= _totalWaitTime)
                 {
     
                     _waiting = false;
     
                     ChangePatrolPoint();
                     SetDestination();
     
                     anim.SetBool("IsIdle", false);
                     anim.SetBool("IsWalking", true);
                     anim.SetBool("IsAttacking", false);
                 }
             }
     
             void SetDestination()
             {
                 if (_patrolPoints != null)
                 {
     
                     Vector3 targetVector = _patrolPoints[_currentPatrolIndex].transform.position;
                     _navMeshAgent.SetDestination(targetVector);
                     _travelling = true;
                 }
             }
     
             /// <summary>
             /// Selects a new patrol point in the available list but
             /// also with a small probability allows for us to move forward or backwards
             /// </summary>
             void ChangePatrolPoint()
             {
                 if (UnityEngine.Random.Range(0f, 1f) <= _switchProbability)
                 {
                     _patrolForward = !_patrolForward;
                 }
     
                 if (_patrolForward)
                 {
                     _currentPatrolIndex = (_currentPatrolIndex + 1) % _patrolPoints.Count;
                 }
                 else
                 {
                     if (--_currentPatrolIndex < 0)
                     {
                         _currentPatrolIndex = _patrolPoints.Count - 1;
                     }
                 }
             }
         }
     }
 
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 boyblakk · Apr 26, 2019 at 03:40 PM

make a public float example public float lookRadius = 10f;

then create a method now you can see the lookRadius private void OnDrawGizmosSelected() { Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position, lookRadius); } then simply write it in your code for the SetDestination

float distance = Vector3.Distance(target.position, transform.position); if (distance <= lookRadius) { pathfinder.SetDestination(targetPosition); }

so if you are in the look radius the enemy will come after you and if not he wont i hope this helps

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

696 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

How do I make an enemy chase the player with a C script? 3 Answers

AI saving the agent's exact last patrol 0 Answers

How do i randomize certain waypoints at the end of a path? 0 Answers

My Enemy model is turned sideways when patrolling. 1 Answer

make AI to carry objects 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