项目中遇到了一个小问题,那就是在下图中,通过点击初一到三十的这个圆盘,然后像拨电话盘一样的旋转他,顺时针和逆时针都要实现
之前做了几次,总是达不到想要的效果,有的是顺时针旋转的时候结果逆时针旋转了,有的是只有顺时针没有逆时针,其实想想 还真有点麻烦,想通了就好了
主要是因为在以中间位置为圆心的时候,鼠标的位置和行走方向都是不一样的,所以需要分成四个象限,每个象限都有正反操作
废话不多说,代码
using UnityEngine; using System.Collections; public class DragDays : MonoBehaviour { Ray ray; public GameObject days; void Start () { xMoon = camera.WorldToScreenPoint(moon.transform.position).x; yMoon = camera.WorldToScreenPoint(moon.transform.position).y; x = days.transform.eulerAngles.x; y = days.transform.eulerAngles.y; z = days.transform.eulerAngles.z; } public GameObject moon; //转盘的欧拉角 float x; float y; float z; //鼠标的位置 float xScreen; float yScreen; //月亮的位置 float xMoon; float yMoon; void Update () { if(Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray,out hit)) { if (hit.transform==days.transform) { xScreen = Input.mousePosition.x; yScreen = Input.mousePosition.y; //分别考虑四个象限 //第一象限 if(xScreen>xMoon&&yScreen>yMoon) { y = y + Input.GetAxis("Mouse X") - Input.GetAxis("Mouse Y"); }//第四象限 else if(xScreen>xMoon&&yScreen<yMoon) { y = y - Input.GetAxis("Mouse X") - Input.GetAxis("Mouse Y"); }//第三象限 else if(xScreen<xMoon&&yScreen<yMoon) { y = y - Input.GetAxis("Mouse X") + Input.GetAxis("Mouse Y"); }//第二象限 else { y = y + Input.GetAxis("Mouse X") + Input.GetAxis("Mouse Y"); } xScreen = Input.mousePosition.x; yScreen = Input.mousePosition.y; } days.transform.eulerAngles = new Vector3(x, y, z); } } } }
各个参数的都有注释,代码就不解释了,应该很明白了