示例#1
0
        public void Apply()
        {
            {
                m_used.Clear();
                foreach (var kv in m_materialColorMap)
                {
                    var key = MaterialTarget.Create(kv.Key);
                    PreviewMaterialItem item;
                    if (m_materialMap.TryGetValue(key.MaterialName, out item))
                    {
                        // 初期値(コンストラクタで記録)
                        var initial = item.PropMap[kv.Key.BindType].DefaultValues;
                        if (!m_used.Contains(key))
                        {
                            //
                            // m_used に入っていない場合は、このフレームで初回の呼び出しになる。
                            // (Apply はフレームに一回呼ばれる想定)
                            // 初回は、値を初期値に戻す。
                            //
                            item.Material.SetColor(key.ValueName, initial);
                            m_used.Add(key);
                        }

                        // 現在値
                        var current = item.Material.GetVector(key.ValueName);
                        // 変化量
                        var value = (kv.Key.TargetValue - initial) * kv.Value;
                        // 適用
                        item.Material.SetColor(key.ValueName, current + value);
                    }
                    else
                    {
                        // エラー?
                    }
                }
                m_materialColorMap.Clear();
            }

            {
                foreach (var kv in m_materialUVMap)
                {
                    PreviewMaterialItem item;
                    if (m_materialMap.TryGetValue(kv.Key, out item))
                    {
                        //
                        // Standard and MToon use _MainTex_ST as uv0 scale/offset
                        //
                        item.Material.SetVector("_MainTex_ST", kv.Value);
                    }
                }
                m_materialUVMap.Clear();
            }
        }
示例#2
0
        public void Apply()
        {
            // clear
            //RestoreMaterialInitialValues(m_clips);
            m_used.Clear();

            // (binding.Value-Base) * weight を足す
            foreach (var kv in m_materialValueMap)
            {
                var key = MaterialTarget.Create(kv.Key);
                if (!m_used.Contains(key))
                {
                    // restore value
                    Material material;
                    if (m_materialMap.TryGetValue(key.MaterialName, out material))
                    {
                        var value     = kv.Key.BaseValue;
                        var valueName = key.ValueName;
                        if (valueName.EndsWith("_ST_S"))
                        {
                            valueName = valueName.Substring(0, valueName.Length - 2);
                            var v = material.GetVector(valueName);
                            value.y = v.y;
                            value.w = v.w;
                        }
                        else if (valueName.EndsWith("_ST_T"))
                        {
                            valueName = valueName.Substring(0, valueName.Length - 2);
                            var v = material.GetVector(valueName);
                            value.x = v.x;
                            value.z = v.z;
                        }
                        material.SetColor(valueName, value);
                    }
                    m_used.Add(key);
                }

                Setter setter;
                if (m_materialSetterMap.TryGetValue(kv.Key, out setter))
                {
                    setter(kv.Value, false);
                }
            }
            m_materialValueMap.Clear();
        }