• 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 BrianMac · Jul 26, 2021 at 10:02 PM · ai

AI Pathfinding positions occupied

Hi! Im making a restaurant game, I have this patrol script which moves the customer in a FIXED path, I have it attached in a gameobject that spawns every min.

how can I set a condition between these elements/array? alt text

that if an object is particularly occupying a waypoint the others will stay put until that certain waypoint is unoccupied

base on the script:

 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 
 public class CustomerBehavior : 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;
 
     //Use this for initialization
     public void Start()
     {
         _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.LogError("Insufficient patrol points for basic patrolling behavior.");
             }
         }
     }
 
     // Update is called once per frame
     public void Update()
     {
         //Check if we're close to the 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)
         {
             _waitTimer += Time.deltaTime;
             if (_waitTimer >= _totalWaitTime)
             {
                 _waiting = false;
 
                 ChangePatrolPoint();
                 SetDestination();
             }
         }
     }
 
     private void SetDestination()
     {
         if (_patrolPoints != null)
         {
             Vector3 targetVector = _patrolPoints[_currentPatrolIndex].transform.position;
             _navMeshAgent.SetDestination(targetVector);
             _travelling = true;
         }
     }
 
     /// <summary>
     /// Selects a new NPCSimplePatrol point in the available list, but
     /// also with a small probability allows for us to move forward or backwards.
     /// </summary>
     /// 
 
     private void ChangePatrolPoint()
     {
         if (_patrolForward)
         {
             _currentPatrolIndex = (_currentPatrolIndex + 1) % _patrolPoints.Count;
         }
         else
         {
             if (--_currentPatrolIndex < 0)
                 _currentPatrolIndex = _patrolPoints.Count - 1;
         }
     }
 }
screenshot-169.png (21.1 kB)
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by andrew-lukasik · Jul 26, 2021 at 10:16 PM

Create a field:

 HashSet<int> _patrolPointsOccupied = new HashSet<int>();

Then

 if( !_patrolPointsOccupied.Contains(nextPatrolIndex) )
 {
     _patrolPointsOccupied.Remove(_currentPatrolIndex);
     _patrolPointsOccupied.Add(nextPatrolIndex);
     ChangePatrolPointTo( nextPatrolIndex );
 }
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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

244 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

Related Questions

I don't understand how to use Car AI in Standard Assets. 1 Answer

AI spawns in face-down... 2 Answers

Problems disabling an AI and giving control to the Player 0 Answers

RAIN AI - Enemy shoot player 0 Answers

Make AI run back when you look (Boogeyman AI) 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