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(); } }
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(); }