Unity 进阶 之 让某个物体(GameObject)总是显示在其他物体的前面,而不被遮挡的处理方法整理

本文介绍了Unity中使特定GameObject始终显示在其他物体前面的三种方法:利用多个Camera的Depth和Culling Mask设置,通过Shader处理Z值,以及结合RenderTexture和多个Camera。详细阐述了每种方法的实现原理、步骤,并提供了不受光照和受光照影响的Shader关键代码示例。
摘要由CSDN通过智能技术生成

Unity 进阶 之 让某个物体(GameObject)总是显示在其他物体的前面,而不被遮挡的处理方法整理

一、简单介绍

Unity中的一些知识点整理。

本节简单介绍让某个物体(GameObject)总是显示在其他物体的前面,而不被遮挡的处理方法,这里主要介绍三种方法,一种是多个 Camera 渲染处理,另一种是使用 shader 进行渲染处理,还有一种思路是 多个Camera + RenderTexture,如果你有新的方式也可以留言,多谢。

二、实现原理

1、多个 Camera 的方法关键是使用:Camera 的 Depth,Culling Mask,和 Clear Flags 设置为 Depth only 来实现

2、通过 Shader 对 z 进行对应处理,从而到达显示在最前面的效果

3、第三种方式是:多个Camera ,使用 RenderTexture 进行获取 Camera (Culling Mask) 指定的图像,可以渲染到 screen space-overlay RawImage,这里只做说明,不详细了

三、注意事项

1、可以根据实际需要可以借鉴使用

四、效果预览

1、多 Camera

2、shader

带光照影响

不带光照影响

五、实现步骤

多个 Camera 实现物体渲染在最前

1、打开 Unity ,新建空工程

2、场景布置如图,添加两个 Camera ,一个用来主渲染,一个用来层次渲染,两个Camera的位置保持一致,所以作为父子 关系,可以根据需要进行调整

3、新添加

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
下面是一个实现Unity VR射线悬置在数组内的物体上,同时让gameobject显示的代码示例: ```csharp public class RaycastController : MonoBehaviour { public GameObject[] objectsToDetect; public GameObject objectToShow; private bool isDetecting = false; private GameObject currentObject = null; void Update() { // 发射射线 RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit)) { // 如果射线碰到了数组内的物体 if (objectsToDetect.Contains(hit.collider.gameObject)) { // 如果当前没有物体被悬置 if (!isDetecting) { // 显示指定的gameobject objectToShow.SetActive(true); // 记录当前悬置的物体 currentObject = hit.collider.gameObject; // 标记当前正在悬置物体 isDetecting = true; } } // 如果射线没有碰到数组内的物体,并且当前正在悬置物体 else if (isDetecting) { // 隐藏指定的gameobject objectToShow.SetActive(false); // 重置当前悬置的物体 currentObject = null; // 标记当前没有正在悬置物体 isDetecting = false; } } // 如果射线没有碰到任何物体,并且当前正在悬置物体 else if (isDetecting) { // 隐藏指定的gameobject objectToShow.SetActive(false); // 重置当前悬置的物体 currentObject = null; // 标记当前没有正在悬置物体 isDetecting = false; } } } ``` 在上面的代码中,我们首先定义了一个数组`objectsToDetect`,用于存储我们想要悬置的物体。我们还定义了一个`objectToShow`,用于在悬置物体显示gameobject。 在`Update`函数中,我们发射一条射线,如果射线碰到了数组内的物体,则显示指定的gameobject,并记录当前悬置的物体。如果射线没有碰到数组内的物体,并且当前正在悬置物体,则隐藏指定的gameobject,并重置当前悬置的物体。如果射线没有碰到任何物体,并且当前正在悬置物体,则同样隐藏指定的gameobject,并重置当前悬置的物体。这样就可以实现Unity VR射线悬置在数组内的物体上,同时让gameobject显示的效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仙魁XAN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值