Unity把UGUI在WorldSpace模式下显示到相机最前方

【UGUI】获取Unity中Canvas下的任意UI控件的屏幕坐标(可适用于不同的Canvas Render Mode) Unity屏幕坐标的规则是左下角为原点,然后X向右递增,Y向上递增,区间都是[0,1]。有些时候在做UI上的一些效果的时候,需要知道UI控件所处的屏幕坐标位置,就需要有些做些处理,而不像世界坐标那么容易获得。 还有个问题是Canvas有三种RenderMode,内部的计算规则又不一样。。。 所以在这里记录一下具体的获取UI屏幕坐标的方式。 ScreenSpace-Overlay 可直接获取到position的XY坐标并通过除以屏幕的宽高,映射到屏幕坐标的[0,1]区间: float x = ui.tran 阅读详情

Unity把World模式的UGUI下显示到相机最前方

通过脚本修改Shader

再VR里有时候要把3D的UI显示到相机最前方,加个UI相机会坏事,可以通过修改unity_GUIZTestMode来解决。

测试用例

测试用例如下:
在这里插入图片描述
场景包含一个红色的盒子,一个UI里含有这些元素
在这里插入图片描述

在这里插入图片描述
我们在UI根挂上运行脚本WorldSpaceOverlayUI.cs

脚本如下:

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

[ExecuteInEditMode] //Disable if you don't care about previewing outside of play mode
public class WorldSpaceOverlayUI : MonoBehaviour
{
    private const string shaderTestMode = "unity_GUIZTestMode"; //The magic property we need to set
    [SerializeField] UnityEngine.Rendering.CompareFunction desiredUIComparison = UnityEngine.Rendering.CompareFunction.Always; //If you want to try out other effects
    [Tooltip("Set to blank to automatically populate from the child UI elements")]
    [SerializeField] Graphic[] uiGraphicsToApplyTo;
    [Tooltip("Set to blank to automatically populate from the child UI elements")]
    [SerializeField] TextMeshProUGUI[] uiTextsToApplyTo;
    //Allows us to reuse materials
    private Dictionary<Material, Material> materialMappings = new Dictionary<Material, Material>();
    protected virtual void Start()
    {
        if (uiGraphicsToApplyTo.Length == 0)
        {
            uiGraphicsToApplyTo = gameObject.GetComponentsInChildren<Graphic>();
        }
        if (uiTextsToApplyTo.Length == 0)
        {
            uiTextsToApplyTo = gameObject.GetComponentsInChildren<TextMeshProUGUI>();
        }
        foreach (var graphic in uiGraphicsToApplyTo)
        {
            Material material = graphic.materialForRendering;
            if (material == null)
            {
                Debug.LogError($"{nameof(WorldSpaceOverlayUI)}: skipping target without material {graphic.name}.{graphic.GetType().Name}");
                continue;
            }
            if (!materialMappings.TryGetValue(material, out Material materialCopy))
            {
                materialCopy = new Material(material);
                materialMappings.Add(material, materialCopy);
            }
            materialCopy.SetInt(shaderTestMode, (int)desiredUIComparison);
            graphic.material = materialCopy;
        }
        foreach (var text in uiTextsToApplyTo)
        {
            Material material = text.fontMaterial;
            if (material == null)
            {
                Debug.LogError($"{nameof(WorldSpaceOverlayUI)}: skipping target without material {text.name}.{text.GetType().Name}");
                continue;
            }
            if (!materialMappings.TryGetValue(material, out Material materialCopy))
            {
                materialCopy = new Material(material);
                materialMappings.Add(material, materialCopy);
            }
            materialCopy.SetInt(shaderTestMode, (int)desiredUIComparison);
            text.fontMaterial = materialCopy;
        }
    }
}

在这里插入图片描述

引用
https://discussions.unity.com/t/world-space-canvas-on-top-of-everything/128165/14

Unity URP相机使用简介 使用URP后,相机组件的面板发生了变化,如下图。接下来简单的介绍下URP下的相机使用提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

相关推荐

Unity之canvas

迫切需要了解一下Unity的画布功能。最近在用canvas的时候总是报错。也把这个踩坑过程记录下来。 Canvas属于Unity的UGUI,UGUI提供了强大的可视化编辑,大大提高了GUI的开发效率。 Canvas是所有UI组件的父物体,也就是说每一个UI组件都必须在Canvas下,作为Canvas的子物体,当你创建一个UI控件时,如果在Hierarchy下没有Canvas组件的话,Unity...

Arcobaleno 2万+

Unity3D Shader系列之画虚线方式分析与总结

