Unity中如何通过UI显示3D模型解决方案?

这篇具有很好参考价值的文章主要介绍了Unity中如何通过UI显示3D模型解决方案?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:实现将3D模型显示在2DUI上面,实现王者荣耀英雄商城之中英雄展示功能,3D模型可以旋转,添加特效等正常3D功能。

Unity中如何通过UI显示3D模型解决方案?

  • 使用RenderTexture和RawImage做相机映射

  • 使用ScreenSpace Camera渲染摄像机

  • 使用世界空间的UI和模型绑定

使用RenderTexture 和RawImage做相机映射

效果:

那些黑圈圈就是例子特效哦。

Unity中如何通过UI显示3D模型解决方案?

 实现:

  1. Project面板创建一个RawImage
  2. 创建一个Camera,通过设置渲染模式控制模型显示的
  3. 创建一个RenderTexture
  4. 创建一个Cube,设置Layer为指定的布局,比如Model
  5. 将c创建的RenderTexture拖到a创建的RawImage的Texture属性里面
  6. 将c创建的RenderTexture拖到b创建的Camera的Target Texture属性里面
  7. 设置b创建的Camera的Clear Flags 为Solid Color,设置Background属性透明度为0
  8. 之后可以在Canvas里面设置a创建的RawImage的布局和大小来调整相应3D模型

优点:

       可以多模型渲染,可以渲染包括粒子在内的各种3D模型,如果需要显示粒子特效,需要针对性开发对应Shader控制渲染混合方式(如:Blend One OneMinusSrcAlpha),可以再任何UI需要的地方显示,完全和UI一样,层级顺序,列表中显示模型,裁切等等都很方便。

缺点:

       美术效果上,色差问题,和例子效果问题,局限性太大,模型数量不能太多,如果需要实现交互功能也比较麻烦,不能直接使用UI的交互逻辑,需要其他组件的配合,如果人物身上有一些特殊的效果,比如outline描边这样的,放在RenderTexture上就是达不到效果。

使用Screen Space Camera渲染摄像机

效果:

Unity中如何通过UI显示3D模型解决方案?

实现:

  1. 创建Canvas1,用来存放UI资源
  2. 创建Canvas2,用来存放3D模型资源,实现UI交互
  3. 将创建的两个Canvas的Render Mode设置为Screen Space –Camera
  4. 将两个Canvas的Render Camera设为同一个相机
  5. 通过调整Camera的Plane Distance控制哪个在前哪个在后面

优点:

       模型可挂载在Canvas底下,也可以直接在场景中创建,调整大小位置,不影响模型本身的效果显示,和正常3D场景一样,模型本身完全不受限制。

缺点:

       需要去控制Canvas的深度值,有很多问题实现不了,UI上盖模型,模型上盖UI,滑动列表中滑动裁切,需要和场景中模型做分离处理,不然容易混到一块分不清

使用世界空间的UI和模型绑定

Unity中如何通过UI显示3D模型解决方案?

实现:

  1. 创建Canvas
  2. 更改Canvas的RenderMode为WorldSpace
  3. 之后更改Canvas的大小和位置调整到3D模型的后面

优点:

UI完全跟3D组件一样,可以摆在任意位置和任意模型之后,自由度很大。

缺点:

        UI交互功能很麻烦,UI无法适配屏幕大小显示,需要创建整体背景UI的时候还需要将新的Canvas设置为Screen Space Camera模式

在这个实现中比较重要的一点是如果透过UI将点击事件穿透下去,让模型也可以接受到点击事件,这时候我们就需要在UI上挂一个脚本,当接受到点击事件的时候调用PassEvent将事件传下去。

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System.Collections.Generic;
 
public class Test : MonoBehaviour,IPointerClickHandler ,IPointerDownHandler,IPointerUpHandler
{ 
 
    //监听按下
    public void OnPointerDown(PointerEventData eventData)
    {
        PassEvent(eventData,ExecuteEvents.pointerDownHandler);
    }
 
    //监听抬起
    public void OnPointerUp(PointerEventData eventData)
    {
        PassEvent(eventData,ExecuteEvents.pointerUpHandler);
    }
 
    //监听点击
    public void OnPointerClick(PointerEventData eventData)
    {
        PassEvent(eventData,ExecuteEvents.submitHandler);
        PassEvent(eventData,ExecuteEvents.pointerClickHandler);
    }
 
 
    //把事件透下去
    public void  PassEvent<T>(PointerEventData data,ExecuteEvents.EventFunction<T> function)
        where T : IEventSystemHandler
    {
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(data, results); 
        GameObject current = data.pointerCurrentRaycast.gameObject ;
        for(int i =0; i< results.Count;i++)
        {
            if(current!= results[i].gameObject)
            {
                ExecuteEvents.Execute(results[i].gameObject, data,function);
                //RaycastAll后ugui会自己排序,如果你只想响应透下去的最近的一个响应,这里ExecuteEvents.Execute后直接break就行。
            }
        }
    }
 
 
}

