建设银行网站背景图片,汉化主题做网站效果图,韩国出线了吗,flash做网站的论文俗话说久病成医#xff0c;虽然不是专业技术美术#xff0c;但代码写久了自然会积累一些常用的shader交互方法。零零散散的#xff0c;总结如下#xff1a;
1#xff0c;改变UGUI的材质球属性 有时候我们需要改变ui的一些属性#xff0c;从而实现想要的效果。通常UGUI上… 俗话说久病成医虽然不是专业技术美术但代码写久了自然会积累一些常用的shader交互方法。零零散散的总结如下
1改变UGUI的材质球属性 有时候我们需要改变ui的一些属性从而实现想要的效果。通常UGUI上有如下属性而我们想要改变就需要获取到Material这个属性 这里拿Image来举例 简单的调用示例如下关联测试
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;/// summary
/// 测试UI闪白效果
/// /summary
public class TestUIShan : MonoBehaviour
{public Image image;public Material material;private bool isShan false;// Start is called before the first frame updatevoid Start(){material image.material;}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.A)){isShan !isShan; material.SetFloat(_Switch, isShan ? 1 : 0); }}
}我们可以通过代码看出我们可以直接获取到面板上的Material属性然后通过SetFloat之类的Set方法来改变UGUI的材质球属性。 2改变物体的材质球属性 这里多了一步不是直接改变Material而是先new一个MaterialPropertyBlock然后再将其赋值给Renderer属性。实现示例代码如下 /// summary/// 改变子物体颜色/// /summarypublic void ChangeColor(Transform _tran, bool _isHas){var _render _tran.GetComponentMeshRenderer();if (_render ! null){var _pro new MaterialPropertyBlock();_pro.SetFloat(_IsEnable, _isHas ? 0 : 1);_render.SetPropertyBlock(_pro);}var _render1 _tran.GetComponentSkinnedMeshRenderer();if (_render1 ! null){var _pro new MaterialPropertyBlock();_pro.SetFloat(_IsEnable, _isHas ? 0 : 1);_render1.SetPropertyBlock(_pro);}if (_tran.childCount 0) foreach (Transform idx in _tran) ChangeColor(idx, _isHas);} 这里是通过SetFloat来控制_IsEnable这个属性的开关同理我们可以调用别的set方法来改变对应的属性。 3替换shader 这个就更简单了只需要得到Material的shader属性并替换即可示例代码如下
/// summary/// 替换shader/// /summarypublic void ChangeShader(Transform _tran, Shader _s){if (_tran.name.Contains(diban) || _tran.name.Contains(qiang)) return;//0511佳琪定var _render _tran.GetComponentInChildrenMeshRenderer();if (_render ! null){_render.material.shader _s;}var _render1 _tran.GetComponentInChildrenSkinnedMeshRenderer();if (_render1 ! null){_render1.material.shader _s;}if (_tran.childCount 0) foreach (Transform idx in _tran) ChangeShader(idx, _s);} 关键函数为 _render1.material.shader _s; 直接赋值替换即可。 4批量获取父节点下所有具有某一属性的物体 其实通过2/3函数我们可以看出用递归去获取父物体下所有具有renderer属性物体的方法实现起来实在太繁琐了那么有没有更简单的方法呢 答案是有的使用_tran.GetComponentsInChildren即可示例代码如下
var _ms transform.GetComponentsInChildrenSkinnedMeshRenderer(); 5改变全局shader属性 比如我们有很多使用了某一shader的物体其中包括AI、场景等等如果要频繁改变这些材质球的某一属性不可能遍历去寻找的。 好在引擎为我们提供好了方法示例函数如下 Shader.SetGlobalFloat(_YydInterval, _getTime); 同理我们可以用set来改变更多的属性比如Shader.SetGlobalTexture来改变全局的贴图等等。