# 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
{
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 !

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;
}

}
``````

}