Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 AlexClarke117 · Aug 12, 2013 at 04:52 PM · mouserotatelerp

Rotate object using mouse, slows down on release

Hi, I'm working on a script so that a sphere will rotate relative to the position of the mouse click and once released will continue spinning but will slow down over time. I have got the sphere rotating on mouse drag so far but I wouldn't know where to begin for the second part. Here is my code:

 using UnityEngine;
 using System.Collections;
     
     public class globeRotate : MonoBehaviour 
     {
         private float rotationSpeed = 15.0F;
         private bool dragging = false;
         private GameObject runningBoyObject;
         private playerRotate myScript;
         
         void Start()
         {
             runningBoyObject = GameObject.Find("Villager");
             myScript = runningBoyObject.GetComponent<playerRotate>();
         }
         
         void FixedUpdate()
         {
             if(myScript.animation.isPlaying == false)
                 myScript.animation.CrossFade("Idle");
         }
         
         void OnMouseDown() 
         {
             dragging = true;
         }
         
         void OnMouseDrag()
         {    
             transform.Rotate((Input.GetAxis("Mouse Y")*rotationSpeed*Time.deltaTime),0,(-Input.GetAxis("Mouse X")*rotationSpeed*Time.deltaTime),Space.World);
             
             myScript.animation.CrossFade("Start_To_Jog");
         }
         void OnMouseUp()
         {
             if(dragging)
             {
                 dragging = false;
                 myScript.animation.CrossFade("Jog_To_Stop");
             }
         }
     }
 
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
Best Answer

Answer by Joyrider · Aug 12, 2013 at 06:21 PM

Okay, that is called inertia. What you want to do is

1/ save the speed your sphere is rotating at just before letting go of the mouse button. My guess would be to always save your rotation value in OnMouseDrag.

myLastKnownSpeed = new Vector3(Input.GetAxis("Mouse Y")*rotationSpeed*Time.deltaTime,0,(-Input.GetAxis("Mouse X")*rotationSpeed*Time.deltaTime));

2/ And once you release the mouse button, (either in update or in a coroutine) substract a value from that speed every frame.

myLastKnownSpeed -= inertialDamp * Time.deltaTime * myLastKnownSpeed;

or any other mathematical calculation that will get you the result you want.

3/ Continue to apply the rotation speed calculated at every frame speed until your speed drops under a given value

 if(myLastKnownSpeed.Magnitude < 0.1f)
     myLastKnownSpeed = Vector3.zero;
 
 transform.Rotate(myLastKnownSpeed);
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 AlexClarke117 · Aug 12, 2013 at 07:30 PM 0
Share

Thank you, I will post back after I try this (:

avatar image
0

Answer by AlexClarke117 · Sep 03, 2013 at 01:10 AM

Just to let you know this is what worked pretty much, here is the code snippet from inside my Update method:

globe.transform.Rotate((move.y*velocity*Time.deltaTime),0,(-move.x*velocity*Time.deltaTime),Space.World);

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

16 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

Related Questions

Camera in fixed position which rotates with player. 0 Answers

A node in a childnode? 1 Answer

change the rotation 1 Answer

Rotate script doesn't work! 1 Answer

Rotating the weapon back using Quaternion.Lerp 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