扣丁学堂Unity3D培训之实现鼠标控制旋转转盘

2019-02-21 17:19:32 478浏览

今天扣丁学堂Unity3D培训老师给大家介绍一下关于实现鼠标控制旋转转盘的详细介绍,首先我们经常会遇到类似用鼠标旋转转盘打开开关的需求。让用户更加真实的操作设备仪器。接下来说下我的解决方案。

因为鼠标操作是在UI平面上,所以我们要先将被操作的模型的世界坐标转换到屏幕坐标上。代码如下:

ModelScreenPos = camera.WorldToScreenPoint(Model.transform.position);

这里有个声明,这个模型代表的是转盘,而且要保证模型的中心点在转盘中心。然后我们就要计算鼠标以模型在屏幕坐标为中心点的旋转偏移量。我们开始以鼠标按下的瞬间,偏移量为0,然后进行每帧计算偏移量。偏移量也就是旋转角度,很好计算,就是求两个向量的夹角。角度angle=Vector2.Angle(OA,OB);



接下来我们要解决的就是旋转方向是顺时针还是逆时针的。利用unity的四元数公式

q = Quaternion.FromToRotation(OA, OB);

得出的四元数我们可以根据四元数的Z值判断旋转方向是顺时针还是逆时针的。当Z为正时就是逆时针旋转,当为负时就是顺时针啦。可以自己写个向量xy平面向量旋转测试下。然后我们设置模型旋转轴对应的欧拉角分量加上我们获得的旋转角度。功能就实现了。思路大体是这样,但是在实现过程中有很多小的设置需要注意下。下面是我的源代码:

private Vector2 ModelPos;
  private Vector2 mousePos; //当前鼠标位置
  private Vector2 premousePos;//上一帧鼠标位置
  private Quaternion q; 
  private float RotateAngle;
  private Vector3 localEluer; //模型欧拉角存储变量
  
  private bool IsSelect = false;
  void Start()
  {
    ModelPos = camera.WorldToScreenPoint(go.transform.position);
    angle = localEluer.x = info.opening;
    go.transform.localEulerAngles = localEluer;
  }
  
  public virtual void Update()
  {
    if (Input.GetMouseButtonDown(0)&&modelCamera.IsTouch())
    {
      IsSelect = true;
      premousePos = mousePos=Input.mousePosition; //每次重新点击的时候都重置鼠标上一帧点击坐标
    }
    if (Input.GetMouseButton(0)&& IsSelect)
    {
      mousePos = Input.mousePosition;
      RotateAngle = Vector2.Angle(premousePos - ModelPos, mousePos - ModelPos);
      //Debug.Log("RotateAngle+"+RotateAngle);
      if (RotateAngle == 0)
      {
        premousePos = mousePos;
      }
      else
      {
        q = Quaternion.FromToRotation(premousePos - ModelPos, mousePos - ModelPos);
        float k = q.z > 0 ? 1 : -1;
        localEluer.x += k * RotateAngle;
        //Debug.Log(localEluer.x);
        angle = localEluer.x = Mathf.Clamp(localEluer.x, 0, AllowAngle); //这里是项目需要 限制一下旋转圈数
        go.transform.localEulerAngles = localEluer;
        premousePos = mousePos;
      }
    }
    if (Input.GetMouseButtonUp(0))
    {
      IsSelect = false;
    }  
  }


以上就是就是关于扣丁学堂Unity3D培训之实现鼠标控制旋转转盘的全部内容,希望对大家的学习有所帮助,在教育领域,AR应用已经被整合进一些教学法中。不过还需要进一步的研究到底AR会给教师和学生提供那些具体的益处。AR无缝地融合了虚拟数字世界和现实世界,可以将学习体验从2D时代提升到3D时代,尤其是图像、地图和地球仪这类场景。想要了解更多关于VR和AR方面内容的小伙伴可以登录扣丁学堂官网咨询。扣丁学堂不仅有专业的AR培训班供大家学习,还有与时俱进的课程体系和大量的AR在线视频教程让学员免费观看学习,快来一起看看吧。

【关注微信号获取更多的学习资料】



查看更多关于“VR/AR培训资讯的相关文章>>

标签: Unity3D培训 VR培训 Unity3D在线视频 Unity3D学习视频 Unity3D视频教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号