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 /
avatar image
0
Question by mirkojpn · Jan 10, 2019 at 02:33 PM · c#rotationquaternioncoroutinelerp

better way to rotate instead Coroutine

hello! i hope somebody can help me to figure out how to make my code better...

i want to be able to rotate my object of 360 degrees, here what i have now

      private IEnumerator FullSwingCoroutine(
          Quaternion start,
          float in_deltatime,
          int id)
      {
          Vector3 startingRot = start.eulerAngles;
          float difference = Mathf.Abs(_playerAngle[id] + 180);
          float end = startingRot.x + 360.0f + difference;
          float t = 0.0f;
          const float duration = 2.0f;
          Quaternion finalRotation = Quaternion.Euler(-180,0.0f,90.0f);
          Vector3 final = finalRotation.eulerAngles;
 
          while (t < duration)
          {
              if(_stopRotation[id])
              {
                  yield break;
              }
              t                    += Time.deltaTime;
              float time            = t / duration;
              float angle           = Mathf.SmoothStep( startingRot.x,end,time );    
              Vector3 fixedRot      = new Vector3 (angle,startingRot.y,startingRot.z );
              _playerAngle[id]      = -angle + 180.0f;
 
              _players[id].transform.rotation = Quaternion.Euler( fixedRot );
              yield return null;
          }
 
      }

but as you can see i want to be able to stop then restart anytime i want, i have one big problem here, because if i don't do something like this.

      private IEnumerator FullSwingCoroutine(
          Quaternion start,
          float in_deltatime,
          int id)
      {
          Vector3 startingRot = start.eulerAngles;
          float difference = Mathf.Abs(_playerAngle[id] + 180);
          float end = startingRot.x + 360.0f + difference;
          if (end > 720)
          {
              end = 720;
          }
          float t = 0.0f;
          const float duration = 2.0f;
          Quaternion finalRotation = Quaternion.Euler(-180,0.0f,90.0f);
          Vector3 final = finalRotation.eulerAngles;
 
          while (t < duration)
          {
              if(_stopRotation[id])
              {
                  yield break;
              }
              t                    += Time.deltaTime;
              float time            = t / duration;
              float angle           = Mathf.SmoothStep( startingRot.x,end,time );    
              Vector3 fixedRot      = new Vector3 (angle,startingRot.y,startingRot.z );
              _playerAngle[id]      = -angle + 180.0f;
 
              _players[id].transform.rotation = Quaternion.Euler( fixedRot );
              yield return null;
          }
 
      }

end variable will increase then i'll get more than just 360 degrees.

another things is Coroutine... i'm not like it so much.. i want to do it in a method so i'll be able to stop then restart it anytime i want.

anyone can help me to make it better and clean?

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 L42yB · Jan 10, 2019 at 05:52 PM

You can stop and restart coroutines.

 Coroutine foo = StartCoroutine(YourFunction());
 
 // Then whenever you want
 if(foo != null)
     StopCoroutine(foo);

The coroutine object will become null when the coroutine finishes. You can repeat as necessary.

Comment
Add comment · Show 8 · 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 mirkojpn · Jan 11, 2019 at 05:37 AM 0
Share

Tthank’s you for your answer.

I’m not able to do that because when i’m trying to start coroutine an error message say that i can’t confrrt from IEnumerator to coroutine

avatar image L42yB mirkojpn · Jan 11, 2019 at 11:01 AM 0
Share

Ah yes sorry you are right. You can only stop it with the Coroutine object.

You can just restart it by doing this again: StartCoroutine(YourFunction());

I will update my answer

avatar image L42yB mirkojpn · Jan 11, 2019 at 11:18 AM 0
Share

Updated it. You should check for nulls on the coroutine object as when the coroutine is finished it will be set to null.

To trigger it again, just call StartCoroutine again.

avatar image mirkojpn · Jan 11, 2019 at 02:43 PM 0
Share

hi! this should work, but as i wrote i need something that i would be able to stop also before it finish, so i must be able to stop coroutine wherever i want then restart it again

avatar image L42yB mirkojpn · Jan 11, 2019 at 02:46 PM 0
Share

As long as you save the Coroutine object when you start it (maybe make it a property on the class) then you can stop it whenever you need to using that reference.

You can tell if it is still running or not by checking if it is null.

avatar image L42yB mirkojpn · Jan 11, 2019 at 02:47 PM 0
Share

You can stop the coroutine from within the IEnumerator code by just using yield break;

avatar image L42yB mirkojpn · Jan 11, 2019 at 02:48 PM 0
Share

Or from outside the IEnumerator code with StopCoroutine

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

582 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

Related Questions

Pinball Flipper using Quaternion.Lerp? 1 Answer

Smoothly Rotate 2D sprite 90 degrees on click 2 Answers

Flip over an object (smooth transition) 3 Answers

Rotation jumping to a different rotation after rotating a certain amount 0 Answers

Quaternion.Lerp shaky while in coroutine? 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