赞
踩
基本思想:创建一个摄像机,实时渲染3D模型,将输出的结果展示在UI界面上。
但是摄像机渲染的内容是Render Texture,无法直接显示在UI组件上。
所以需要创建一个Render Texture作为中间件,接收摄像机的输出,并且赋值到UI中,那么就可以选用RawImage组件接收Texture。
接下来就是创建Canvas、Panel、RawImage,Camera、Texture的过程,最终目录结构如下
Texture就生成在资源目录,将摄像机的输出和RawImage的资源指向同一个就行。
最终结果如下,目前已经实现3D模型的显示,那么接下来为它添加旋转功能。
旋转模型的基本思想:
1.在模型显示区域,当鼠标按下时,记录模型当时的角度、鼠标的初始位置,进入旋转状态。
2.在鼠标持续按下时,旋转到对应的位置,这个位置根据鼠标的偏移值来算,如果是水平旋转则看x的偏移,如果是翻转,则看y的偏移,总之根据鼠标的差值计算。
3.在鼠标弹起时,回到正常状态。
代码实现:
- public class AnimModelController : MonoBehaviour,IBeginDragHandler, IEndDragHandler, IDragHandler
- {
- public Transform modelTrans;
-
- [Range(0.1f, 1f)]
- public float rotateScale = 1;
-
- bool isRotate;
- Vector3 startPoint;
- Vector3 startAnglel;
-
-
- public void OnBeginDrag(PointerEventData eventData)
- {
- if (!isRotate)
- {
- isRotate = true;
- startPoint = Input.mousePosition;
- startAnglel = transform.eulerAngles;
- }
- }
-
- public void OnEndDrag(PointerEventData eventData)
- {
- isRotate = false;
- }
-
- public void OnDrag(PointerEventData eventData)
- {
- if (!isRotate)
- return;
-
- var currentPoint = Input.mousePosition;
- var x = startPoint.x - currentPoint.x;
-
- modelTrans.eulerAngles = startAnglel + new Vector3(0, x * rotateScale, 0);
- }
- }
监听鼠标拖拽事件可以实现IBeginDragHandler, IEndDragHandler, IDragHandler接口;
也可以在游戏物体上添加Event Trigger组件,在指定三个拖拽响应的方法。
旋转的灵敏度参数可以通过rotateScale在Inspector调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。