Измените свойства созданного во время выполнения материала, который был создан из пакета активов - PullRequest
0 голосов
/ 03 октября 2018

Мы загружаем наши активы из набора активов.все содержится в комплекте активов.В нашем комплекте ресурсов есть материал с именем light_bulb_tex .мы написали шейдер, вот код шейдера, (этот материал использует этот шейдер):

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Porject/FX/ColorDimmer" {
    Properties {
        _Color ("Color",Color)=(1.0, 1.0, 1.0, 1.0)
        _OffColor ("OffColor",Color)=(0.772, 0.772, 0.772)
        _Intensity("Intensity",Range (0, 1))=0
    }

    CGINCLUDE

        #include "UnityCG.cginc"

        sampler2D _MainTex;
        uniform fixed4 _Color;
        uniform fixed4 _OffColor;
        uniform fixed _Intensity;
        half4 _MainTex_ST;

        struct v2f {
            half4 pos : SV_POSITION;
            half2 uv : TEXCOORD0;
        };

        v2f vert(appdata_full v) {
            v2f o;

            o.pos = UnityObjectToClipPos (v.vertex);    
            o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);

            return o; 
        }

        fixed4 frag( v2f i ) : COLOR {  
            fixed4 texColor= tex2D (_MainTex, i.uv.xy) ;
            //fixed4 colorWithIntensity = 
            return lerp(_OffColor,_Color,_Intensity);
        }

    ENDCG

    SubShader {
    Tags{ "LightMode" = "ForwardBase" }

    Pass {

        CGPROGRAM

        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_precision_hint_fastest 

        ENDCG

        }

    } 
    FallBack Off
}

шейдер также включен в комплекты ресурсов, также он был добавлен в список «Всегда в комплекте шейдеры» от игры.следовательно, мы добавили шейдер ColorDimmer в наш проект.

Поэтому, когда мы загрузим пакеты ресурсов с помощью этого фрагмента кода, мы собираемся создать экземпляры игровых объектов.материал добавляется в экземпляры игровых объектов автоматически с помощью набора ресурсов.

...
/* objectRenderer.material is added to the _instancedGameObject 
from asset bundle. here we want to create
copy of this material. so newMaterial is
just copy of objectRenderer.material with 
it's specific shader (loading from app), in this case ColorDimmer is the shader which will be added to the newMaterial. */

var objectRenderer = _instancedGameObject.GetComponent<Renderer>();
var objectInAssetBundleMaterial = objectRenderer.material;
if (shaderName == "Proejct/FX/ColorDimmer")
{
    Material newMaterial = new Material(Shader.Find("Proejct/FX/ColorDimmer"));
    newMaterial.SetColor("_Color", objectInAssetBundleMaterial.GetColor("_Color"));
    newMaterial.name = System.Guid.NewGuid().ToString();
    objectRenderer.material = newMaterial;
}
...

Я не знаю, почему objectInAssetBundleMaterial.GetColor (_Color) возвращает черный цвет.все в инспекторе выглядит хорошо, материал загружен шейдером правильно.также соответствующий файл mat в комплекте ресурсов определен в YAML следующим образом:

 ....
    m_Colors:
    - _Color: {r: 0.8088235, g: 0.18436417, b: 0.18436417, a: 1}
    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
    - _OffColor: {r: 0.77205884, g: 0.77205884, b: 0.77205884, a: 1}

Вы можете видеть, что _Color не черный.

Как я могу вызвать GetColor, чтобы получить значение _Color?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...