zoukankan      html  css  js  c++  java
  • 点击拖动,让物体旋转

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

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

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

    废话不多说,代码

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

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

  • 相关阅读:
    【转】禁用chrome firefox 的 WebRTC功能防止真实IP泄漏
    这是我的主场
    【转】反编译获取任何微信小程序源码(完)
    【转】npm 安装express npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE
    查询最新的邮编地区
    【转】汇编语言入门教程
    Microsoft Windows远程桌面协议中间人攻击漏洞(CVE-2005-1794)漏洞解决方案(Windows server2003)
    IIS隐藏版本号教程(Windows Server 2003)
    Windows Server 2003添加防火墙策略教程
    Tomcat禁用SSLv3和RC4算法
  • 原文地址:https://www.cnblogs.com/SunBool/p/4834516.html
Copyright © 2011-2022 走看看