[Add] All in one shader

This commit is contained in:
2026-02-23 22:01:07 +07:00
parent ec0aa86ac2
commit 4f942cd7c0
806 changed files with 401510 additions and 33 deletions
@@ -0,0 +1,87 @@
using System.Collections.Generic;
using UnityEngine;
namespace AllIn13DShader
{
public abstract class AbstractEffectOverride
{
public List<PropertyOverride> propertyOverrides;
public string displayName;
public string propertyName;
public bool overrideEnabled;
public List<EffectKeywordData> keywords;
public AbstractEffectOverride(AllIn13DEffectConfig effectConfig)
{
this.displayName = effectConfig.displayName;
this.propertyName = effectConfig.keywordPropertyName;
this.keywords = new List<EffectKeywordData>(effectConfig.keywords);
this.propertyOverrides = new List<PropertyOverride>();
}
public void AddPropertyOverride(EffectProperty effectProperty, Shader shader)
{
PropertyOverride propertyOverride = new PropertyOverride(this, effectProperty, shader);
AddPropertyOverride(propertyOverride);
}
public void AddPropertyOverride(int propertyIndex, Shader shader)
{
PropertyOverride propertyOverride = new PropertyOverride(this, propertyIndex, shader);
AddPropertyOverride(propertyOverride);
}
private void AddPropertyOverride(PropertyOverride propertyOverride)
{
if (!propertyOverrides.Contains(propertyOverride))
{
propertyOverrides.Add(propertyOverride);
}
}
public virtual void ApplyChangesToMaterial(Material mat)
{
if (overrideEnabled)
{
ApplyMainPropertyChanges(mat);
}
for(int i = 0; i < propertyOverrides.Count; i++)
{
propertyOverrides[i].ApplyChangesToMaterial(mat);
}
}
protected abstract void ApplyMainPropertyChanges(Material mat);
public bool RemovePropertyOverride(PropertyOverride propertyOverrideToRemove)
{
bool res = propertyOverrides.Remove(propertyOverrideToRemove);
return res;
}
public override bool Equals(object obj)
{
bool res = false;
if(obj is AbstractEffectOverride)
{
AbstractEffectOverride abstractEffectOverride = (AbstractEffectOverride)obj;
res = propertyName == abstractEffectOverride.propertyName;
}
return res;
}
public override int GetHashCode()
{
return propertyName.GetHashCode();
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 0611bcd764908134fa1f7a375b5e9e53
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/AbstractEffectOverride.cs
uploadId: 865720
@@ -0,0 +1,33 @@
using UnityEngine;
namespace AllIn13DShader
{
public class EffectEnumOverride : AbstractEffectOverride
{
public string[] enumOptions;
public int index;
public EffectEnumOverride(AllIn13DEffectConfig effectConfig) : base(effectConfig)
{
enumOptions = new string[effectConfig.keywords.Count];
for(int i = 0; i < enumOptions.Length; i++)
{
enumOptions[i] = effectConfig.keywords[i].displayName;
}
}
protected override void ApplyMainPropertyChanges(Material mat)
{
for(int i = 0; i < keywords.Count; i++)
{
mat.DisableKeyword(keywords[i].keyword);
}
mat.EnableKeyword(keywords[index].keyword);
mat.SetFloat(propertyName, (float)index);
MaterialUtils.CheckMaterialShader(mat);
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: f4ad01e8d27a2b3499bce2fe41f386c1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/EffectEnumOverride.cs
uploadId: 865720
@@ -0,0 +1,30 @@
using UnityEngine;
namespace AllIn13DShader
{
public class EffectToggleOverride : AbstractEffectOverride
{
public bool boolValue;
public EffectToggleOverride(AllIn13DEffectConfig effectConfig) : base(effectConfig)
{
}
protected override void ApplyMainPropertyChanges(Material mat)
{
if (boolValue)
{
mat.EnableKeyword(keywords[0].keyword);
mat.SetFloat(propertyName, 1f);
}
else
{
mat.DisableKeyword(keywords[0].keyword);
mat.SetFloat(propertyName, 0f);
}
MaterialUtils.CheckMaterialShader(mat);
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 87a78a29536838242b8abe925b7597bb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/EffectToggleOverride.cs
uploadId: 865720
@@ -0,0 +1,470 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
[System.Serializable]
public class MaterialOverrideData : ScriptableObject
{
public class MaterialOverride
{
public Material sourceMaterial;
public Material previewMaterial;
public MaterialOverride(Material sourceMaterial)
{
this.sourceMaterial = sourceMaterial;
if(sourceMaterial == null)
{
this.previewMaterial = null;
}
else
{
this.previewMaterial = new Material(sourceMaterial);
this.previewMaterial.name = this.previewMaterial.name + "_PREVIEW";
}
}
public void ApplyPreviewToSource()
{
sourceMaterial.CopyMatchingPropertiesFromMaterial(previewMaterial);
}
public bool ApplySourceToPreview()
{
bool res = true;
if (previewMaterial == null || sourceMaterial == null)
{
res = false;
}
else
{
previewMaterial.CopyMatchingPropertiesFromMaterial(sourceMaterial);
}
return res;
}
}
public class RendererOverride
{
public Renderer renderer;
public MaterialOverride[] materialsOverrides;
public Material[] sourceMaterials;
public Material[] previewMaterials;
public RendererOverride(Renderer renderer)
{
this.renderer = renderer;
this.materialsOverrides = new MaterialOverride[renderer.sharedMaterials.Length];
sourceMaterials = new Material[materialsOverrides.Length];
previewMaterials = new Material[materialsOverrides.Length];
for (int i = 0; i < materialsOverrides.Length; i++)
{
materialsOverrides[i] = new MaterialOverride(renderer.sharedMaterials[i]);
sourceMaterials[i] = materialsOverrides[i].sourceMaterial;
previewMaterials[i] = materialsOverrides[i].previewMaterial;
}
}
public void UsePreviewMaterials()
{
if (renderer != null)
{
renderer.sharedMaterials = previewMaterials;
}
}
public void UseMaterialSource()
{
if (renderer != null)
{
renderer.sharedMaterials = sourceMaterials;
}
}
public void ApplyPreviewMaterial()
{
for (int i = 0; i < materialsOverrides.Length; i++)
{
materialsOverrides[i].ApplyPreviewToSource();
renderer.sharedMaterials[i] = materialsOverrides[i].sourceMaterial;
}
}
public void DiscardChanges()
{
renderer.hideFlags = HideFlags.None;
UseMaterialSource();
}
public Material[] GetPreviewMaterials()
{
return previewMaterials;
}
public void CleanPreviewMaterials()
{
for(int i = 0; i < materialsOverrides.Length; i++)
{
MaterialOverride matOverride = materialsOverrides[i];
matOverride.ApplySourceToPreview();
string[] keywords = new string[matOverride.sourceMaterial.shaderKeywords.Length];
matOverride.sourceMaterial.shaderKeywords.CopyTo(keywords, 0);
matOverride.previewMaterial.shaderKeywords = keywords;
}
}
}
public enum ApplyTarget
{
CURRENT_SCENE,
SELECTED_FOLDERS,
ALL_PROJECT,
}
public List<AbstractEffectOverride> effectOverrides;
public List<PropertyOverride> generalPropertiesOverrides;
public RendererOverride[] rendererOverrides;
public ApplyTarget applyTarget;
[SerializeField] private Object[] folders;
public void Initialize()
{
ResetData();
}
public void ResetData()
{
effectOverrides = new List<AbstractEffectOverride>();
generalPropertiesOverrides = new List<PropertyOverride>();
rendererOverrides = new RendererOverride[0];
applyTarget = ApplyTarget.CURRENT_SCENE;
}
public void CreateRendererOverride()
{
Renderer[] renderers = FindObjectsByType<Renderer>(FindObjectsSortMode.None);
for (int i = 0; i < renderers.Length; i++)
{
if (renderers[i] is ParticleSystemRenderer) { continue; }
if (renderers[i].sharedMaterial == null) { continue; }
renderers[i].hideFlags = HideFlags.NotEditable;
RendererOverride rendererOverride = new RendererOverride(renderers[i]);
ArrayUtility.Add(ref rendererOverrides, rendererOverride);
}
}
public List<Material> CollectAffectedMaterials()
{
List<Material> res = new List<Material>();
switch (applyTarget)
{
case ApplyTarget.SELECTED_FOLDERS:
CollectAffectedMaterialsOnSelectedFolders(res);
break;
case ApplyTarget.CURRENT_SCENE:
CollectAffectedMaterialsOnCurrentScene(res);
break;
case ApplyTarget.ALL_PROJECT:
CollectAffectedMaterialsAllProject(res);
break;
}
return res;
}
public void UsePreviewMaterials()
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
rendererOverrides[i].UsePreviewMaterials();
}
}
public void UseMaterialSource()
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
rendererOverrides[i].UseMaterialSource();
}
}
public void EndOverrideProcess()
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
if (rendererOverrides[i].renderer == null) { continue; }
rendererOverrides[i].DiscardChanges();
}
//for(int i = 0; i < rendererOverrides.Length; i++)
//{
// rendererOverrides[i].renderer.hideFlags = HideFlags.None;
//}
//UseMaterialSource();
effectOverrides = new List<AbstractEffectOverride>();
rendererOverrides = new RendererOverride[0];
}
public void ApplyChangesToMaterials(Material[] materials)
{
for (int i = 0; i < materials.Length; i++)
{
ApplyChangesToMaterial(materials[i]);
}
}
public void ApplyChangesToMaterials(List<Material> materials)
{
for(int i = 0; i < materials.Count; i++)
{
ApplyChangesToMaterial(materials[i]);
}
}
public void ApplyChangesToMaterial(Material mat)
{
for (int i = 0; i < effectOverrides.Count; i++)
{
effectOverrides[i].ApplyChangesToMaterial(mat);
}
for (int i = 0; i < generalPropertiesOverrides.Count; i++)
{
generalPropertiesOverrides[i].ApplyChangesToMaterial(mat);
}
}
private void CollectAffectedMaterialsOnCurrentScene(List<Material> affectedMaterials)
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
affectedMaterials.AddRange(rendererOverrides[i].sourceMaterials);
}
}
private void CollectAffectedMaterialsOnSelectedFolders(List<Material> affectedMaterials)
{
HashSet<string> materialsInFolderGUIDs = new HashSet<string>();
for (int i = 0; i < folders.Length; i++)
{
string folderPath = AssetDatabase.GetAssetPath(folders[i]);
if (AssetDatabase.IsValidFolder(folderPath))
{
string[] assetsPathsInFolder = AssetDatabase.FindAssets("t: Material", new string[] { folderPath });
for (int j = 0; j < assetsPathsInFolder.Length; j++)
{
materialsInFolderGUIDs.Add(assetsPathsInFolder[j]);
}
}
}
foreach (string guid in materialsInFolderGUIDs)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
Material mat = AssetDatabase.LoadAssetAtPath<Material>(path);
if (EditorUtils.IsAllIn13DShader(mat.shader))
{
affectedMaterials.Add(mat);
}
}
}
private void CollectAffectedMaterialsAllProject(List<Material> affectedMaterials)
{
string[] materialsGUIDs = AssetDatabase.FindAssets("t: Material");
foreach (string guid in materialsGUIDs)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
Material mat = AssetDatabase.LoadAssetAtPath<Material>(path);
if (EditorUtils.IsAllIn13DShader(mat.shader))
{
affectedMaterials.Add(mat);
}
}
}
public bool IsApplyEnabled()
{
bool res = false;
switch (applyTarget)
{
case ApplyTarget.SELECTED_FOLDERS:
res = (folders != null) && (folders.Length > 0);
break;
case ApplyTarget.CURRENT_SCENE:
res = true;
break;
case ApplyTarget.ALL_PROJECT:
res = true;
break;
}
return res;
}
public AbstractEffectOverride AddEffectOverride(AllIn13DEffectConfig effectConfig)
{
AbstractEffectOverride res = FindEffectOverride(effectConfig.keywordPropertyName);
if (res == null)
{
switch (effectConfig.effectConfigType)
{
case EffectConfigType.EFFECT_ENUM:
res = new EffectEnumOverride(effectConfig);
break;
case EffectConfigType.EFFECT_TOGGLE:
res = new EffectToggleOverride(effectConfig);
break;
}
effectOverrides.Add(res);
}
return res;
}
public void AddCopmleteEffectOverride(AllIn13DEffectConfig effectConfig, Shader shader)
{
AbstractEffectOverride effectOverride = FindEffectOverride(effectConfig.keywordPropertyName);
if(effectOverride == null)
{
effectOverride = AddEffectOverride(effectConfig);
}
for (int i = 0; i < effectConfig.effectProperties.Count; i++)
{
effectOverride.AddPropertyOverride(effectConfig.effectProperties[i], shader);
}
}
public void AddPropertyOverride(AllIn13DEffectConfig effectConfig, EffectProperty effectProperty, Shader shader)
{
AbstractEffectOverride effectOverride = FindEffectOverride(effectConfig.keywordPropertyName);
effectOverride = AddEffectOverride(effectConfig);
effectOverride.AddPropertyOverride(effectProperty.propertyIndex, shader);
}
public void AddGeneralPropertyOverride(int propertyIndex, Shader shader)
{
PropertyOverride propertyOverride = new PropertyOverride(null, propertyIndex, shader);
if (!generalPropertiesOverrides.Contains(propertyOverride))
{
generalPropertiesOverrides.Add(propertyOverride);
}
}
public void RemoveEffectOverride(AbstractEffectOverride effectOverrideToRemove)
{
effectOverrides.Remove(effectOverrideToRemove);
RebuildPreviewMaterial();
}
public void RemovePropertyOverride(PropertyOverride propertyOverride)
{
bool removeSuccessfully = propertyOverride.Remove();
if (!removeSuccessfully)
{
generalPropertiesOverrides.Remove(propertyOverride);
}
}
public void RebuildPreviewMaterial()
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
rendererOverrides[i].CleanPreviewMaterials();
}
ShowPreviewChanges();
}
public void ShowPreviewChanges()
{
for (int i = 0; i < rendererOverrides.Length; i++)
{
RendererOverride rendererOverride = rendererOverrides[i];
rendererOverride.UsePreviewMaterials();
ApplyChangesToMaterials(rendererOverride.previewMaterials);
}
}
public AbstractEffectOverride FindEffectOverride(string effectPropertyName)
{
AbstractEffectOverride res = null;
for(int i = 0; i < effectOverrides.Count; i++)
{
if (effectOverrides[i].propertyName == effectPropertyName)
{
res = effectOverrides[i];
break;
}
}
return res;
}
public bool IsEmpty()
{
bool res = effectOverrides.Count <= 0 && generalPropertiesOverrides.Count <= 0;
return res;
}
public bool DiscardChanges(Renderer[] renderers)
{
bool changes = false;
for(int i = this.rendererOverrides.Length - 1; i >= 0; i--)
{
for(int j = 0; j < renderers.Length; j++)
{
if (this.rendererOverrides[i].renderer == renderers[j])
{
rendererOverrides[i].DiscardChanges();
ArrayUtility.RemoveAt(ref this.rendererOverrides, i);
changes = true;
break;
}
}
}
return changes;
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 74623754e448ca3499d27a22fd49f94a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/MaterialOverrideData.cs
uploadId: 865720
@@ -0,0 +1,43 @@
using UnityEngine;
namespace AllIn13DShader
{
public abstract class OverrideEntry
{
public enum OverrideCategory
{
KEYWORD_TOGGLE,
KEYWORD_ENUM,
COMMON,
GLOBAL_PROPERTY,
}
public OverrideCategory overrideCategory;
public OverrideEntry(OverrideCategory overrideCategory)
{
this.overrideCategory = overrideCategory;
}
public abstract void ApplyChangesToMaterial(Material mat);
public override bool Equals(object obj)
{
bool res = false;
if (obj is OverrideEntry)
{
OverrideEntry overrideEntry = (OverrideEntry)obj;
res = overrideCategory == overrideEntry.overrideCategory;
}
return res;
}
public override int GetHashCode()
{
return overrideCategory.GetHashCode();
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: e130f397ef034734c995ecaed8cb8d4c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/OverrideEntry.cs
uploadId: 865720
@@ -0,0 +1,247 @@
using UnityEngine;
using UnityEngine.Rendering;
namespace AllIn13DShader
{
public class PropertyOverride
{
public string propertyName
{
get; private set;
}
public string displayName
{
get; private set;
}
private AbstractEffectOverride effectOverride;
public ShaderPropertyType shaderPropertyType;
public PropertyOverrideType propertyOverrideType;
public float floatValue;
public int intValue;
public Color colorValue;
public Vector2 rangeLimits;
public Vector4 vectorValue;
public Texture texValue;
public Vector4 tilingAndOffset;
public bool isHDR;
public bool hasTilingAndOffset;
public string[] keywords;
public PropertyOverride(AbstractEffectOverride effectOverride, int propertyIndex, Shader shader)
{
this.effectOverride = effectOverride;
string propDescription = shader.GetPropertyName(propertyIndex);
if(propDescription == "_FogOn")
{
this.propertyOverrideType = PropertyOverrideType.TOGGLE;
this.keywords = new string[1] { "_FOG_ON" };
}
else
{
this.propertyOverrideType = PropertyOverrideType.BASIC;
this.keywords = new string[0];
}
Initialize(propertyIndex, shader);
}
public PropertyOverride(AbstractEffectOverride effectOverride, EffectProperty effectProperty, Shader shader)
{
this.effectOverride = effectOverride;
if (effectProperty.IsToggleProperty())
{
this.propertyOverrideType = PropertyOverrideType.TOGGLE;
}
else if (effectProperty.IsEnumProperty())
{
this.propertyOverrideType = PropertyOverrideType.ENUM;
}
if (this.propertyOverrideType != PropertyOverrideType.BASIC)
{
keywords = new string[effectProperty.propertyKeywords.Length];
for (int i = 0; i < effectProperty.propertyKeywords.Length; i++)
{
keywords[i] = effectProperty.propertyKeywords[i];
}
}
this.isHDR = effectProperty.isHDR;
Initialize(effectProperty, shader);
}
private void Initialize(int propertyIndex, Shader shader)
{
string propertyName = shader.GetPropertyName(propertyIndex);
string displayName = shader.GetPropertyDescription(propertyIndex);
ShaderPropertyType shaderPropertyType = shader.GetPropertyType(propertyIndex);
bool hasTilingAndOffset =
shaderPropertyType == ShaderPropertyType.Texture && !shader.GetPropertyFlags(propertyIndex).HasFlag(ShaderPropertyFlags.NoScaleOffset);
Initialize(propertyIndex, propertyName, displayName, shaderPropertyType, hasTilingAndOffset, shader);
//if (this.shaderPropertyType == ShaderPropertyType.Range)
//{
// this.rangeLimits = shader.GetPropertyRangeLimits(propertyIndex);
//}
}
private void Initialize(EffectProperty effectProperty, Shader shader)
{
Initialize(effectProperty.propertyIndex, effectProperty.propertyName, effectProperty.displayName, effectProperty.shaderPropertyType,
effectProperty.hasTilingAndOffset, shader);
//this.propertyName = shader.GetPropertyName(effectProperty.propertyIndex);
//this.displayName = shader.GetPropertyDescription(effectProperty.propertyIndex);
//this.shaderPropertyType = shader.GetPropertyType(effectProperty.propertyIndex);
//if (this.shaderPropertyType == ShaderPropertyType.Range)
//{
// this.rangeLimits = shader.GetPropertyRangeLimits(effectProperty.propertyIndex);
//}
//InitializeDefaultValues(effectProperty.propertyIndex, shader);
}
private void Initialize(int propertyIndex, string propertyName, string displayName, ShaderPropertyType shaderPropertyType, bool hasTilingAndOffset, Shader shader)
{
this.tilingAndOffset = new Vector4(1f, 1f, 0f, 0f);
this.propertyName = propertyName;
this.displayName = displayName;
this.shaderPropertyType = shaderPropertyType;
this.hasTilingAndOffset = hasTilingAndOffset;
if(shaderPropertyType == ShaderPropertyType.Range)
{
this.rangeLimits = shader.GetPropertyRangeLimits(propertyIndex);
}
InitializeDefaultValues(propertyIndex, shader);
}
private void InitializeDefaultValues(int propertyIndex, Shader shader)
{
switch (shaderPropertyType)
{
case ShaderPropertyType.Range:
case ShaderPropertyType.Float:
this.floatValue = shader.GetPropertyDefaultFloatValue(propertyIndex);
break;
case ShaderPropertyType.Vector:
this.vectorValue = shader.GetPropertyDefaultVectorValue(propertyIndex);
break;
case ShaderPropertyType.Color:
this.colorValue = shader.GetPropertyDefaultVectorValue(propertyIndex);
break;
case ShaderPropertyType.Int:
this.intValue = (int)shader.GetPropertyDefaultFloatValue(propertyIndex);
break;
}
}
public override bool Equals(object obj)
{
bool res = false;
if (obj is PropertyOverride)
{
PropertyOverride propertyOverride = (PropertyOverride)obj;
res = (propertyName == propertyOverride.propertyName);
}
return res;
}
public override int GetHashCode()
{
int res = propertyName.GetHashCode();
return res;
}
public void ApplyChangesToMaterial(Material mat)
{
if(mat == null) { return; }
if (this.propertyOverrideType == PropertyOverrideType.ENUM)
{
for(int i = 0; i < keywords.Length; i++)
{
string kw = (propertyName + "_" + keywords[i]).ToUpperInvariant();
mat.DisableKeyword(kw);
if(i == floatValue)
{
mat.EnableKeyword(kw);
}
}
}
else if(this.propertyOverrideType == PropertyOverrideType.TOGGLE)
{
string kw = keywords[0];
if (floatValue > 0)
{
mat.EnableKeyword(kw);
}
else
{
mat.DisableKeyword(kw);
}
}
switch (shaderPropertyType)
{
case ShaderPropertyType.Float:
case ShaderPropertyType.Range:
mat.SetFloat(propertyName, floatValue);
break;
case ShaderPropertyType.Color:
mat.SetColor(propertyName, colorValue);
break;
case ShaderPropertyType.Texture:
mat.SetTexture(propertyName, texValue);
if (hasTilingAndOffset)
{
string propST = propertyName + "_ST";
mat.SetVector(propST, tilingAndOffset);
}
break;
case ShaderPropertyType.Vector:
mat.SetVector(propertyName, vectorValue);
break;
case ShaderPropertyType.Int:
mat.SetInt(propertyName, intValue);
break;
}
}
public bool Remove()
{
bool res = false;
if(effectOverride != null)
{
res = effectOverride.RemovePropertyOverride(this);
}
return res;
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 108081ac17dcca346914c1f8627b1b27
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/PropertyOverride.cs
uploadId: 865720
@@ -0,0 +1,9 @@
namespace AllIn13DShader
{
public enum PropertyOverrideType
{
BASIC,
TOGGLE,
ENUM,
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: b986e4ec738f7004cb7259afd96aef52
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/PropertyOverrideType.cs
uploadId: 865720
@@ -0,0 +1,175 @@
using System;
using UnityEditor;
using UnityEngine;
namespace AllIn13DShader
{
public class PropertySelectorAuxWindow : EditorWindow
{
public enum SelectionType
{
GLOBAL_PROPERTY,
ADVANCED_PROPERTY,
EFFECT_GROUP,
}
public enum TypeOfPropertyAdded
{
GLOBAL_PROPERTY,
ADVANCED_PROPERTY,
EFFECT_PROPERTY,
EFFECT_MAIN,
}
private PropertiesConfigCollection propertiesConfigCollection;
//private Shader allIn13DShader;
private Shader allIn13DShaderOutline;
//private PropertiesConfig propertiesConfigNormal;
private PropertiesConfig propertiesConfigOutline;
private int effectGroupIdx;
private int effectIdx;
private int globalPropertyIdx;
private int advancedPropertyIdx;
private EffectGroup selectedEffectGroup;
private AllIn13DEffectConfig selectedEffectConfig;
private EffectProperty selectedEffectProperty;
private TypeOfPropertyAdded typeOfPropertyAdded;
private SelectionType selectionType;
private Action<AllIn13DEffectConfig, int, Shader, TypeOfPropertyAdded> propertyOverrideAddedCallback;
private void OnEnable()
{
//this.allIn13DShader = Shader.Find(Constants.SHADER_FULL_NAME_ALLIN13D);
this.allIn13DShaderOutline = Shader.Find(Constants.SHADER_FULL_NAME_ALLIN13D_OUTLINE);
this.effectIdx = 0;
this.globalPropertyIdx = 0;
this.advancedPropertyIdx = 0;
propertiesConfigCollection = EditorUtils.FindAsset<PropertiesConfigCollection>("PropertiesConfigCollection");
propertiesConfigOutline = propertiesConfigCollection.FindPropertiesConfigByShader(allIn13DShaderOutline);
}
public void Setup(Action<AllIn13DEffectConfig, int, Shader, TypeOfPropertyAdded> propertyOverrideAddedCallback)
{
this.propertyOverrideAddedCallback = propertyOverrideAddedCallback;
}
private void OnGUI()
{
DrawEffectGroupSelector();
if(selectionType == SelectionType.EFFECT_GROUP)
{
DrawEffectSelector();
}
else if(selectionType == SelectionType.GLOBAL_PROPERTY)
{
DrawGlobalPropertySelector();
}
else if(selectionType == SelectionType.ADVANCED_PROPERTY)
{
DrawAdvancedPropertySelector();
}
GUILayout.Space(20f);
if (GUILayout.Button("Add"))
{
AddProperty();
}
}
private void DrawEffectGroupSelector()
{
string[] effectsGroupsNames = propertiesConfigOutline.GetEffectGroupsDisplayNames();
ArrayUtility.Insert(ref effectsGroupsNames, 0, "Advanced Properties");
ArrayUtility.Insert(ref effectsGroupsNames, 0, "Global Properties");
effectGroupIdx = EditorGUILayout.Popup("Group", effectGroupIdx, effectsGroupsNames);
if(effectGroupIdx == 0)
{
selectionType = SelectionType.GLOBAL_PROPERTY;
this.selectedEffectGroup = null;
}
else if(effectGroupIdx == 1)
{
selectionType = SelectionType.ADVANCED_PROPERTY;
this.selectedEffectGroup = null;
}
else
{
selectionType = SelectionType.EFFECT_GROUP;
this.selectedEffectGroup = propertiesConfigOutline.effectsGroups[effectGroupIdx - 2];
}
}
private void DrawEffectSelector()
{
string[] effectsNames = selectedEffectGroup.GetEffectsNames();
effectIdx = EditorGUILayout.Popup("Effect", effectIdx, effectsNames);
selectedEffectConfig = selectedEffectGroup.effects[effectIdx];
}
private void DrawGlobalPropertySelector()
{
string[] globalPropertyNames = propertiesConfigOutline.GetGlobalPropertyNames();
globalPropertyIdx = EditorGUILayout.Popup("Property", globalPropertyIdx, globalPropertyNames);
}
private void DrawAdvancedPropertySelector()
{
string[] globalPropertyNames = propertiesConfigOutline.GetAdvancedPropertyNames();
advancedPropertyIdx = EditorGUILayout.Popup("Property", advancedPropertyIdx, globalPropertyNames);
}
private void AddProperty()
{
if(selectionType == SelectionType.GLOBAL_PROPERTY)
{
typeOfPropertyAdded = TypeOfPropertyAdded.GLOBAL_PROPERTY;
}
else if(selectionType == SelectionType.ADVANCED_PROPERTY)
{
typeOfPropertyAdded = TypeOfPropertyAdded.ADVANCED_PROPERTY;
}
else
{
if(selectedEffectProperty == null)
{
typeOfPropertyAdded = TypeOfPropertyAdded.EFFECT_MAIN;
}
else
{
typeOfPropertyAdded = TypeOfPropertyAdded.EFFECT_PROPERTY;
}
}
if (propertyOverrideAddedCallback != null)
{
switch (typeOfPropertyAdded)
{
case TypeOfPropertyAdded.GLOBAL_PROPERTY:
propertyOverrideAddedCallback(selectedEffectConfig, propertiesConfigOutline.singleProperties[globalPropertyIdx], allIn13DShaderOutline, typeOfPropertyAdded);
break;
case TypeOfPropertyAdded.ADVANCED_PROPERTY:
propertyOverrideAddedCallback(selectedEffectConfig, propertiesConfigOutline.advancedProperties[advancedPropertyIdx + 1], allIn13DShaderOutline, typeOfPropertyAdded);
break;
case TypeOfPropertyAdded.EFFECT_MAIN:
propertyOverrideAddedCallback(selectedEffectConfig, -1, allIn13DShaderOutline, typeOfPropertyAdded);
break;
}
}
Close();
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 135c1998be2528b458ad97784b0692ee
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 316173
packageName: All In 1 3D-Shader
packageVersion: 2.72
assetPath: Assets/Plugins/AllIn13DShader/Editor/MaterialOverride/Scripts/PropertySelectorAuxWindow.cs
uploadId: 865720