【问题标题】:How to convert Mesh to Sprite in Unity如何在 Unity 中将 Mesh 转换为 Sprite
【发布时间】:2021-07-03 16:17:44
【问题描述】:

我正在制作一款 2D 潜行游戏。玩家有一个显示玩家视线的视锥。目前,视锥是在 2D 游戏中呈现在 2D 精灵前面的网格。我正在尝试使用精灵面具来隐藏不在玩家视线范围内的敌人。

我尝试为此使用精灵蒙版,但精灵蒙版组件需要精灵,而我有一个网格。 Sprite Mask Component

我希望红色方块仅在黄色视野锥后面可见。

fov 网格是在运行时使用光线投射计算的,并根据这些投射的命中点构建。

有没有办法将网格转换为精灵以与精灵蒙版一起使用?

Game

【问题讨论】:

  • 我不确定你能/想要这样做。那将修改每帧可能有点大的图像。您可能想要研究的是在着色器中使用模板缓冲区。无需过多介绍细节,FOV 材质可以有一个带有 Stencil{ Pass incrSat } 的着色器。还有你敌人的着色器 Stencil{ Ref 1 Comp LEqual}。这样做的目的是,当您的 FOV 渲染时,它会在其渲染的所有像素上绘制 +1,而当敌人执行 Comp LEqual 时,它将丢弃所有仍为 0 的像素。不是超级直接,但它可以正常工作:)。

标签: c# unity3d sprite mesh


【解决方案1】:

如果您想要的只是 2D,我不知道您为什么要从 3D 对象开始(我假设是 3D,因为您使用了“锥形”一词)。这就是 2D 聚光灯的用途——为什么不让 2D 照明系统做这种工作,然后使用 2D 光线投射来检测它是否在聚光灯的范围内?看起来您一定已经开始使用 3D,但是如果您想要这种效果,您应该在 2D 中重新开始,并且为自己省去很多争论。否则,您将始终与 3D 网格作斗争以获得 2D 效果。

但如果您必须使用 3D 网格,那么 leo Quint 的评论是正确的。我见过人们在 2D 游戏中使用雨滴效果来做这样的事情。另一种更简单的方法是让红色方块的渲染器仅在它与黄色网格碰撞时打开......

更多详情于 7/14 更新:

我没有示例,但我认为不需要复杂。您在此处使用 2D 光线投射代码:

https://docs.unity3d.com/ScriptReference/Physics2D.RaycastAll.html

然后你检查它击中的所有物体,看看它们是否是你想要出现在灯光下的东西。如果是,则打开该对象的渲染器。我相信你能想到一些效果比仅仅闪烁的对象更好。

2D 聚光灯具有角度宽度,您可以检查可照亮对象中的任何点是否在需要照亮的物体的一定度数(和半径内)范围内。想想一个时钟。假设你的角色在时钟的中间,看着 3,而敌人在 6。随着你的角色转向 6,逐渐进入需要点亮的东西的范围内。

【讨论】:

  • 您能否指出示例 Unity C# 源代码以了解如何执行您的建议? (渲染器与网格碰撞时打开)
  • 添加到评论中。
猜你喜欢
  • 2020-08-26
  • 2017-03-23
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多