总结了一下几种画虚线的方式。 ①使用LineRenderer ②代码生成网格画虚线 ③使用片元着色器画虚线 ④使用几何着色器画虚线 ⑤使用UILineRenderer ⑥使用Vectrosity插件

老王的博客 7491

UGUI笔记—Canvas、Image

UGUI中的Canvas和Image

the_vnas的博客 2157

unity3d shader控制渲染顺序,Queue,ZWrite,ZTest

Queue渲染队列: 按照渲染顺序,从先到后进行排序,队列数越小的,越先渲染,队列数越大的,越后渲染。 Background(1000) 最早被渲染的物体的队列。 Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染,也是Unity Shader中默认的渲染队列。 AlphaTest (2450) 有透明通道,需要进行Alpha Test的物体的...

Have a nice day. 4377

UGUI的UGUI渲染层级层深(layer)问题

使用UGUI时,经常需要设置UI上的层级。 1.先来说说我们的问题:由于unity渲染物体时是从上到下直接渲染的,这就导致了渲染出来的效果和我们预期的不一致,因此必须设置层级,指定渲染的先后顺序(层级低的先渲染)才行。 那么问题来了,UGUII并没有NGUI这么方便的提供设置层级的入口。 2.我们必须给UI添加一个组件(Canvas)来设置UI层级 但是坑爹的是:设置完后,层级的问题解决了,但是UI的所有事件被拦截(包括按钮的点击、UI拖拽等等) 3.终极解决方案:给UI再设置一个组件Gra

Peter的博客 5365

【虚拟仿真】Unity3D中如何实现让3D模型显示在UI前面

推荐阅读 优快云主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近有小伙伴在群里问我,如何将3D模型显示在UI前面,比如这样: 我心想使用RawImage进行映射不就行了,结果变成了这样: 让我恨铁不成钢,所以,就总结了这篇文章,希望可以对小伙伴有些帮助。 这篇文章讲解使用两种方法实现3D模型在背景图前: 1、使用UI摄像机 2、.

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 9365

在Unity的UGUI系统里使用Renderer的显示层级研究 (二) Canvas组件之间的显示规则

文章目录1. Canvas的三种模式2. ScreenSpace-Overlay模式下的显示 之前做了一下三维物体的显示层级测试,这一章做一下Canvas之间的相互显示 1. Canvas的三种模式 canvas的显示有三种显示模式,也就是WorldSpace、ScreenSpace-Overlay、ScreenSpace-Camera: ScreenSpace-Overlay 这种模式是Can...

fjjaylz的博客 2606

2024年最新双摄像头的实时视频拼接及目标跟踪(一)_监控视频拼接实时(1),网络相关+C C++三方库的源码分析+数据结构与算法

opencv中采用了SURF,ORB进行特征点提取,如果装的是opencv2.0版本,则可以直接用SURF,如果是3.0版本,则需要下载相应的contrib库进行安装。原理不赘述,给出其实验结果对比和分析,原始图像1SURF特征点提取网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加戳这里获取一个人可以走的很快,但一群人才能走的更远!

m0_51437227的博客 937

Unity基础UGUI学习

2.多个Canvas使用相同Camera时,优先根据SortingLayer显示,当SortingLayer相同时,再次根据OrderInLayer显示。使用 UGUI来开发UI,离不开Canvas组件,所有的 UI 元素,一般都是放在包含 Canvas 组件的节点。Sort Order:Canvas 深度,多个 Canvas时,Sort Order 值大的在上层。Sorting Layer:Canvas深度,可以手动添加,决定显示的优先级,列表下面的优先级越高。这篇文章很详细,可以看看,

wangwen_22的博客 2555

python 爬虫 xpath 存储到数据库

参考

我是张先生 1290

计算机网络自顶向下(第八版)第一章课后习题

电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑;

hiahiakk的博客 2259

【Unity】UGUI的基本介绍

Unity的UGUI(Unity User Interface)是Unity引擎内自带的UI系统,官方称之为UnityUI,是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案。

Xiaoxin的博客 922

零基础玩转华为AP 4050DN-HD:FAT模式家庭无线网络配置实战

本文为零基础用户提供华为AP 4050DN-HD从FIT模式转换为FAT模式的完整实战教程。详细介绍了固件升级、模式转换以及配置家庭无线网络(包括路由、DHCP、Wi-Fi和NAT)的每一步操作,帮助用户将企业级瘦AP改造为高性能家庭胖AP,打造稳定可靠的家庭网络环境。

weixin_29196613的博客 633

Unity UGUI三种模式的详细讲解