如有不准确之处,欢迎大家批评加改正哈。。。 

参考链接:

Unity3D研究院之将UI的点击事件渗透下去(九十) | 雨松MOMO程序研究院 (xuanyusong.com)文章来源地址https://www.toymoban.com/news/detail-431513.html

到了这里,关于Unity中如何通过UI显示3D模型解决方案?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity实现模型显示在UI前面

    1.先创建一个Cube充当人物模型 2.创建一个血条,这边血条用Scrollbar实现,用Scrollbar实现血条的话,需要将里面的参数都清空 血条颜色也通过这边设置   然后再把这个size拉满就可以实现血条效果了,如果要实现掉血效果,直接通过代码调用到这个size进行减少便可以了   3.回归

    2024年02月05日
    浏览(44)
  • Unity3D实现鼠标悬浮UI或物体上显示文字信息

    Unity工具 大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 本篇文章实现一个鼠标悬浮在ui或者物体上显示文字的功能 unity鼠标悬浮ui显示文字 鼠标进入UI执行的 鼠标离开UI执行的 鼠标在ui里滑动执行的 1. 2. 搭建比较简单,各位顺便搭建吧。

    2024年02月04日
    浏览(95)
  • unity 模型显示在UI上 并交互(点击、旋转、缩放)

    项目工程:unity模型显示在UI上并交互(点击、旋转、缩放)资源-CSDN文库 1.在Assets创建 Render Texture(下面会用到),根据需要设置Size 2.创建UIRawImage,并把Render Texture赋上  3.创建相机,如下图: 4.基本UI的准备工作完成,剩下的就是代码了,值得一提:相机我不喜欢单独拿出

    2024年02月11日
    浏览(47)
  • Unity3D通过代码修改RGB值来控制UI与物体的Color颜色

    在实际应用过程中,经常有需要将某一物体颜色修改成特定颜色的情况,此时Color中自带的颜色就不够用了,此时我们就需要通过用代码修改RGB值来控制颜色。 下面以修改TextMeshProUGUI的字体颜色为例 这样直接运行,无论Color后的括号里是什么样的参数,字体颜色大概率为白色

    2024年02月11日
    浏览(64)
  • [unity3d][通过代码]让模型移动,动态改变模型位置,点对点移动

    阅读时长 : 10分钟 阅读难度 : 初级 阅读收获 : 可以在unity自由的完成点对点的移动过程 例子地址 : https://gitee.com/asiworld/unity3d-basic-function-code 直接修改 gameobject 的 position 内容,当然物体实际存在的有localposition和worldposition,具体要使用哪个要看需求是怎么样的 在hierarchy视图中创

    2023年04月24日
    浏览(58)
  • unity的Rendertexture上面显示粒子特效最便捷的解决方案

    一、为什么不显示 1.为什么粒子特效也不显示? 不显示是正常的,因为当前为背景的点设置为A为0时已经被剔除,当前位置粒子特效的颜色也会被剔除。 因为clip发生在融合blend之前,blend发生在所有颜色输出之后的帧缓存。 2.为什么NGUI的Unlit/Premultiplied Colored的shader能正常显示

    2024年02月09日
    浏览(45)
  • Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

    如题:UI在game视图显示没有问题, 在Play状态下,在Sence视图查看UI对象的时候进行放大操作,然后UI就不显示了或者显示不全,缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机问题,但我们的项目最近并没有对相机进行过什么调

    2024年02月03日
    浏览(60)
  • 【Unity】Animator Controller中动画消失 显示问题分析及解决方案

    Unity中的Animator Controller界面突然显示空白,编辑好的动画可以正常播放,但Animator ControllerAnimator Controller界面就是不显示。重启后就再次出现,启动项目后就又消失 可能是Unity缓存问题,重新生成Unity中缓存文件即可。 关闭Unity编辑器 打开项目所在位置的 Library 文件夹 将该文

    2024年02月11日
    浏览(63)
  • unity3d 物体高速运动下穿模的解决方案

    以下是一些解决Unity 3D中物体高速运动下穿模问题的方法: 提高物理引擎的迭代次数:在Unity中,可以通过增加物理引擎的迭代次数来提高碰撞检测的精度。这可以通过修改项目的物理设置来实现。增加迭代次数可以减少物体在高速运动下穿越其他物体的可能性。 增加物理步

    2024年02月16日
    浏览(137)
  • ARM 在Unity3D 中的美术优化解决方案 5.光照

    (注意:虽然我们选择了渐进 CPU 光照贴图,但我们鼓励你试用渐进 GPU 光照贴图并进行性能分析。根据系统 GPU 的不同,性能可能会有所差异。) Unity 引擎提供了三个生成光照贴图的选项 - Enlighten、Progressive CPU lightmapper 和 Progressive GPU lightmapper。在本项目中,我们选择使用渐

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包