Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 kristersdrozds · Apr 01, 2018 at 01:56 PM · c#movement scriptenemyai

Script makes Uniy Freeze

Basically i have AI movement around destination points ( cubes ). When there is only 1 Patrolling AI.. everything works excellent but when i add the second AI it works for aprox. 10 secs and freezes my unity.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 
 public class SpiderScript : MonoBehaviour {
 
     public Transform player;
     public List<GameObject> DestinationPoints;
     private Animator anim;
     public float speed;
     public float alertDistance;
     public float walkingDistance;
     public float attackingDistance;
     public int mintime;
     public int maxtime;
     public float remainingDistance;
 
 
     private Vector3 Direction;
     private NavMeshAgent agent;
     private int selectedDestination;
 
     // Use this for initialization
     void Start()
     {
         anim = GetComponent<Animator>();
         agent = GetComponent<NavMeshAgent>();
         agent.enabled = false;
     }
 
     // Update is called once per frame
     void Update()
     {
         if(agent.enabled == true && agent.remainingDistance < remainingDistance)
         {
             agent.enabled = false;
             anim.SetBool("isWalking", false);
             anim.SetBool("isIdle", true);
             StartCoroutine(RandomMovement());
         }
         //idle
 
 
         //walk
 
 
         //run
 
 
         //attack
         if (Vector3.Distance(player.position, transform.position) < alertDistance &&
         Vector3.Distance(player.position, transform.position) > walkingDistance)
         {
             agent.enabled = false;
             anim.SetBool("isAlert", true);
             anim.SetBool("isWalking", false);
             anim.SetBool("isAttacking", false);
             anim.SetBool("isIdle", false);
         }
         else if (Vector3.Distance(player.position, transform.position) <= walkingDistance)
         {
             agent.enabled = true;
             /* Direction = player.position - transform.position;
              Direction.y = 0;
 
              transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Direction), 0.9f * Time.deltaTime);
 
              transform.Translate(0, 0, speed); */
 
             agent.SetDestination(player.transform.position);
 
             anim.SetBool("isWalking", true);
             anim.SetBool("isAttacking", false);
             anim.SetBool("isAlert", false);
             anim.SetBool("isIdle", false);
 
             if (Direction.magnitude <= attackingDistance)
             {
                 anim.SetBool("isAttacking", true);
                 anim.SetBool("isWalking", false);
             }
         }
         else if (anim.GetBool("isIdle") == false && agent.enabled == false)
         {
             anim.SetBool("isWalking", false);
             anim.SetBool("isAttacking", false);
             anim.SetBool("isAlert", false);
             anim.SetBool("isIdle", true);
             StartCoroutine(RandomMovement());
         }
     }
 
 
     public IEnumerator RandomMovement()
     {
         int index = Random.Range(mintime, maxtime);
 
         Debug.Log("randomtime" + index);
         yield return new WaitForSeconds(index);
         
        
         int index2 = Random.Range(1, 3);
         switch (index2)
         {
             case 1:
                 Debug.Log("Keep idle");
                 StartCoroutine(RandomMovement());
                 break;
             case 2:
                 Debug.Log("Move");
                 agent.enabled = true;
                 int lastDestination = selectedDestination;
             
                 selectedDestination = Random.Range(0, DestinationPoints.Count);
 
                 while (selectedDestination == lastDestination || DestinationPoints[selectedDestination].GetComponent<Destination>().isUsed == true)
                 {
                     selectedDestination = Random.Range(0, DestinationPoints.Count);
                 }
                 DestinationPoints[selectedDestination].GetComponent<Destination> ().isUsed = false;
                 agent.SetDestination(DestinationPoints [selectedDestination].transform.position);
                 DestinationPoints[selectedDestination].GetComponent<Destination> ().isUsed = true;
                 anim.SetBool("isWalking", true);
                 anim.SetBool("isAttacking", false);
                 anim.SetBool("isAlert", false);
                 anim.SetBool("isIdle", false);
                 break;
         }
 
     }
 }



Destination script

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Destination : MonoBehaviour {
 
     public bool isUsed = false;
 }
 

Comment
Add comment · Show 3
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 meat5000 ♦ · Apr 01, 2018 at 01:56 PM 0
Share

Your coroutine invokes itself and contains a while loop.

avatar image kristersdrozds meat5000 ♦ · Apr 01, 2018 at 02:16 PM 0
Share

@meat5000 Hey, thanks for the replay. What would be the correct way to invoke coroutine in this example?

avatar image meat5000 ♦ kristersdrozds · Apr 01, 2018 at 02:22 PM 0
Share

It is possible to run multiple coroutines. Invoking one will not replace one thats running...they will stack up. Coroutines halt the main thread whilst they are running and so having a while loop is a dangerous thing if it is questionable whether the break-out conditions will be met.

It seems to me that this Random$$anonymous$$ovement just needs to be a normal Function which you call to present a new random value. I'm not sure there's any advantage to running this as a coroutine.

0 Replies

· Add your reply
  • Sort: 

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

470 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

Related Questions

How do I stop enemy AI from bumping and entering into my player? 1 Answer

I want to use physics in my game so I am using a rigidbody instead of a character controller. My code is working accept for the mouse look. Can someone please help me I dont know code that well., 0 Answers

Input.GetAxisRaw always returns -0.6 1 Answer

Boss ai help EoW 0 Answers

GoogleVR / C# - How to, with the "pointer click": click 1 move a cube and click 2 move back the cube 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