U3D中实时生成材质以及物体。

 

实现效果:可以实时生成材质和物体。并且每个材质的颜色不一样。材质生成之后会从在指定文件夹。

 

直接上代码,大家可以把代码复制黏贴使用,用了之后就知道了:

 

 

using UnityEngine;
using System.Collections;
using UnityEditor;

public class GenterMaterial : MonoBehaviour {

  

    public int maxNumber;
    public Material addMaterial;
    
    Texture2D texture = null;
    float X;
    float Y;
    float Z;
    float colorR;
    float colorG;
    float colorB;
    float number;

    public Color color;
    public int colorChange;

    public float timeInterval = 0.5f;
    private float m_Time = 0;
    // Use this for initialization
    void Start () 
    {
         texture = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/imgs/Displacement2.jpg", typeof(Texture2D));
        AssetDatabase.DeleteAsset("Assets/metial");
        AssetDatabase.CreateFolder("Assets", "metial");
         X = this.transform.position.x;
         Y = this.transform.position.y;
         Z = this.transform.position.z;
         colorR = color.r;
         colorG = color.g;
         colorB = color.b;
         number = (float)colorChange / (maxNumber - 1);


       
    }
    
    public int meshNumber = 0;
    // Update is called once per frame
    void Update () {

        m_Time += Time.deltaTime;
        if (m_Time > timeInterval && meshNumber < maxNumber) {

            meshNumber++;
            GenterBule();
            m_Time = 0;
        }
    }

    float posOffset;
    void GenterBule() {
      
        
            if (colorR <= 1) {
                colorR += number;
            }
            if (colorG <= 1) {
                colorG += number;
            }
            if (colorB <= 1) {
                colorB += number;
            }


            Material mat;
        if (addMaterial == null) {
               mat = new Material(Shader.Find("Transparent/Diffuse"));
               mat.mainTexture = texture;
            posOffset = 1;
        } else {
               mat = new Material(addMaterial);
            posOffset = 2;
        }

           
            mat.color = new Color(colorR, colorG, colorB, 1);

            AssetDatabase.CreateAsset(mat, "Assets/metial/MyMaterial" + meshNumber + ".mat");

            GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        sphere.transform.parent = this.transform;
        sphere.GetComponent<MeshRenderer>().material = mat;
        sphere.transform.position = new Vector3(X, Y, Z);
        X += posOffset;
        if (X >= 10) {
            Y += posOffset;
            X = this.transform.position.x;
        }
    }
}


 

 

 

 

 

 

 

 

代码在文件 Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {} _SpecularTex ("Specular (R) Gloss (G) Anisotropic Mask (B)", 2D) = "gray" {} _BumpMap ("Normal (Normal)", 2D) = "bump" {} _AnisoTex ("Anisotropic Direction (RGB)", 2D) = "bump" {} _AnisoOffset ("Anisotropic Highlight Offset", Range(-1,1)) = -0.2 _Cutoff ("Alpha Cut-Off Threshold", Range(0,1)) = 0.5 } SubShader{ Tags { "RenderType" = "Opaque" } CGPROGRAM struct SurfaceOutputAniso { fixed3 Albedo; fixed3 Normal; fixed4 AnisoDir; fixed3 Emission; half Specular; fixed Gloss; fixed Alpha; }; float _AnisoOffset, _Cutoff; inline fixed4 LightingAniso (SurfaceOutputAniso s, fixed3 lightDir, fixed3 viewDir, fixed atten) { fixed3 h = normalize(normalize(lightDir) + normalize(viewDir)); float NdotL = saturate(dot(s.Normal, lightDir)); fixed HdotA = dot(normalize(s.Normal + s.AnisoDir.rgb), h); float aniso = max(0, sin(radians((HdotA + _AnisoOffset) * 180))); float spec = saturate(dot(s.Normal, h)); spec = saturate(pow(lerp(spec, aniso, s.AnisoDir.a), s.Gloss * 128) * s.Specular); fixed4 c; c.rgb = ((s.Albedo * _LightColor0.rgb * NdotL) + (_LightColor0.rgb * spec)) * (atten * 2); c.a = 1; clip(s.Alpha - _Cutoff); return c; } #pragma surface surf Aniso #pragma target 3.0 struct Input { float2 uv_MainTex; float2 uv_AnisoTex; }; sampler2D _MainTex, _SpecularTex, _BumpMap, _AnisoTex; void surf (Input IN, inout SurfaceOutputAniso o) { fixed4 albedo = tex2D(_MainTex, IN.uv_MainTex); o.Albedo = albedo.rgb; o.Alpha = albedo.a; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex)); fixed3 spec = tex2D(_SpecularTex, IN.uv_MainTex).rgb; o.Specular = spec.r; o.Gloss = spec.g; o.AnisoDir = fixed4(tex2D(_AnisoTex, IN.uv_AnisoTex).rgb, spec.b); } ENDCG } FallBack "Transparent/Cutout/VertexLit" }[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值