• 点击拖动,让物体旋转


    项目中遇到了一个小问题,那就是在下图中,通过点击初一到三十的这个圆盘,然后像拨电话盘一样的旋转他,顺时针和逆时针都要实现

    之前做了几次,总是达不到想要的效果,有的是顺时针旋转的时候结果逆时针旋转了,有的是只有顺时针没有逆时针,其实想想 还真有点麻烦,想通了就好了

    主要是因为在以中间位置为圆心的时候,鼠标的位置和行走方向都是不一样的,所以需要分成四个象限,每个象限都有正反操作

    废话不多说,代码

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

    各个参数的都有注释,代码就不解释了,应该很明白了

  • 相关阅读:
    PHP trim() 函数
    php 计算2个日期的相差天数
    php date('Y-n-j')的和date('Y-m-d')的区别
    转移服务器
    Invalid argument supplied for foreach()解决办法
    wordpress 后台忘记密码怎么办
    qrcode js插件生成微信二维码
    thinkphp5 注释
    tp5 新增完数据,获取id
    resstFul服务文件上传下载
  • 原文地址:https://www.cnblogs.com/SunBool/p/4834516.html
Copyright © 2020-2023  润新知