• 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 eni_cay · Jul 27, 2019 at 11:20 PM · 2drotation2d rotationmouse-drag

rotate 2d circle on z axis ?

i wrote a code that rotates circle on z axis with mouse touch , but the result is like the circle looks at mouse cursor which is not what im looking for , so im going to show you the code samples , code 1 and code 2 : code1 : which what is the one i use for 2D circle or wheel , and its the one that has result of which the wheel rotates by looking at mouse

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class pss_wheel : MonoBehaviour
 {
     [Header("Degree of rotation offset. *360")]
     public float offset = 180.0f;
     Vector3 mPrevPos = Vector3.zero;
     Vector3 mPosDelta = Vector3.zero;
     bool mIsTouching = false;
     void Update()
     {
         if (Input.GetMouseButton(0))
         {
             if (!mIsTouching)
             {
                 mPrevPos = Input.mousePosition;
             }
             mIsTouching = true;    
             mPosDelta = Input.mousePosition - mPrevPos;
             transform.Rotate(transform.up, -Vector3.Dot(mPosDelta, Camera.main.transform.right), Space.Self);   
             Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
             difference.Normalize(); 
             float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;   
             transform.rotation = Quaternion.Euler(0f, 0f, rotationZ - (90 + offset));
         }
         else
         {
             mIsTouching = false;
         }
         mPrevPos = Input.mousePosition;
     }
 }

Code 2 : this one works perfectly fine but for a 3d wheel on a 2d view

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Wheel_physics : MonoBehaviour
 {
     Vector3 mPrevPos = Vector3.zero;
     Vector3 mPosDelta = Vector3.zero;
     bool mIsTouching = false; 
     void Update()
     {
         if (Input.GetMouseButton(0))
         {
             if (!mIsTouching)
             {
                 mPrevPos = Input.mousePosition;
             }
             mIsTouching = true;    
             mPosDelta = Input.mousePosition - mPrevPos;
             transform.Rotate(transform.up, -Vector3.Dot(mPosDelta, Camera.main.transform.right), Space.World);
         }
         else
         {
             mIsTouching = false;
         }
 
         mPrevPos = Input.mousePosition;
     }      
     void OnCollisionEnter(Collision collision)
     {
         if (collision.gameObject.name == "yellow_s")
         {              
             Destroy(collision.gameObject);
         }
     }
 };
 

what im looking for is i want to achieve the results of code 2 but using the 2D wheel , or a way to improve code to give me the same results as code 2 , sorry for the long request , but i'll be appreciated !

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
Best Answer

Answer by eni_cay · Jul 28, 2019 at 04:31 PM

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

public class final_wheel : MonoBehaviour { Vector3 mPrevPos = Vector3.zero; Vector3 mPosDelta = Vector3.zero; bool mIsTouching = false;

 // Update is called once per frame
 void Update()
 {


     if (Input.GetMouseButtonDown(0))
     {
         mPrevPos = Input.mousePosition;
     }
     else if (Input.GetMouseButton(0))
     {
         mPosDelta = Input.mousePosition - mPrevPos;

         Vector3 proj = Camera.main.WorldToScreenPoint(transform.position);

         if (proj.y > Input.mousePosition.y)
         {
             transform.Rotate(transform.forward, Vector3.Dot(mPosDelta, Camera.main.transform.right), Space.World);
         }
         else
         {
             transform.Rotate(transform.forward, -Vector3.Dot(mPosDelta, Camera.main.transform.right), Space.World);
         }

         if (proj.x > Input.mousePosition.x)
         {
             transform.Rotate(Camera.main.transform.forward, -Vector3.Dot(mPosDelta, Camera.main.transform.up), Space.World);
         }
         else
         {
             transform.Rotate(Camera.main.transform.forward, Vector3.Dot(mPosDelta, Camera.main.transform.up), Space.World);
         }

         mPrevPos = Input.mousePosition;
     }

 }

}

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

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

243 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

Related Questions

(2D) rotate object to face movement direction 1 Answer

[2D] Rotations become tighter the further left they are? 1 Answer

How do i rotate my player in moving direction in 2d? 0 Answers

I'm attempting to make a character face the joystick in a top down unity2d game. 1 Answer

2D rotate 90 degrees issue 1 Answer

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges