unity 物体颜色从一端逐渐变到另一端
2017-11-20 14:37
363 查看
这个功能主要来自项目中模拟建筑工人每天施工进度情况,一个大构件工人不可能一天完成,这个构件工人完成多少要求该构件变色百分比就为多少
直接看效果:
变色的走向我们可以通过程序控制
就是和shader简单交互就行,我这里是个简单的demo 大体思路没毛病 还是简单粗暴看代码吧
unity的shader(封装的都不知道啥玩意)真的石乐志,一点不奔放,由于版本这块 查api差点放弃,有点openGl就看的懂,shader很简单
Shader:
核心脚本:
直接看效果:
变色的走向我们可以通过程序控制
就是和shader简单交互就行,我这里是个简单的demo 大体思路没毛病 还是简单粗暴看代码吧
unity的shader(封装的都不知道啥玩意)真的石乐志,一点不奔放,由于版本这块 查api差点放弃,有点openGl就看的懂,shader很简单
Shader:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/dfs" { Properties{ _Color("Color", Color) = (1,1,1,1) _Color1("Color1", Color) = (1,0,0,0) _MainTex("Albedo (RGB)", 2D) = "white" {} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 _Clip("Clip", float) = 0.5//-0.5f(全变色)-->0.5f(全不变色) [KeywordEnum(None, Left, Up, Forward)]_Mode("Mode", Float) = 0//左到右,上到下,前到后 } SubShader{ Tags{ "RenderType" = "Opaque" } LOD 200 CGPROGRAM // 基于物理的标准照明模型,并允许所有光线类型的阴影 #pragma surface surf Standard fullforwardshadows vertex:vert // 使用着色器模型3.0目标,以获得更好的照明 #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; float4 localPos; }; half _Glossiness; half _Metallic; fixed4 _Color; float _Clip; float _Mode; float4 _Color1; void vert(inout appdata_full i, out Input o) { UNITY_INITIALIZE_OUTPUT(Input, o); o.localPos = i.vertex; } void surf(Input i, inout SurfaceOutputStandard o) { /*if (i.localPos.x >= _Clip && _Mode == 1 || i.localPos.y >= _Clip && _Mode == 2 || i.localPos.z >= _Clip && _Mode == 3) { clip(-1); }*/ //老铁啊Albedo是一种颜色纹理哟 fixed4 c = tex2D(_MainTex, i.uv_MainTex) * _Color; if (i.localPos.x >= _Clip && _Mode == 1 || i.localPos.y >= _Clip && _Mode == 2 || i.localPos.z >= _Clip && _Mode == 3) { //clip(-1); o.Albedo = _Color1; } else { o.Albedo = c.rgb; } // 金属感和平滑度滑动条条 o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
核心脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class getshader : MonoBehaviour { private MeshRenderer mat; private Vector4 v41; private float v=0;//颜色值这里随便默认,主要看shader里的 public Vector4 Scolor = new Vector4(0.0f, 1.0f, 0.0f, 1.0f); Material material; void Awake() { //动态赋予材质,懒得创建材质球 material = new Material (Shader.Find("Custom/dfs")); //material.color = Color.yellow; GetComponent<Renderer>().material = material; } void Start() { v = material.GetFloat ("_Clip"); //1 left到right 2 up到down 3 forward到back material.SetFloat ("_Mode",3.0f);//颜色变化方向 } void Update() { //这里播放就放update里吧,懒得写接口获取数据播放变化效果 v = v - 0.001f; material.SetFloat ("_Clip",v);//颜色变化比例 print(v); } }
相关文章推荐
- Unity实现物体逐渐消失
- Unity控制物体旋转修改物体颜色
- UnityShader从入门到放弃(三)将法线的颜色填充给物体
- unity笔记 2 - 克隆物体,延迟执行,定时循环,旋转自身,改变颜色,混合颜色
- Unity中通过按键改变物体颜色
- unity修改3d物体 meterial颜色
- unity 改变物体的颜色
- Unity——通过脚本给物体改变颜色
- Unity调用sprite renderer更改物体颜色
- Unity实现物体逐渐消失(逐渐出现)
- unity 协程 实现物体颜色动态切换
- Unity通过UGUI的Slider调整物体颜色
- unity shader 根据世界坐标,改变物体显示的颜色
- unity3d鼠标经过物体时变颜色,离开时恢复
- Unity通过射线快速变化物体颜色
- Unity 父物体与子物体位置
- [Unity Shader]光照模型对物体的假设
- unity 场景编辑器中 获取点击的物体
- unity 在Mesh中的顶点或者mesh 三角形的中点生成物体
- unity编辑器拓展五——将场景中物体以Obj格式导入max