虚拟仿真实现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控制模型的从上到下消失的主要内容,如果未能解决你的问题,请参考以下文章