【问题标题】:Creating cleaning effect in unity3d在unity3d中创建清洁效果
【发布时间】:2015-05-28 11:22:46
【问题描述】:

我正在尝试构建一些简单的游戏(学习),您必须在其中清理对象。 这意味着例如,您的显示器上有灰尘,因此您看不到图像。然后,您可以使用鼠标或手指在显示器周围移动以使图像可见。

所以到目前为止,我得到的是 2 张图像,第一张是监视器图像,第二张是之前的灰尘。当用户向下滑动所有图像时,我已经设法意识到。但是我想做的是,当用户仅在该半径 r 的某个地方点击屏幕时,前面的图像就会消失。

我猜我应该使用图层蒙版,但我不知道该怎么做。

我基本上设法编写了自己的着色器,它只显示具有正确图像的图层,但不知道如何做到这一点,您可以从中获得一些很酷的效果。

任何想法都会被采纳!

【问题讨论】:

  • 维护第三张图片。找到与该图像的交叉点并将其“绘制”为蒙版。只是灰度。然后用它来混合两个图像。

标签: unity3d shader


【解决方案1】:

我会为此使用渲染纹理。它允许您将图像文件用作画笔。而且速度非常快。这个想法是使用渲染纹理作为遮罩。你从黑色纹理开始。每当玩家触摸屏幕时,您都会将画笔图像渲染到此纹理。但此功能(渲染纹理)仅在 Unity Pro 中可用。

如果您不想购买 Unity Pro,仍然可以使用纹理作为遮罩。但这肯定会比渲染纹理慢。慢多少我不知道。选项有:

  1. 创建普通纹理(Texture2D)并在玩家触摸屏幕时使用SetPixelSetPixels 更新蒙版。如果你想这样做,我建议使用比屏幕尺寸小得多的纹理(4x、8x 取决于你想要获得的质量)。否则会很慢。
  2. 创建普通纹理(Texture2D)并使用ReadPixels。这与渲染纹理的工作方式几乎相同,但速度较慢。此技术在here 进行了解释。

使用渲染纹理(需要 Unity Pro)

好的。我做了一个例子:https://drive.google.com/folderview?id=0B60e_iFEZd1-RlB4LVN6NE84clU&usp=sharing 有:

  • 玩家需要清除灰尘的图片:Image.jpg
  • 我们在其上绘制的灰尘图像:Dust.png
  • 我们用作擦除画笔的图像:Brush.png
  • 我们用作灰尘遮罩的渲染纹理:Mask.renderTexture
  • 我们用来更新遮罩的着色器:MaskConstruction.shader
  • 我们用来渲染灰尘的着色器(它结合了 Dust.png 和渲染纹理):Masked.shader
  • 让一切栩栩如生的脚本:MaskCamera.cs
  • 主场景:Main.unity

【讨论】:

  • 这个答案给了我一些起点,我有统一专业人士,所以这不是问题。至少我有一些东西可以开始。谢谢!您是否有更多关于如何实际操作的信息?
  • 看看我做的例子
  • 老兄!太棒了,感谢您的所有努力!
  • @SergeyKrusch 很棒的效果我想知道是否可以使用它进行精确的逆运算并在上面“涂上”灰尘??
  • 有几种方法可以做到这一点。最简单的可能就是将 Masked.shader 片段程序的最后一行更改为 return fixed4(main_color.r, main_color.g, main_color.b, main_color.a * mask_color.a);
【解决方案2】:

我认为这可能会有所帮助。此代码示例的主要目标是使用 Unity 创建除尘/除雾效果。使用纹理遮罩着色器、遮罩构造着色器、渲染纹理、相机遮罩脚本和遮罩相机,您可以创建自己的效果。继续阅读以了解如何下载源代码。它是免费的!

http://studio.openxcell.com/remove-dustfog-object-unity-swipe.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2015-12-03
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多