UGUI有三种模式分别是Screen Space - Overlay    Screen Space - Camera    World Space 下面分别讲解一下 Screen Space - Overlay 这个模式就好像给Camera最上层蒙上了一个图层,所有的UI显示在这个图层上。特点: 1、无法设置相机,无法将UI于特效区分卡。 2、无其他特殊需求时,这个模式的性能是最优的...

qq_14812585的博客 2069

FX2N-2AD模块实战:从硬件连接到FROM/TO指令编程详解

本文详细解析FX2N-2AD模拟量输入模块的硬件连接与FROM/TO指令编程技巧,涵盖BFM缓冲存储器配置、梯形图程序设计及工程实战经验。通过实例演示如何实现精准信号采集与数据处理,特别针对PLC系统中的常见故障提供解决方案,助力工业自动化工程师高效完成设备调试与维护。

prometheus9mon的博客 508

FastAPI 高级特性:同异步路由函数、依赖注入与后台任务

在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。

qq_43629857的博客 204

unity ugui显示模型_UGUI(一)- Canvas

对于想学习Unity游戏开发的人来说,UI是很好的入门部分。时至今日,越来越多的Unity游戏UI框架从 NGUI 转向 UGUI,两者优势也有很多大神做过实例对比。在接下来的文章里,我会对 UGUI 的基础使用以及实战中容易出现的问题进行讲解。欢迎关注。UGUI 是作为内置功能部分集成到Unity各个版本当中的,不需要额外下载。当我们打开Unity,并在Hierarchy视图中右键菜单中随便创...

weixin_39812186的博客 580

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

Unity:Canvas RenderMode

Canvas三种渲染模式:Screen Space-Overlay、Screen Space-Camera、WorldSpace 1、Screen Space-Overlay模式:屏幕空间-覆盖模式 画布会填满整个屏幕空间,UGUI会永远"覆盖"其他普通的2D和3D画面,无法通过更改Sorting Layer等参数来使普通的2D和3D物体位于UGUI上面。不...

yq398934906的博客 2124

python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为

本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。

斌擎科技 2768

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Unity-Ugui渲染模式

Canvas组件下的RenderMode有3种: Screen Space - Overlay (覆盖模式); Screen Space - Camera (摄像机模式); World Space (世界模式) -----------------------------------------------------------------------...

学海无涯 1571

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Unity3D的UGUI——Canvas之美

Canvas 一句话概括Canvas就是渲染 UI 的组件,UGUI是Unity新支持的2D界面控件,所有的UI控件都需要在包含Canvas组件的物体下边充当子物体,我们可以在GameObject->UI下创建物体时,会自动生成Canvas以及与其对应的EventSystem控件。 Canvas主要包含以下部分:Canvas、Canvas Scaller、Graphic ...

游戏开发、游戏引擎开发、逆向破解爱好者 5116

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity UGUI 让3D模型显示在UI前面进行英雄角色选择之美

第一种方法 第一步 在Project 下 新建一个RenderTexture 第二步 新建一个游戏对象 我这里命名为 Img-player挂上一个RawImage 用来显示人物 拖入刚刚创建的RenderTexture 第三步 新建一个相机 拖入刚刚创建的RenderTexture 将模式改为下面的样子 Camera为正交 Orthographic 将模型拖入此...

游戏开发、游戏引擎开发、逆向破解爱好者 2382

Unity UGUI 让3D模型显示在UI前面进行英雄角色选择的两种方法和RenderMode的三种模式

第一步  在Project 下 新建一个RenderTexture  第二步新建一个游戏对象 我这里命名为 Img-player挂上一个RawImage 用来显示人物  拖入刚刚创建的 RenderTexture  第三步新建一个相机 拖入刚刚创建的 RenderTexture  将模式改为下面的样子   将模型拖入此相机的视野中 如果模型不清楚可以缩放调下面的Size Far参数到合适程度  已...

wsxhking的博客 5196

UGUI(一)- Canvas

    对于想学习Unity游戏开发的人来说,UI是很好的入门部分。时至今日,越来越多的Unity游戏UI框架从 NGUI 转向 UGUI,两者优势也有很多大神做过实例对比。在接下来的文章里,我会对 UGUI 的基础使用以及实战中容易出现的问题进行讲解。欢迎关注。 UGUI 是作为内置功能部分集成到Unity各个版本当中的,不需要额外下载。当我们打开Unity,并在Hierarchy视图中右键...

THE NO.5的博客 823

Unity uGui中Canvas的三种模式

目前unity:Canvas的Render Mode一共有三种模式:Screen Space -OverLay、Screen Space-Camera、World Space。 首先是

Zzzohar的博客 1487
上一篇: Unity下tga和png格式图片打包成AB包大小和加载速度测试
下一篇: C# 中大小端Endian
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值