在船上漂浮在水面上的unity3d问题

时间:2018-02-12 19:01:21

标签: unity3d 3d

团结一致,我有一艘船this is my ship
我也有水:this is my water

我想让船漂浮在水面上,但(当然)我得到的是:ship and water
有没有什么好方法可以将水排出船外?
只是想让船内的水不能显示。
也许我已经通过互联网回答了我的问题,但我不知道我在google中输入的是什么......我有也不知道这个问题的标题,所以请不要因为标题不清楚而责怪我。

看起来不是这样的:
enter image description here
我希望它看起来像这样:
enter image description here

我这里不使用任何物理,船的y坐标是常数。



<到达Doh09: 您的代码似乎有效,我得到的是:enter image description here

但是当我运行游戏时,我得到的是:black cube inside ship

1 个答案:

答案 0 :(得分:3)

http://wiki.unity3d.com/index.php?title=DepthMask

使用上面链接中的代码,我得到了您在下面的图片中看到的结果。

DepthMaskShader

我使用下面的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{}
    }
}

为了清楚起见,这里是一个显示层次结构的图像以及没有着色器的掩码对象。

DepthMaskShader2

祝你好运。