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 Spy24 · Aug 26, 2019 at 10:47 PM · c#coroutinecoroutineswaypointcoroutine errors

c# Coroutines and Waypoints HELP PLS!!!,C# Coroutine and Waypoints Help pls!!!

Hi Everyone! I was trying to figure out how to make my character in Unity3D to patrol around different waypoints and at each of them, make a 10 second pause, i.e. stop at each waypoint. I tried using coroutines, but something doesn't go right. I am working with Unity 2018.4. Can somebody please help me!

Thanks in advanvce!

 public class ActualWaypointsScript : MonoBehaviour
 {
     public List<Transform> waypoints = new List<Transform>();
     private Transform targetWaypoint;
     private int targetWaypointIndex = 0;
     private float minDistance = 0.1f; 
     private int lastWaypointIndex;
     
     private float movementSpeed = 5.0f;
     private float rotationSpeed = 2.0f;
 
    
     void Start()
     {
        
         targetWaypoint = waypoints[targetWaypointIndex];
         lastWaypointIndex = waypoints.Count - 1;
     }
 
   
     void Update()
     {
         float movementStep = movementSpeed * Time.deltaTime;
         float rotationStep = rotationSpeed * Time.deltaTime;
 
         Vector3 directionToTarget = targetWaypoint.position - transform.position;
         Quaternion rotationToTarget = Quaternion.LookRotation(directionToTarget);
 
         transform.rotation = Quaternion.Slerp(transform.rotation, rotationToTarget, rotationStep);
 
         Debug.DrawRay(transform.position, transform.forward * 50f, Color.green, 0f); //Draws a ray forward in the direction the enemy is facing
         Debug.DrawRay(transform.position, directionToTarget, Color.red, 0f); //Draws a ray in the direction of the current target waypoint
 
         float distance = Vector3.Distance(transform.position, targetWaypoint.position);
         CheckDistanceToWaypoint(distance);
 
         transform.position = Vector3.MoveTowards(transform.position, targetWaypoint.position, movementStep);
 
     }
 
  
     void CheckDistanceToWaypoint(float currentDistance)
     {
         if (currentDistance <= minDistance)
         {
             StartCoroutine(SetNextWaypointDelayed());
         }
     }
 
     IEnumerator SetNextWaypointDelayed()
     {
         yield return new WaitForSeconds(5);
         SetNextWaypoint();
     }
     void SetNextWaypoint() 
     {
         targetWaypointIndex++;
         UpdateTargetWaypoint();
     }
     
     void UpdateTargetWaypoint()
     {
         if (targetWaypointIndex > lastWaypointIndex)
         {
             targetWaypointIndex = 0;
         }
 
         targetWaypoint = waypoints[targetWaypointIndex];
     }
 }

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by goutham12 · Aug 27, 2019 at 04:18 AM

My Simple Aproch is

 IEnumerator Move(List<Transform> wayPoints, Transform _player, float moveSpeed, float waitTime)
 {
     int index = 0;
     float progress = 0.0f;
     Vector3 startPos = _player.position;
     Vector3 targetPos = wayPoints[index].position;
     while (true)
     {
         progress += Time.deltaTime * moveSpeed;
         _player.position = Vector3.Lerp(startPos, targetPos, progress);
         yield return null;
         if (progress >= 1.0f)
         {
             progress = 0.0f;
             index += 1;
             if (index >= wayPoints.Count - 1)
                 index = 0;
             startPos = _player.position;
             targetPos = wayPoints[index].position;
             yield return new WaitForSeconds(waitTime);
         }
     }
 }
Comment
Add comment · Show 1 · 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 Spy24 · Aug 27, 2019 at 10:22 AM 0
Share

Thank you for such a fast reply! Where should I insert this? And where should I paste the StartCoroutine ($$anonymous$$ove(...)); line?

avatar image
0

Answer by Spy24 · Aug 27, 2019 at 10:23 AM

@goutham12

Thank you for such a fast reply! Where should I insert this? And where should I paste the StartCoroutine (Move(...)); line?

Comment
Add comment · Show 6 · 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 goutham12 · Aug 27, 2019 at 10:46 AM 0
Share

