unity给子物体添加Shader

分享两个自制Shader:http://pan.baidu.com/s/1nuRcF2L

Shader存放路径:\Assets\Resources\Shader\

定义Shader类型:

public enum EnumFbxType
{
    Default,
    TouMing,
    GaoLiang,
}

加载指定Shader:

    private static Shader myTouMing = Shader.Find("My/TouMing");
    private static Shader myDiffuse = Shader.Find("My/Diffuse");

设置物体的Shader:

/// <summary>
    /// 设置模型材质
    /// </summary>
    /// <param name="_obj">模型</param>
    /// <param name="_fbxType">材质类型</param>
    public static void SetObjFbxShader(GameObject _obj, EnumFbxType _fbxType)
    {
        if (_obj == null) return;
        Renderer r = _obj.GetComponent<Renderer>();
        if (r == null) return;
        Material[] mater = r.materials;
        switch (_fbxType)
        {
            case EnumFbxType.Default:
                foreach (Material m in mater)
                {
                    if (m.color.a == 1 || m.color.a == 0.123f)
                    {
                        m.shader = myDiffuse;
                        m.SetFloat("_Glossiness", 0.3f);
                        m.SetFloat("_Metallic", 0);
                        m.SetColor("_Emission", Color.black);
                    }
                    else
                    {
                        m.shader = myTouMing;
                        m.SetColor("_Emission", Color.black);
                    }
                }
                break;
            case EnumFbxType.TouMing:
                foreach (Material m in mater)
                {
                    m.shader = myTouMing;
                    m.SetColor("_Emission", Color.black);
                    if (m.color.a == 1)
                    {
                        Color color = m.color;
                        color.a = 0.123f;
                        m.color = color;
                    }
                }
                break;
            case EnumFbxType.GaoLiang:
                foreach (Material m in mater)
                {
                    m.shader = myDiffuse;
                    m.SetFloat("_Glossiness", 1);
                    m.SetFloat("_Metallic", 0.2f);
                    m.SetColor("_Emission", Color.red);
                }
                break;
        }
    }
时间: 2024-10-12 14:52:51

unity给子物体添加Shader的相关文章

Unity脚本实现添加子物体

主要部分: public GameObject prefab; //使用预制添加子物体 void Start () { //f 为需要添加自物体的对象 GameObject fg = GameObject.Find("f"); //第一种 clone //GameObject _Instance = Instantiate(prefab); //_Instance.transform.parent =fg.transform; //第二种 从Resources里进行加载 GameObj

unity批量获取物体组件修改值,拓展子物体查询

using UnityEngine; using System.Collections; public class Game : MonoBehaviour { // Use this for initialization void Start () { FindMaterials(this.transform); } // 根据 物体名称 获取 物体下的任何地方的子物体 void FindChild(Transform go,string name,ref Transform tr) { if

ZBrush通过遮罩得到子物体的方法

ZBrush中通过遮罩为模型添加子物体的方法简单且方便,我们可以通过按住Ctrl键绘制遮罩结合相关命令创建具有抽出厚度的模型提取出作为子物体附在模型表面.本文将详细介绍在Zbrush中如何通过遮罩得到子物体. 1.在Light Box(灯光盒子)默认的3D工具选择PolySphere(多边形球体)物体,单击Tool>Make PolyMesh3D(工具>创建3D多边形网格)命令,将参数化球体转换为多边形网格,并将其SDiv(细分层级)设置为4. 2.接下来通过绘制遮罩来创建子物体,遮罩的绘制相

保存物体下的子物体信息到Xml 里面

<新手上路>(保存物体下的子物体信息到Xml 里面) 2016-12-20 根据个人特殊需要所写 using UnityEngine;using System.Collections;using UnityEngine.UI;using System.IO;using System.Xml;using System.Collections.Generic;using UnityEditor; public class SaveMapCtr { [MenuItem("Tools/Cre

怎么在ZBrush中通过遮罩得到子物体

ZBrush® 中通过遮罩为模型添加子物体的方法简单且方便,我们可以通过按住Ctrl键绘制遮罩结合相关命令创建具有抽出厚度的模型提取出作为子物体附在模型表面.本文将详细介绍在Zbrush中如何通过遮罩得到子物体. 若有疑问可直接访问:http://www.zbrushcn.com/changjian/zbrush-4r7-zhezhao-ziwuti.html 1.在Light Box(灯光盒子)默认的3D工具选择PolySphere(多边形球体)物体,单击Tool>Make PolyMesh3

【Unity Shaders】Vertex &amp; Fragment Shader入门

写在前面 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface Shader中实现描边效果的弊端,也就是只对表面平缓的模型有效.这是因为我们是依赖法线和视角的点乘结果来进行描边判断的,因此,对于那些平整的表面,它们的法线通常是一个常量或者会发生突变(例如立方体的每个面),这样就会导致最后的效果并非如我们所愿.如下图所示: 因此,我们有一个更好的方法来实现描边效果,也就是通过两个pass进行渲染--首先渲染对象的背面,用黑色略微向外扩展一点,就是我们的描边效果:然后正常渲染正

如何 正确 删除 子物体

这几天做项目的时候发现 自己删除子物体之后,再新建子物体,发现原来的子物体的函数依旧被调用了. 后来看了一下,发现是由于子物体绑定了一个父物体的委托,在销毁的时候没有去除父物体的委托. 但是这个调试 引发了我另外一个思考: 我发现在删除子物体之后,调用 tranform.childcout 属性,发现没有变为0. 删除子物体代码如下: 1 void DetoryChilds(Transform tar) 2 { 3 for (int i = tar.childCount - 1; i >= 0;

遍历子物体

2013-03-12 14:11 1439人阅读 评论(0) 收藏 举报 [javascript] view plaincopyprint? //应用户提问 也给大家分享一下 可以查找某个物体下无限层级的子物体名称 并返回该子物体 //把这个函数放到你的代码中 check代表你要查询的物体 name为名称 如return GetTransform(transform,"bone12"); Transform GetTransform(Transform check,string nam

HackSix 为ViewGroup的子视图添加悦目的动画效果

1.默认情况下他,添加到viewGrop的子视图是直接显示出来的.有一个比较简单的方法可以为这个过程增加动画效果. 2.知识点: 给子视图添加动画效果就用:LayoutAnimationController类,用LayoutAnimationController要强调一点的是不可以给每个子视图指定 不同的动画效果,但可以决定每个子视图显示动画效果的时间. 3.例子: 下面将结合托名都渐变动画(alpha animation)和位移动画(translate animation)演示给ListVie