团结一致,我有一艘船
我也有水:
我想让船漂浮在水面上,但(当然)我得到的是:
有没有什么好方法可以将水排出船外?
只是想让船内的水不能显示。
也许我已经通过互联网回答了我的问题,但我不知道我在google中输入的是什么......我有也不知道这个问题的标题,所以请不要因为标题不清楚而责怪我。
我这里不使用任何物理,船的y
坐标是常数。
答案 0 :(得分:3)
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];
}
}
}
DepthMaskShader
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{}
}
}
为了清楚起见,这里是一个显示层次结构的图像以及没有着色器的掩码对象。
祝你好运。