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

本文介绍了如何在Unity中使用摄像机实时渲染3D模型,并通过RenderTexture和RawImage组件将结果显示在UI上。还详细阐述了如何实现模型的鼠标旋转控制,包括开始、持续和结束拖拽事件的处理。
摘要由CSDN通过智能技术生成

基本思想:创建一个摄像机,实时渲染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调整。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值