当前位置:   article > 正文

unity实现在UI界面上,显示3D模型,并为模型添加鼠标控制旋转功能--unity学习笔记

unity实现在UI界面上,显示3D模型,并为模型添加鼠标控制旋转功能--unity学习笔记

基本思想:创建一个摄像机,实时渲染3D模型,将输出的结果展示在UI界面上。

但是摄像机渲染的内容是Render Texture,无法直接显示在UI组件上。

所以需要创建一个Render Texture作为中间件,接收摄像机的输出,并且赋值到UI中,那么就可以选用RawImage组件接收Texture。

接下来就是创建Canvas、Panel、RawImage,Camera、Texture的过程,最终目录结构如下

Texture就生成在资源目录,将摄像机的输出和RawImage的资源指向同一个就行。

最终结果如下,目前已经实现3D模型的显示,那么接下来为它添加旋转功能。

旋转模型的基本思想:

        1.在模型显示区域,当鼠标按下时,记录模型当时的角度、鼠标的初始位置,进入旋转状态。

        2.在鼠标持续按下时,旋转到对应的位置,这个位置根据鼠标的偏移值来算,如果是水平旋转则看x的偏移,如果是翻转,则看y的偏移,总之根据鼠标的差值计算。

        3.在鼠标弹起时,回到正常状态。

代码实现:

  1. public class AnimModelController : MonoBehaviour,IBeginDragHandler, IEndDragHandler, IDragHandler
  2. {
  3. public Transform modelTrans;
  4. [Range(0.1f, 1f)]
  5. public float rotateScale = 1;
  6. bool isRotate;
  7. Vector3 startPoint;
  8. Vector3 startAnglel;
  9. public void OnBeginDrag(PointerEventData eventData)
  10. {
  11. if (!isRotate)
  12. {
  13. isRotate = true;
  14. startPoint = Input.mousePosition;
  15. startAnglel = transform.eulerAngles;
  16. }
  17. }
  18. public void OnEndDrag(PointerEventData eventData)
  19. {
  20. isRotate = false;
  21. }
  22. public void OnDrag(PointerEventData eventData)
  23. {
  24. if (!isRotate)
  25. return;
  26. var currentPoint = Input.mousePosition;
  27. var x = startPoint.x - currentPoint.x;
  28. modelTrans.eulerAngles = startAnglel + new Vector3(0, x * rotateScale, 0);
  29. }
  30. }

监听鼠标拖拽事件可以实现IBeginDragHandler, IEndDragHandler, IDragHandler接口;

也可以在游戏物体上添加Event Trigger组件,在指定三个拖拽响应的方法。

旋转的灵敏度参数可以通过rotateScale在Inspector调整。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/108878?site
推荐阅读
相关标签
  

闽ICP备14008679号