[Unity] 让LineRenderer显示在UI层上方(RenderTexture 、RawImage)

        网易Minigame2022中遇到的问题,项目中有设计点需要使用画笔的功能,已经做好了根据鼠标位置生成LineRenderer线段功能,但出现了一个问题:画板的界面是在Canvas UI层,但是LineRenderer的位置在世界空间中。按照正常显示顺序,UI层在场景渲染之后再渲染,LineRenderer会被画板挡住。

         画板在Canvas里,看不到LineRenderer

        我们可以使用双摄像机去处理这段渲染逻辑,RawImage配合RenderTexture是一种比较方便的解决方法。RawImage可以拖入一个材质纹理,然后将该纹理直接显示在UI层上。

        可以先调整LineRenderer图层,我们在场景中新建一个摄像机,用于专门去渲染Line Renderer,并将摄像机内容输出到一个纹理上。

 

 

         然后在ui里新建RawImage,调整位置拖入纹理,就可以看到这个线段了。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Unity中通过点击RawImage来获取RenderTexture的映射物体需要编写一些脚本逻辑。首先,在场景中创建一个RawImage和一个空物体,并将RawImage设为UI元素。接下来,我们需要在脚本中实现点击RawImage的功能。 首先,在需要实现点击事件的脚本中添加以下代码段: ```csharp using UnityEngine; using UnityEngine.EventSystems; public class ClickRawImage : MonoBehaviour, IPointerClickHandler { public GameObject mappedObject; // 映射的物体 public RenderTexture renderTexture; // 渲染纹理 public void OnPointerClick(PointerEventData eventData) { // 获取点击的位置 Vector2 localCursor; RectTransformUtility.ScreenPointToLocalPointInRectangle(GetComponent<RectTransform>(), eventData.position, null, out localCursor); // 将点击的位置转换为纹理坐标 Vector2 textureCoordinates = new Vector2(localCursor.x / GetComponent<RectTransform>().rect.width + 0.5f, localCursor.y / GetComponent<RectTransform>().rect.height + 0.5f); // 根据纹理坐标获取映射的位置 Ray ray = Camera.main.ViewportPointToRay(textureCoordinates); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // 获取点击位置的映射物体 mappedObject = hit.transform.gameObject; } } } ``` 在脚本中,我们需要实现接口`IPointerClickHandler`来响应RawImage的点击事件。在点击事件回调函数`OnPointerClick`中,首先计算出点击的位置`localCursor`,然后将其转换为纹理坐标`textureCoordinates`。接着,根据纹理坐标通过Raycast来获取点击位置的映射物体,并将其赋值给`mappedObject`。 最后,将该脚本挂载到RawImage上,并将相应的RenderTexture赋值给脚本中的`renderTexture`变量。这样,当点击RawImage时,就可以通过点击位置获取到映射的物体了。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值