需求:旋钮调节,用鼠标操作😄
思路:鼠标屏幕上位置,求出当前的旋转角度,求出旋转方向。
public class DragAngleTest : MonoBehaviour
{
[SerializeField] private Transform operationTrans;
[SerializeField] private Transform onTouchPoint;
private Vector3 current_pos;
private Vector3 old_pos;
private Vector3 startPos;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit;
if (Physics.Raycast(ray, out raycastHit))
{
operationTrans = raycastHit.transform;
var screenPos = Input.mousePosition;
screenPos = new Vector3(screenPos.x, screenPos.y, Mathf.Abs(Camera.main.transform.position.z));
startPos = Camera.main.ScreenToWorldPoint(screenPos);
//TODO:测试小球
onTouchPoint.position = raycastHit.point;
//Debug.DrawRay(Camera.main.transform.position, raycastHit.point, Color.red);
GetAngle();
}
}
}
private void GetAngle()
{
current_pos = operationTrans.position - startPos;
var normalDirection = Vector3.Cross(current_pos, old_pos);
var angle = Vector2.Angle(current_pos, old_pos);
if (normalDirection.z > 0)
{
operationTrans.Rotate(Vector3.forward, angle);//顺时针
}
else
if (normalDirection.z < 0)
{
operationTrans.Rotate(Vector3.forward, -angle);//逆时针
}
old_pos = current_pos;
}
}
效果