虚拟仿真实现Slider控制模型的从上到下消失

Posted 恬静的小魔龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟仿真实现Slider控制模型的从上到下消失相关的知识,希望对你有一定的参考价值。

推荐阅读

一、前言

在做仿真项目的时候,会遇到让模型渐隐的效果:【虚拟仿真】Unity3D中模型的渐隐渐现效果实现

这个已经实现。

还有一种效果,是控制模型的消失,比如消失一部分,那么接下来就来看一下怎么做吧。

二、效果


源代码:
https://download.csdn.net/download/q764424567/20105842

三、实现

1、首先新建一个shader,命名为DisappearShader,双击打开编辑:

Shader选哪个都行。

然后编辑代码:

Shader "Unlit/DisappearShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _DisappearOffset ("Disappear Offset",Range(-0.5,0.5)) = 0.5
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;//	模型空间中模型顶点坐标位置,通常是float4类型
                float2 uv : TEXCOORD0;//顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标以此类推,通常是float2或float4
            };

            struct v2f
            {
                float3 uv : TEXCOORD0;//顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标以此类推,通常是float2或float4
                float4 vertex : SV_POSITION;//裁剪空间中顶点坐标,结构体中必须有一个用该语义修饰的变量
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _DisappearOffset;

            v2f vert(appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                //输出的uv中xy存储uv值,z存储用于Clip的参数值
                o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
                //因为模型空间中y值范围为(-0.5,0.5),所以还需要进行偏移以保证裁剪的正确
                o.uv.z = _DisappearOffset - v.vertex.y;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                clip(i.uv.z);
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv.xy);
                return col;
            }
             ENDCG
        }
    }
}

2、新建一个slider用来控制消失:

3、新建脚本Disappear.cs

using UnityEngine;
using UnityEngine.UI;

public class Disappear : MonoBehaviour
{
    public GameObject cube;
    private Material mat;
    public Slider slider;

    void Start()
    {
        //获取材质再修改不会修改原材质
        mat = cube.GetComponent<MeshRenderer>().material;
        slider.onValueChanged.AddListener(value=>SliderValue(value));
    }

    private void SliderValue(float value)
    {
        //_DisappearOffset的值是-0.5 - 0.5
        mat.SetFloat("_DisappearOffset", value-0.5f);
    }
}

4、将对象拖入对应卡槽

5、效果展示

以上是关于虚拟仿真实现Slider控制模型的从上到下消失的主要内容,如果未能解决你的问题,请参考以下文章

从上到下打印二叉树,同节点的从左到右。

python 用于2D阵列的从左到右从上到下遍历的指数生成器

使活动从上到下动画

iOS 加载模式视图从上到下

从上到下 Swift 呈现 ViewController

剑指Offer-从上到下打印二叉树