Call it on Start like void Start() { StartCoroutine($$anonymous$$ove(waypointslist,_playerTransform,the speed ,how much time it should wait to go to the next way point) }

avatar image Spy24 goutham12 · Aug 27, 2019 at 06:14 PM 0
Share
  void Start()
     {
 
         targetWaypoint = waypoints[targetWaypointIndex];
         lastWaypointIndex = waypoints.Count - 1;
     }
 
 
     void Update()
     {
         float movementStep = movementSpeed * Time.deltaTime;
         float rotationStep = rotationSpeed * Time.deltaTime;
 
         Vector3 directionToTarget = targetWaypoint.position - transform.position;
         Quaternion rotationToTarget = Quaternion.LookRotation(directionToTarget);
 
         transform.rotation = Quaternion.Slerp(transform.rotation, rotationToTarget, rotationStep);
 
         Debug.DrawRay(transform.position, transform.forward * 50f, Color.green, 0f); //Draws a ray forward in the direction the enemy is facing
         Debug.DrawRay(transform.position, directionToTarget, Color.red, 0f); //Draws a ray in the direction of the current target waypoint
 
         float distance = Vector3.Distance(transform.position, targetWaypoint.position);
         CheckDistanceToWaypoint(distance);
 
         transform.position = Vector3.$$anonymous$$oveTowards(transform.position, targetWaypoint.position, movementStep);
     }
 
     void CheckDistanceToWaypoint(float currentDistance)
     {
         if (currentDistance <= $$anonymous$$Distance)
         {
             StartCoroutine($$anonymous$$ove(List<Transform> wayPoints, Transform _player, float moveSpeed, float waitTime));
             targetWaypointIndex++;
             UpdateTargetWaypoint();
         }
 
         
     }
 
 
     IEnumerator $$anonymous$$ove(List<Transform> wayPoints, Transform _player, float moveSpeed, float waitTime)
     {
         int index = 0;
         float progress = 0.0f;
         Vector3 startPos = _player.position;
         Vector3 targetPos = wayPoints[index].position;
         while (true)
         {
             progress += Time.deltaTime * moveSpeed;
             _player.position = Vector3.Lerp(startPos, targetPos, progress);
             yield return null;
             if (progress >= 1.0f)
             {
                 progress = 0.0f;
                 index += 1;
                 if (index >= wayPoints.Count - 1)
                     index = 0;
                 startPos = _player.position;
                 targetPos = wayPoints[index].position;
                 yield return new WaitForSeconds(10);
             }
 
         }
 
     }
 
 
     void UpdateTargetWaypoint()
     {
         if (targetWaypointIndex > lastWaypointIndex)
         {
             targetWaypointIndex = 0;
         }
 
         targetWaypoint = waypoints[targetWaypointIndex];
     }
 }
avatar image Spy24 Spy24 · Aug 27, 2019 at 06:16 PM 0
Share

The StartCoroutine($$anonymous$$ove(...)); is underlined red, for some reason it still doesn't really work. Sorry if I am annoying too much, but I am struggling with this for already five days.

avatar image goutham12 · Aug 28, 2019 at 04:36 AM 1
Share

here am attatching the whole script Just attatch the script to player. don't forget to remove your script that is attatched to the player.

fill the list in the player inspector with your waypoints.

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class $$anonymous$$oveInPath : $$anonymous$$onoBehaviour { public List wayPoints; public float moveSpeed = 1.0f; public float waitTime = 0.5f; void Start() { StartCoroutine($$anonymous$$ove(wayPoints, transform, moveSpeed, waitTime)); } IEnumerator $$anonymous$$ove(List wayPoints, Transform _player, float moveSpeed, float waitTime) { int index = 0; float progress = 0.0f; Vector3 startPos = _player.position; Vector3 targetPos = wayPoints[index].position; while (true) { progress += Time.deltaTime * moveSpeed; _player.position = Vector3.Lerp(startPos, targetPos, progress); yield return null; if (progress >= 1.0f) { progress = 0.0f; index += 1; if (index >= wayPoints.Count - 1) index = 0; startPos = _player.position; targetPos = wayPoints[index].position; yield return new WaitForSeconds(waitTime); } } } }

avatar image Spy24 goutham12 · Aug 28, 2019 at 07:49 PM 0
Share

Oh my God! It worked! Finally! You can't even imagine how grateful I am! Thank You so much!

avatar image goutham12 Spy24 · Aug 29, 2019 at 03:45 AM 0
Share

accept my answer

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

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

Why isn't my coroutine working when I call it from another script. 0 Answers

Need help using coroutines 1 Answer

Array reference being changed without me knowing, or, When a coroutine is run on a monobehavior and then stopped with StopCoroutine (coroutine) it stops the same coroutine being run on another instance of the same monobehavior on a different object. 1 Answer

How do I stop an automatically repeating Coroutine? 1 Answer

Stackoverflow by too many calculations? 2 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