团结一致,我有一艘船
而且我也有水:
我想让船漂浮在水上,但是(当然)我得到的是:
有什么好的方法可以将水排除在船外?只是想让船上的水不显示。也许已经有人通过互联网回答了我的问题,但是我不知道我该在谷歌中确切键入什么...我也不知道这个问题的标题,所以请不要怪我标题不清晰。
不是这样的:
我希望它看起来像这样:
我在这里不使用任何物理学,船的y
坐标是恒定的。
前往Doh09:
您的代码似乎有效,我得到的是:
但是当我运行游戏时,得到的却是:
最佳答案
http://wiki.unity3d.com/index.php?title=DepthMask
使用上面链接中的代码,我得到了您在以下图像中看到的结果。
我使用下面的2个脚本来实现它。
SetRenderQueue对象在Awake方法期间设置渲染优先级。呈现队列中的数字越小,意味着它们的优先级越高。
在图片中,船有2500个,深度罩2700和水3000个。尽管我可能只需要设置深度罩,但可能是水域排队,但是您可以尝试一下。
着色器本身(底部脚本)应放在蒙版使用的材质上。然后,您可以将面罩设为船上的子对象,使其始终与之保持在一起,并使船上的水保持隐藏。
SetRenderQueue.cs
using UnityEngine;
[AddComponentMenu("Rendering/SetRenderQueue")]
public class SetRenderQueue : MonoBehaviour {
[SerializeField]
protected int[] m_queues = new int[] { 3000 };
protected void Awake()
{
Material[] materials = GetComponent<Renderer>().materials;
for (int i = 0; i < materials.Length && i < m_queues.Length; ++i)
{
materials[i].renderQueue = m_queues[i];
}
}
}
深度遮罩着色器
Shader "Custom/DepthMaskShader" {
SubShader{
Tags{ "Queue" = "Geometry+10" }
// Don't draw in the RGBA channels; just the depth buffer
ColorMask 0
ZWrite On
// Do nothing specific in the pass:
Pass{}
}
}
为了清楚起见,以下图像显示了层次结构以及没有着色器的蒙版对象。
祝您游戏顺利。