Merge branch 'SXElectricityInformationAcquisition' of http://gitea.umayle.com/huangjiayu/ShanxiKnowledgeBase into SXElectricityInformationAcquisition
This commit is contained in:
commit
535246e0ba
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c4d9487b5d51a5340b44d2df89c0d411
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,675 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace HighlightPlus {
|
||||
|
||||
[CustomEditor(typeof(HighlightEffect))]
|
||||
[CanEditMultipleObjects]
|
||||
public class HighlightEffectEditor : Editor {
|
||||
|
||||
#pragma warning disable 0618
|
||||
|
||||
SerializedProperty profile, profileSync, camerasLayerMask, ignoreObjectVisibility, reflectionProbes, GPUInstancing;
|
||||
SerializedProperty ignore, previewInEditor, effectGroup, effectGroupLayer, effectNameFilter, combineMeshes, alphaCutOff, cullBackFaces, depthClip, normalsOption, subMeshMask;
|
||||
SerializedProperty highlighted, fadeInDuration, fadeOutDuration, flipY, constantWidth;
|
||||
SerializedProperty overlay, overlayMode, overlayColor, overlayAnimationSpeed, overlayMinIntensity, overlayBlending, overlayTexture, overlayTextureUVSpace, overlayTextureScale;
|
||||
SerializedProperty outline, outlineColor, outlineColorStyle, outlineGradient, outlineGradientInLocalSpace, outlineWidth, outlineQuality, outlineDownsampling, outlineVisibility, outlineOptimalBlit, outlineBlitDebug, outlineIndependent;
|
||||
SerializedProperty glow, glowWidth, glowQuality, glowDownsampling, glowHQColor, glowDithering, glowMagicNumber1, glowMagicNumber2, glowAnimationSpeed, glowBlendPasses, glowPasses, glowVisibility, glowBlendMode, glowOptimalBlit, glowBlitDebug, glowIgnoreMask;
|
||||
SerializedProperty innerGlow, innerGlowWidth, innerGlowColor, innerGlowVisibility;
|
||||
SerializedProperty seeThrough, seeThroughOccluderMask, seeThroughOccluderMaskAccurate, seeThroughOccluderThreshold, seeThroughOccluderCheckInterval, seeThroughOccluderCheckIndividualObjects, seeThroughDepthOffset, seeThroughMaxDepth;
|
||||
SerializedProperty seeThroughIntensity, seeThroughTintAlpha, seeThroughTintColor, seeThroughNoise, seeThroughBorder, seeThroughBorderWidth, seeThroughBorderColor, seeThroughOrdered, seeThroughBorderOnly, seeThroughTexture, seeThroughTextureUVSpace, seeThroughTextureScale;
|
||||
SerializedProperty targetFX, targetFXTexture, targetFXColor, targetFXCenter, targetFXRotationSpeed, targetFXInitialScale, targetFXEndScale, targetFXScaleToRenderBounds;
|
||||
SerializedProperty targetFXAlignToGround, targetFXFadePower, targetFXGroundMaxDistance, targetFXGroundLayerMask, targetFXTransitionDuration, targetFXStayDuration, targetFXVisibility;
|
||||
SerializedProperty hitFxInitialIntensity, hitFxMode, hitFxFadeOutDuration, hitFxColor, hitFxRadius;
|
||||
SerializedProperty cameraDistanceFade, cameraDistanceFadeNear, cameraDistanceFadeFar;
|
||||
|
||||
HighlightEffect thisEffect;
|
||||
bool profileChanged, enableProfileApply;
|
||||
bool expandGeneralSettings, expandHighlightOptions;
|
||||
bool showCurrentOccluders;
|
||||
const string HP_GENERAL_SETTINGS = "HPGeneralSettings";
|
||||
const string HP_HIGHLIGHT_OPTIONS = "HPHighlightOptions";
|
||||
GUIStyle foldoutBold;
|
||||
|
||||
void OnEnable() {
|
||||
expandGeneralSettings = EditorPrefs.GetBool("HPGeneralSettings", true);
|
||||
expandHighlightOptions = EditorPrefs.GetBool("HPHighlightOptions", true);
|
||||
|
||||
profile = serializedObject.FindProperty("profile");
|
||||
profileSync = serializedObject.FindProperty("profileSync");
|
||||
camerasLayerMask = serializedObject.FindProperty("camerasLayerMask");
|
||||
reflectionProbes = serializedObject.FindProperty("reflectionProbes");
|
||||
ignoreObjectVisibility = serializedObject.FindProperty("ignoreObjectVisibility");
|
||||
GPUInstancing = serializedObject.FindProperty("GPUInstancing");
|
||||
normalsOption = serializedObject.FindProperty("normalsOption");
|
||||
subMeshMask = serializedObject.FindProperty("subMeshMask");
|
||||
ignore = serializedObject.FindProperty("ignore");
|
||||
previewInEditor = serializedObject.FindProperty("previewInEditor");
|
||||
effectGroup = serializedObject.FindProperty("effectGroup");
|
||||
effectGroupLayer = serializedObject.FindProperty("effectGroupLayer");
|
||||
effectNameFilter = serializedObject.FindProperty("effectNameFilter");
|
||||
combineMeshes = serializedObject.FindProperty("combineMeshes");
|
||||
alphaCutOff = serializedObject.FindProperty("alphaCutOff");
|
||||
cullBackFaces = serializedObject.FindProperty("cullBackFaces");
|
||||
depthClip = serializedObject.FindProperty("depthClip");
|
||||
highlighted = serializedObject.FindProperty("_highlighted");
|
||||
fadeInDuration = serializedObject.FindProperty("fadeInDuration");
|
||||
fadeOutDuration = serializedObject.FindProperty("fadeOutDuration");
|
||||
flipY = serializedObject.FindProperty("flipY");
|
||||
constantWidth = serializedObject.FindProperty("constantWidth");
|
||||
overlay = serializedObject.FindProperty("overlay");
|
||||
overlayMode = serializedObject.FindProperty("overlayMode");
|
||||
overlayColor = serializedObject.FindProperty("overlayColor");
|
||||
overlayAnimationSpeed = serializedObject.FindProperty("overlayAnimationSpeed");
|
||||
overlayMinIntensity = serializedObject.FindProperty("overlayMinIntensity");
|
||||
overlayBlending = serializedObject.FindProperty("overlayBlending");
|
||||
overlayTexture = serializedObject.FindProperty("overlayTexture");
|
||||
overlayTextureUVSpace = serializedObject.FindProperty("overlayTextureUVSpace");
|
||||
overlayTextureScale = serializedObject.FindProperty("overlayTextureScale");
|
||||
outline = serializedObject.FindProperty("outline");
|
||||
outlineColor = serializedObject.FindProperty("outlineColor");
|
||||
outlineColorStyle = serializedObject.FindProperty("outlineColorStyle");
|
||||
outlineGradient = serializedObject.FindProperty("outlineGradient");
|
||||
outlineGradientInLocalSpace = serializedObject.FindProperty("outlineGradientInLocalSpace");
|
||||
outlineWidth = serializedObject.FindProperty("outlineWidth");
|
||||
outlineQuality = serializedObject.FindProperty("outlineQuality");
|
||||
outlineDownsampling = serializedObject.FindProperty("outlineDownsampling");
|
||||
outlineVisibility = serializedObject.FindProperty("outlineVisibility");
|
||||
outlineOptimalBlit = serializedObject.FindProperty("outlineOptimalBlit");
|
||||
outlineBlitDebug = serializedObject.FindProperty("outlineBlitDebug");
|
||||
outlineIndependent = serializedObject.FindProperty("outlineIndependent");
|
||||
glow = serializedObject.FindProperty("glow");
|
||||
glowWidth = serializedObject.FindProperty("glowWidth");
|
||||
glowQuality = serializedObject.FindProperty("glowQuality");
|
||||
glowDownsampling = serializedObject.FindProperty("glowDownsampling");
|
||||
glowHQColor = serializedObject.FindProperty("glowHQColor");
|
||||
glowAnimationSpeed = serializedObject.FindProperty("glowAnimationSpeed");
|
||||
glowBlendPasses = serializedObject.FindProperty("glowBlendPasses");
|
||||
glowDithering = serializedObject.FindProperty("glowDithering");
|
||||
glowMagicNumber1 = serializedObject.FindProperty("glowMagicNumber1");
|
||||
glowMagicNumber2 = serializedObject.FindProperty("glowMagicNumber2");
|
||||
glowAnimationSpeed = serializedObject.FindProperty("glowAnimationSpeed");
|
||||
glowPasses = serializedObject.FindProperty("glowPasses");
|
||||
glowVisibility = serializedObject.FindProperty("glowVisibility");
|
||||
glowBlendMode = serializedObject.FindProperty("glowBlendMode");
|
||||
glowOptimalBlit = serializedObject.FindProperty("glowOptimalBlit");
|
||||
glowBlitDebug = serializedObject.FindProperty("glowBlitDebug");
|
||||
glowIgnoreMask = serializedObject.FindProperty("glowIgnoreMask");
|
||||
innerGlow = serializedObject.FindProperty("innerGlow");
|
||||
innerGlowColor = serializedObject.FindProperty("innerGlowColor");
|
||||
innerGlowWidth = serializedObject.FindProperty("innerGlowWidth");
|
||||
innerGlowVisibility = serializedObject.FindProperty("innerGlowVisibility");
|
||||
seeThrough = serializedObject.FindProperty("seeThrough");
|
||||
seeThroughOccluderMask = serializedObject.FindProperty("seeThroughOccluderMask");
|
||||
seeThroughOccluderMaskAccurate = serializedObject.FindProperty("seeThroughOccluderMaskAccurate");
|
||||
seeThroughOccluderThreshold = serializedObject.FindProperty("seeThroughOccluderThreshold");
|
||||
seeThroughOccluderCheckInterval = serializedObject.FindProperty("seeThroughOccluderCheckInterval");
|
||||
seeThroughOccluderCheckIndividualObjects = serializedObject.FindProperty("seeThroughOccluderCheckIndividualObjects");
|
||||
seeThroughDepthOffset = serializedObject.FindProperty("seeThroughDepthOffset");
|
||||
seeThroughMaxDepth = serializedObject.FindProperty("seeThroughMaxDepth");
|
||||
seeThroughIntensity = serializedObject.FindProperty("seeThroughIntensity");
|
||||
seeThroughTintAlpha = serializedObject.FindProperty("seeThroughTintAlpha");
|
||||
seeThroughTintColor = serializedObject.FindProperty("seeThroughTintColor");
|
||||
seeThroughNoise = serializedObject.FindProperty("seeThroughNoise");
|
||||
seeThroughBorder = serializedObject.FindProperty("seeThroughBorder");
|
||||
seeThroughBorderWidth = serializedObject.FindProperty("seeThroughBorderWidth");
|
||||
seeThroughBorderColor = serializedObject.FindProperty("seeThroughBorderColor");
|
||||
seeThroughOrdered = serializedObject.FindProperty("seeThroughOrdered");
|
||||
seeThroughBorderOnly = serializedObject.FindProperty("seeThroughBorderOnly");
|
||||
seeThroughTexture = serializedObject.FindProperty("seeThroughTexture");
|
||||
seeThroughTextureScale = serializedObject.FindProperty("seeThroughTextureScale");
|
||||
seeThroughTextureUVSpace = serializedObject.FindProperty("seeThroughTextureUVSpace");
|
||||
targetFX = serializedObject.FindProperty("targetFX");
|
||||
targetFXTexture = serializedObject.FindProperty("targetFXTexture");
|
||||
targetFXRotationSpeed = serializedObject.FindProperty("targetFXRotationSpeed");
|
||||
targetFXInitialScale = serializedObject.FindProperty("targetFXInitialScale");
|
||||
targetFXEndScale = serializedObject.FindProperty("targetFXEndScale");
|
||||
targetFXScaleToRenderBounds = serializedObject.FindProperty("targetFXScaleToRenderBounds");
|
||||
targetFXAlignToGround = serializedObject.FindProperty("targetFXAlignToGround");
|
||||
targetFXFadePower = serializedObject.FindProperty("targetFXFadePower");
|
||||
targetFXGroundMaxDistance = serializedObject.FindProperty("targetFXGroundMaxDistance");
|
||||
targetFXGroundLayerMask = serializedObject.FindProperty("targetFXGroundLayerMask");
|
||||
targetFXColor = serializedObject.FindProperty("targetFXColor");
|
||||
targetFXCenter = serializedObject.FindProperty("targetFXCenter");
|
||||
targetFXTransitionDuration = serializedObject.FindProperty("targetFXTransitionDuration");
|
||||
targetFXStayDuration = serializedObject.FindProperty("targetFXStayDuration");
|
||||
targetFXVisibility = serializedObject.FindProperty("targetFXVisibility");
|
||||
hitFxInitialIntensity = serializedObject.FindProperty("hitFxInitialIntensity");
|
||||
hitFxMode = serializedObject.FindProperty("hitFxMode");
|
||||
hitFxFadeOutDuration = serializedObject.FindProperty("hitFxFadeOutDuration");
|
||||
hitFxColor = serializedObject.FindProperty("hitFxColor");
|
||||
hitFxRadius = serializedObject.FindProperty("hitFxRadius");
|
||||
cameraDistanceFade = serializedObject.FindProperty("cameraDistanceFade");
|
||||
cameraDistanceFadeNear = serializedObject.FindProperty("cameraDistanceFadeNear");
|
||||
cameraDistanceFadeFar = serializedObject.FindProperty("cameraDistanceFadeFar");
|
||||
|
||||
thisEffect = (HighlightEffect)target;
|
||||
thisEffect.Refresh();
|
||||
}
|
||||
|
||||
private void OnDisable() {
|
||||
EditorPrefs.SetBool(HP_GENERAL_SETTINGS, expandGeneralSettings);
|
||||
EditorPrefs.SetBool(HP_HIGHLIGHT_OPTIONS, expandHighlightOptions);
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI() {
|
||||
bool isManager = IsDefaultEffectUsedByManager();
|
||||
EditorGUILayout.Separator();
|
||||
serializedObject.Update();
|
||||
|
||||
if (foldoutBold == null) {
|
||||
foldoutBold = new GUIStyle(EditorStyles.foldout);
|
||||
foldoutBold.fontStyle = FontStyle.Bold;
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
HighlightProfile prevProfile = (HighlightProfile)profile.objectReferenceValue;
|
||||
EditorGUILayout.PropertyField(profile, new GUIContent("Profile", "Create or load stored presets."));
|
||||
if (profile.objectReferenceValue != null) {
|
||||
|
||||
if (prevProfile != profile.objectReferenceValue) {
|
||||
profileChanged = true;
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUILayout.Label("", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
if (GUILayout.Button(new GUIContent("Create", "Creates a new profile which is a copy of the current settings."), GUILayout.Width(60))) {
|
||||
CreateProfile();
|
||||
profileChanged = false;
|
||||
enableProfileApply = false;
|
||||
GUIUtility.ExitGUI();
|
||||
return;
|
||||
}
|
||||
if (GUILayout.Button(new GUIContent("Load", "Updates settings with the profile configuration."), GUILayout.Width(60))) {
|
||||
profileChanged = true;
|
||||
}
|
||||
if (!enableProfileApply)
|
||||
GUI.enabled = false;
|
||||
if (GUILayout.Button(new GUIContent("Save", "Updates profile configuration with changes in this inspector."), GUILayout.Width(60))) {
|
||||
enableProfileApply = false;
|
||||
profileChanged = false;
|
||||
thisEffect.profile.Save(thisEffect);
|
||||
EditorUtility.SetDirty(thisEffect.profile);
|
||||
GUIUtility.ExitGUI();
|
||||
return;
|
||||
}
|
||||
GUI.enabled = true;
|
||||
if (GUILayout.Button(new GUIContent("Locate", "Finds the profile in the project"), GUILayout.Width(60))) {
|
||||
if (thisEffect.profile != null) {
|
||||
Selection.activeObject = thisEffect.profile;
|
||||
EditorGUIUtility.PingObject(thisEffect.profile);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.PropertyField(profileSync, new GUIContent("Sync With Profile", "If disabled, profile settings will only be loaded when clicking 'Load' which allows you to customize settings after loading a profile and keep those changes."));
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
} else {
|
||||
if (GUILayout.Button(new GUIContent("Create", "Creates a new profile which is a copy of the current settings."), GUILayout.Width(60))) {
|
||||
CreateProfile();
|
||||
GUIUtility.ExitGUI();
|
||||
return;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
|
||||
if (isManager) {
|
||||
EditorGUILayout.HelpBox("These are default settings for highlighted objects. If the highlighted object already has a Highlight Effect component, those properties will be used.", MessageType.Info);
|
||||
}
|
||||
|
||||
expandGeneralSettings = EditorGUILayout.Foldout(expandGeneralSettings, "General Settings", true, foldoutBold);
|
||||
if (expandGeneralSettings) {
|
||||
if (!isManager) {
|
||||
EditorGUILayout.PropertyField(previewInEditor);
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(camerasLayerMask);
|
||||
EditorGUILayout.PropertyField(ignoreObjectVisibility);
|
||||
if (thisEffect.staticChildren) {
|
||||
EditorGUILayout.HelpBox("This GameObject or one of its children is marked as static. If highlight is not visible, add a MeshCollider to them (the MeshCollider can be disabled).", MessageType.Warning);
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(reflectionProbes);
|
||||
EditorGUILayout.PropertyField(normalsOption);
|
||||
EditorGUILayout.PropertyField(subMeshMask);
|
||||
EditorGUILayout.PropertyField(GPUInstancing);
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
|
||||
if (!isManager) {
|
||||
EditorGUILayout.LabelField("State", EditorStyles.boldLabel);
|
||||
if (isManager) {
|
||||
EditorGUILayout.LabelField(new GUIContent("Highlighted", "Highlight state (controlled by Highlight Manager)."), new GUIContent(thisEffect.highlighted.ToString()));
|
||||
} else {
|
||||
EditorGUILayout.PropertyField(highlighted);
|
||||
}
|
||||
EditorGUILayout.LabelField(new GUIContent("Selected", "Selection state (used by Highlight Trigger or Manager) when using multi-selection option."), new GUIContent(thisEffect.isSelected.ToString()));
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
expandHighlightOptions = EditorGUILayout.Foldout(expandHighlightOptions, "Highlight Options", true, foldoutBold);
|
||||
if (GUILayout.Button("Help", GUILayout.Width(50))) {
|
||||
EditorUtility.DisplayDialog("Quick Help", "Move the mouse over a setting for a short description.\n\nVisit kronnect.com's forum for support, questions and more cool assets.\n\nIf you like Highlight Plus please rate it or leave a review on the Asset Store! Thanks.", "Ok");
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
if (expandHighlightOptions) {
|
||||
EditorGUI.BeginChangeCheck();
|
||||
if (!isManager) {
|
||||
EditorGUILayout.PropertyField(ignore, new GUIContent("Ignore", "This object won't be highlighted."));
|
||||
}
|
||||
if (!ignore.boolValue) {
|
||||
EditorGUILayout.PropertyField(effectGroup, new GUIContent("Include", "Additional objects to highlight. Pro tip: when highlighting multiple objects at the same time include them in the same layer or under the same parent."));
|
||||
if (effectGroup.intValue == (int)TargetOptions.LayerInScene || effectGroup.intValue == (int)TargetOptions.LayerInChildren) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(effectGroupLayer, new GUIContent("Layer"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
bool usesHQEffects = (outlineQuality.intValue == (int)QualityLevel.Highest && outline.floatValue > 0) || (glowQuality.intValue == (int)QualityLevel.Highest && glow.floatValue > 0);
|
||||
if (effectGroup.intValue != (int)TargetOptions.OnlyThisObject) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(effectNameFilter, new GUIContent("Object Name Filter"));
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.PropertyField(combineMeshes);
|
||||
if (combineMeshes.boolValue) {
|
||||
if (GUILayout.Button("Refresh", GUILayout.Width(70))) {
|
||||
thisEffect.Refresh(true);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(alphaCutOff, new GUIContent("Alpha Cut Off", "Only for semi-transparent objects. Leave this to zero for normal opaque objects."));
|
||||
EditorGUILayout.PropertyField(cullBackFaces);
|
||||
EditorGUILayout.PropertyField(fadeInDuration);
|
||||
EditorGUILayout.PropertyField(fadeOutDuration);
|
||||
EditorGUILayout.PropertyField(cameraDistanceFade);
|
||||
if (cameraDistanceFade.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(cameraDistanceFadeNear, new GUIContent("Near Distance"));
|
||||
EditorGUILayout.PropertyField(cameraDistanceFadeFar, new GUIContent("Far Distance"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
if (usesHQEffects) {
|
||||
EditorGUILayout.PropertyField(depthClip);
|
||||
if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS || EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) {
|
||||
EditorGUILayout.HelpBox("On mobile, consider enabling 'Depth Clip' option for better results.", MessageType.Info);
|
||||
}
|
||||
if (VRCheck.IsActive()) {
|
||||
EditorGUILayout.PropertyField(flipY, new GUIContent("Flip Y Fix", "Flips outline/glow effect to fix bug introduced in Unity 2019.1.0 when VR is enabled."));
|
||||
}
|
||||
}
|
||||
if (glowQuality.intValue != (int)QualityLevel.Highest || outlineQuality.intValue != (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(constantWidth, new GUIContent("Constant Width", "Compensates outline/glow width with depth increase."));
|
||||
}
|
||||
EditorGUILayout.PropertyField(outlineIndependent, new GUIContent("Independent", "Do not combine outline or glow with other highlighted objects."));
|
||||
}
|
||||
}
|
||||
|
||||
if (!ignore.boolValue) {
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.LabelField("Effects", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(outline, "Outline", outline.floatValue > 0);
|
||||
if (outline.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(outlineWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
QualityPropertyField(outlineQuality);
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest) {
|
||||
GUILayout.Label("(Screen-Space Effect)");
|
||||
} else {
|
||||
GUILayout.Label("(Mesh-based Effect)");
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
CheckVRSupport(outlineQuality.intValue);
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(outlineColor, new GUIContent("Color"));
|
||||
} else {
|
||||
EditorGUILayout.PropertyField(outlineColorStyle, new GUIContent("Color Style"));
|
||||
switch ((ColorStyle)outlineColorStyle.intValue) {
|
||||
case ColorStyle.SingleColor:
|
||||
EditorGUILayout.PropertyField(outlineColor, new GUIContent("Color"));
|
||||
break;
|
||||
case ColorStyle.Gradient:
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(outlineGradient, new GUIContent("Gradient"));
|
||||
EditorGUILayout.PropertyField(outlineGradientInLocalSpace, new GUIContent("In Local Space"));
|
||||
EditorGUI.indentLevel--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(outlineDownsampling, new GUIContent("Downsampling"));
|
||||
EditorGUILayout.PropertyField(outlineOptimalBlit, new GUIContent("Optimal Blit", "Blits result over a section of the screen instead of rendering to the full screen buffer."));
|
||||
if (outlineOptimalBlit.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(outlineBlitDebug, new GUIContent("Debug View", "Shows the blitting rectangle on the screen."));
|
||||
if (outlineBlitDebug.boolValue && (!previewInEditor.boolValue || !highlighted.boolValue)) {
|
||||
EditorGUILayout.HelpBox("Enable \"Preview In Editor\" and \"Highlighted\" to display the outline Debug View.", MessageType.Warning);
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
}
|
||||
|
||||
GUI.enabled = outlineQuality.intValue != (int)QualityLevel.Highest || CheckForwardMSAA();
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest && glowQuality.intValue == (int)QualityLevel.Highest && glow.floatValue > 0) {
|
||||
EditorGUILayout.PropertyField(glowVisibility, new GUIContent("Visibility"));
|
||||
} else {
|
||||
EditorGUILayout.PropertyField(outlineVisibility, new GUIContent("Visibility"));
|
||||
}
|
||||
GUI.enabled = true;
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(glow, "Outer Glow", glow.floatValue > 0);
|
||||
if (glow.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(glowWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
QualityPropertyField(glowQuality);
|
||||
if (glowQuality.intValue == (int)QualityLevel.Highest) {
|
||||
GUILayout.Label("(Screen-Space Effect)");
|
||||
} else {
|
||||
GUILayout.Label("(Mesh-based Effect)");
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
CheckVRSupport(glowQuality.intValue);
|
||||
if (glowQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(glowDownsampling, new GUIContent("Downsampling"));
|
||||
EditorGUILayout.PropertyField(glowHQColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(glowOptimalBlit, new GUIContent("Optimal Blit", "Blits result over a section of the screen instead of rendering to the full screen buffer."));
|
||||
if (glowOptimalBlit.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(glowBlitDebug, new GUIContent("Debug View", "Shows the blitting rectangle on the screen."));
|
||||
if (glowBlitDebug.boolValue && (!previewInEditor.boolValue || !highlighted.boolValue)) {
|
||||
EditorGUILayout.HelpBox("Enable \"Preview In Editor\" and \"Highlighted\" to display the glow Debug View.", MessageType.Warning);
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
GUI.enabled = glowQuality.intValue != (int)QualityLevel.Highest || CheckForwardMSAA();
|
||||
EditorGUILayout.PropertyField(glowVisibility, new GUIContent("Visibility"));
|
||||
EditorGUILayout.PropertyField(glowBlendMode, new GUIContent("Blend Mode"));
|
||||
GUI.enabled = true;
|
||||
} else {
|
||||
GUI.enabled = glowQuality.intValue != (int)QualityLevel.Highest || CheckForwardMSAA();
|
||||
EditorGUILayout.PropertyField(glowVisibility, new GUIContent("Visibility"));
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.PropertyField(glowDithering, new GUIContent("Dithering"));
|
||||
if (glowDithering.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(glowMagicNumber1, new GUIContent("Magic Number 1"));
|
||||
EditorGUILayout.PropertyField(glowMagicNumber2, new GUIContent("Magic Number 2"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(glowBlendPasses, new GUIContent("Blend Passes"));
|
||||
if (!glowBlendPasses.boolValue) {
|
||||
HighlightEffect ef = (HighlightEffect)target;
|
||||
if (ef.glowPasses != null) {
|
||||
for (int k = 0; k < ef.glowPasses.Length - 1; k++) {
|
||||
if (ef.glowPasses[k].offset > ef.glowPasses[k + 1].offset) {
|
||||
EditorGUILayout.HelpBox("Glow pass " + k + " has a greater offset than the next one. Reduce it to ensure the next glow pass is visible.", MessageType.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorGUILayout.PropertyField(glowPasses, true);
|
||||
}
|
||||
EditorGUILayout.PropertyField(glowAnimationSpeed, new GUIContent("Animation Speed"));
|
||||
EditorGUILayout.PropertyField(glowIgnoreMask, new GUIContent("Ignore Mask"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(innerGlow, "Inner Glow", innerGlow.floatValue > 0);
|
||||
if (innerGlow.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(innerGlowColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(innerGlowWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.PropertyField(innerGlowVisibility, new GUIContent("Visibility"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(overlay, "Overlay", overlay.floatValue > 0);
|
||||
if (overlay.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(overlayMode, new GUIContent("Mode"));
|
||||
EditorGUILayout.PropertyField(overlayColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(overlayTexture, new GUIContent("Texture"));
|
||||
if (overlayTexture.objectReferenceValue != null) {
|
||||
EditorGUILayout.PropertyField(overlayTextureUVSpace, new GUIContent("UV Space"));
|
||||
EditorGUILayout.PropertyField(overlayTextureScale, new GUIContent("Texture Scale"));
|
||||
}
|
||||
EditorGUILayout.PropertyField(overlayBlending, new GUIContent("Blending"));
|
||||
EditorGUILayout.PropertyField(overlayMinIntensity, new GUIContent("Min Intensity"));
|
||||
EditorGUILayout.PropertyField(overlayAnimationSpeed, new GUIContent("Animation Speed"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(targetFX, "Target", targetFX.boolValue);
|
||||
if (targetFX.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(targetFXTexture, new GUIContent("Texture", "The texture that contains the shape to be drawn over the highlighted object."));
|
||||
EditorGUILayout.PropertyField(targetFXColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(targetFXCenter, new GUIContent("Center", "Optionally assign a transform. Target will follow transform. If the object is skinned, you can also assign a bone to reflect currenct animation position."));
|
||||
EditorGUILayout.PropertyField(targetFXRotationSpeed, new GUIContent("Rotation Speed"));
|
||||
EditorGUILayout.PropertyField(targetFXInitialScale, new GUIContent("Initial Scale"));
|
||||
EditorGUILayout.PropertyField(targetFXEndScale, new GUIContent("End Scale"));
|
||||
EditorGUILayout.PropertyField(targetFXScaleToRenderBounds, new GUIContent("Scale To Object Bounds"));
|
||||
EditorGUILayout.PropertyField(targetFXAlignToGround, new GUIContent("Align To Ground"));
|
||||
if (targetFXAlignToGround.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
if (thisEffect.includedObjectsCount > 1 && targetFXCenter.objectReferenceValue == null && effectGroup.intValue != (int)TargetOptions.OnlyThisObject) {
|
||||
EditorGUILayout.HelpBox("It's recommended to specify in the 'Center' property above, the specific object used to position the target fx image (will be rendered under that object on the ground).", MessageType.Info);
|
||||
}
|
||||
EditorGUILayout.PropertyField(targetFXGroundMaxDistance, new GUIContent("Ground Max Distance"));
|
||||
EditorGUILayout.PropertyField(targetFXGroundLayerMask, new GUIContent("Ground Layer Mask"));
|
||||
HighlightEffect he = (HighlightEffect)target;
|
||||
if ((targetFXGroundLayerMask.intValue & (1 << he.gameObject.layer)) != 0) {
|
||||
EditorGUILayout.HelpBox("Ground Layer Mask should not include this object layer.", MessageType.Warning);
|
||||
}
|
||||
EditorGUILayout.PropertyField(targetFXFadePower, new GUIContent("Fade Power"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(targetFXTransitionDuration, new GUIContent("Transition Duration"));
|
||||
EditorGUILayout.PropertyField(targetFXStayDuration, new GUIContent("Stay Duration"));
|
||||
EditorGUILayout.PropertyField(targetFXVisibility, new GUIContent("Visibility"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
EditorGUILayout.PropertyField(seeThrough);
|
||||
if (seeThrough.intValue != (int)SeeThroughMode.Never) {
|
||||
if (isManager && seeThrough.intValue == (int)SeeThroughMode.AlwaysWhenOccluded) {
|
||||
EditorGUILayout.HelpBox("This option is not valid in Manager.\nTo make an object always visible add a Highlight Effect component to the gameobject and enable this option on the component.", MessageType.Error);
|
||||
}
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderMask, new GUIContent("Occluder Layer"));
|
||||
if (seeThroughOccluderMask.intValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderMaskAccurate, new GUIContent("Accurate"));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderThreshold, new GUIContent("Radius Threshold", "Multiplier to the object bounds. Making the bounds smaller prevents false occlusion tests."));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderCheckInterval, new GUIContent("Check Interval", "Interval in seconds between occlusion tests."));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderCheckIndividualObjects, new GUIContent("Check Individual Objects"));
|
||||
if (!showCurrentOccluders && Camera.main != null) {
|
||||
GUI.enabled = Application.isPlaying;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUILayout.Label("", GUILayout.Width(30));
|
||||
if (GUILayout.Button(" Show Current Occluders (only during Play Mode) ")) {
|
||||
showCurrentOccluders = true;
|
||||
}
|
||||
GUILayout.FlexibleSpace();
|
||||
EditorGUILayout.EndHorizontal();
|
||||
GUI.enabled = true;
|
||||
}
|
||||
if (showCurrentOccluders) {
|
||||
HighlightEffect h = (HighlightEffect)target;
|
||||
List<Renderer> occluders = h.GetOccluders(Camera.main);
|
||||
int count = occluders != null ? occluders.Count : 0;
|
||||
if (count == 0) {
|
||||
EditorGUILayout.LabelField("No occluders found (using main camera)");
|
||||
} else {
|
||||
EditorGUILayout.LabelField("Occluders found (using main camera):");
|
||||
for (int k = 0; k < count; k++) {
|
||||
if (occluders[k] == null) continue;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField(occluders[k].name);
|
||||
if (GUILayout.Button("Select")) {
|
||||
Selection.activeGameObject = occluders[k].gameObject;
|
||||
GUIUtility.ExitGUI();
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughDepthOffset, new GUIContent("Depth Offset" + ((seeThroughDepthOffset.floatValue > 0) ? " •" : "")));
|
||||
EditorGUILayout.PropertyField(seeThroughMaxDepth, new GUIContent("Max Depth" + ((seeThroughMaxDepth.floatValue > 0) ? " •" : "")));
|
||||
EditorGUILayout.PropertyField(seeThroughIntensity, new GUIContent("Intensity"));
|
||||
EditorGUILayout.PropertyField(seeThroughTintColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(seeThroughTintAlpha, new GUIContent("Color Blend"));
|
||||
EditorGUILayout.PropertyField(seeThroughNoise, new GUIContent("Noise"));
|
||||
EditorGUILayout.PropertyField(seeThroughTexture, new GUIContent("Texture"));
|
||||
if (seeThroughTexture.objectReferenceValue != null) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughTextureUVSpace, new GUIContent("UV Space"));
|
||||
EditorGUILayout.PropertyField(seeThroughTextureScale, new GUIContent("Texture Scale"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughBorder, new GUIContent("Border When Hidden" + ((seeThroughBorder.floatValue > 0) ? " •" : "")));
|
||||
if (seeThroughBorder.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughBorderWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.PropertyField(seeThroughBorderColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(seeThroughBorderOnly, new GUIContent("Border Only"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughOrdered, new GUIContent("Ordered"));
|
||||
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(hitFxInitialIntensity, "Hit FX", hitFxInitialIntensity.floatValue > 0);
|
||||
if (hitFxInitialIntensity.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(hitFxMode, new GUIContent("Mode"));
|
||||
EditorGUILayout.PropertyField(hitFxFadeOutDuration, new GUIContent("Fade Out Duration"));
|
||||
EditorGUILayout.PropertyField(hitFxColor, new GUIContent("Color"));
|
||||
if ((HitFxMode)hitFxMode.intValue == HitFxMode.LocalHit) {
|
||||
EditorGUILayout.PropertyField(hitFxRadius, new GUIContent("Radius"));
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
if (!Application.isPlaying) {
|
||||
EditorGUILayout.HelpBox("Enter Play Mode to test this feature. In your code, call effect.HitFX() method to execute this hit effect.", MessageType.Info);
|
||||
} else {
|
||||
EditorGUI.indentLevel++;
|
||||
if (GUILayout.Button("Execute Hit")) {
|
||||
thisEffect.HitFX();
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
|
||||
if (serializedObject.ApplyModifiedProperties() || profileChanged || Event.current.commandName == "UndoRedoPerformed") {
|
||||
if (thisEffect.profile != null) {
|
||||
if (profileChanged) {
|
||||
thisEffect.profile.Load(thisEffect);
|
||||
profileChanged = false;
|
||||
enableProfileApply = false;
|
||||
} else {
|
||||
enableProfileApply = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (HighlightEffect effect in targets) {
|
||||
effect.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawSectionField(SerializedProperty property, string label, bool active) {
|
||||
EditorGUILayout.PropertyField(property, new GUIContent(active ? label + " •" : label));
|
||||
}
|
||||
|
||||
void CheckVRSupport(int qualityLevel) {
|
||||
if (qualityLevel == (int)QualityLevel.Highest && VRCheck.IsActive()) {
|
||||
if (PlayerSettings.stereoRenderingPath != StereoRenderingPath.MultiPass) {
|
||||
EditorGUILayout.HelpBox("Highest Quality only supports VR Multi-Pass as CommandBuffers do not support this VR mode yet. Either switch to 'High Quality' or change VR Stereo mode to Multi-Pass.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CheckForwardMSAA() {
|
||||
if (QualitySettings.antiAliasing > 1) {
|
||||
if (Camera.main != null && Camera.main.allowMSAA && !depthClip.boolValue) {
|
||||
EditorGUILayout.HelpBox("Effect will be shown always on top due to MSAA. To enable depth clipping enable 'Depth Clip' option above OR disable MSAA in Quality Settings OR choose a different quality level.", MessageType.Info);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static readonly int[] qualityValues = { 0, 3, 1, 2 };
|
||||
static readonly GUIContent[] qualityTexts = { new GUIContent("Fastest"), new GUIContent("Medium"), new GUIContent("High"), new GUIContent("Highest") };
|
||||
|
||||
public static void QualityPropertyField(SerializedProperty prop) {
|
||||
prop.intValue = EditorGUILayout.IntPopup(new GUIContent("Quality", "Default and High use a mesh displacement technique. Highest quality can provide best look and also performance depending on the complexity of mesh."), prop.intValue, qualityTexts, qualityValues);
|
||||
}
|
||||
|
||||
bool IsDefaultEffectUsedByManager() {
|
||||
MonoBehaviour[] components = thisEffect.GetComponents<MonoBehaviour>();
|
||||
if (components != null) {
|
||||
for (int k = 0; k < components.Length; k++) {
|
||||
if (components[k] == null || !components[k].enabled)
|
||||
continue;
|
||||
string name = components[k].GetType().Name;
|
||||
if ("HighlightManager".Equals(name)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#region Profile handling
|
||||
|
||||
void CreateProfile() {
|
||||
|
||||
HighlightProfile newProfile = CreateInstance<HighlightProfile>();
|
||||
newProfile.Save(thisEffect);
|
||||
|
||||
AssetDatabase.CreateAsset(newProfile, "Assets/Highlight Plus Profile.asset");
|
||||
AssetDatabase.SaveAssets();
|
||||
|
||||
EditorUtility.FocusProjectWindow();
|
||||
Selection.activeObject = newProfile;
|
||||
|
||||
thisEffect.profile = newProfile;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#pragma warning restore 0618
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: be287539f47634552a716f0705710448
|
||||
timeCreated: 1542886545
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace HighlightPlus {
|
||||
[CustomEditor(typeof(HighlightManager))]
|
||||
public class HighlightManagerEditor : Editor {
|
||||
|
||||
SerializedProperty highlightOnHover, layerMask, raycastCamera, raycastSource, minDistance, maxDistance, respectUI;
|
||||
SerializedProperty selectOnClick, selectedProfile, selectedAndHighlightedProfile, singleSelection, toggleOnClick, keepSelection;
|
||||
|
||||
void OnEnable() {
|
||||
highlightOnHover = serializedObject.FindProperty("highlightOnHover");
|
||||
layerMask = serializedObject.FindProperty("layerMask");
|
||||
raycastCamera = serializedObject.FindProperty("raycastCamera");
|
||||
raycastSource = serializedObject.FindProperty("raycastSource");
|
||||
minDistance = serializedObject.FindProperty("minDistance");
|
||||
maxDistance = serializedObject.FindProperty("maxDistance");
|
||||
respectUI = serializedObject.FindProperty("respectUI");
|
||||
selectOnClick = serializedObject.FindProperty("selectOnClick");
|
||||
selectedProfile = serializedObject.FindProperty("selectedProfile");
|
||||
selectedAndHighlightedProfile = serializedObject.FindProperty("selectedAndHighlightedProfile");
|
||||
singleSelection = serializedObject.FindProperty("singleSelection");
|
||||
toggleOnClick = serializedObject.FindProperty("toggle");
|
||||
keepSelection = serializedObject.FindProperty("keepSelection");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI() {
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.HelpBox("Only objects with a collider can be highlighted automatically.", MessageType.Info);
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.PropertyField(layerMask);
|
||||
EditorGUILayout.PropertyField(raycastCamera);
|
||||
EditorGUILayout.PropertyField(raycastSource);
|
||||
EditorGUILayout.PropertyField(minDistance);
|
||||
EditorGUILayout.PropertyField(maxDistance);
|
||||
EditorGUILayout.PropertyField(respectUI);
|
||||
EditorGUILayout.PropertyField(highlightOnHover);
|
||||
EditorGUILayout.PropertyField(selectOnClick);
|
||||
if (selectOnClick.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(selectedProfile);
|
||||
EditorGUILayout.PropertyField(selectedAndHighlightedProfile);
|
||||
EditorGUILayout.PropertyField(singleSelection);
|
||||
EditorGUILayout.PropertyField(toggleOnClick);
|
||||
EditorGUILayout.PropertyField(keepSelection);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("GameObject/Effects/Highlight Plus/Create Manager", false, 10)]
|
||||
static void CreateManager(MenuCommand menuCommand) {
|
||||
HighlightManager manager = FindObjectOfType<HighlightManager>();
|
||||
if (manager == null) {
|
||||
GameObject managerGO = new GameObject("HighlightPlusManager");
|
||||
manager = managerGO.AddComponent<HighlightManager>();
|
||||
// Register root object for undo.
|
||||
Undo.RegisterCreatedObjectUndo(manager, "Create Highlight Plus Manager");
|
||||
}
|
||||
Selection.activeObject = manager;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ace58d1d278d649c98e5a2b5a066b3cd
|
||||
timeCreated: 1548711355
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,355 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace HighlightPlus {
|
||||
|
||||
[CustomEditor(typeof(HighlightProfile))]
|
||||
[CanEditMultipleObjects]
|
||||
public class HighlightProfileEditor : Editor {
|
||||
|
||||
SerializedProperty effectGroup, effectGroupLayer, effectNameFilter, combineMeshes, alphaCutOff, cullBackFaces, depthClip, normalsOption;
|
||||
SerializedProperty overlay, overlayMode, overlayColor, overlayAnimationSpeed, overlayMinIntensity, overlayTexture, overlayTextureScale, overlayTextureUVSpace, overlayBlending;
|
||||
SerializedProperty fadeInDuration, fadeOutDuration, constantWidth;
|
||||
SerializedProperty outline, outlineColor, outlineColorStyle, outlineGradient, outlineGradientInLocalSpace, outlineWidth, outlineQuality, outlineDownsampling, outlineOptimalBlit, outlineVisibility, outlineIndependent;
|
||||
SerializedProperty glow, glowWidth, glowQuality, glowOptimalBlit, glowDownsampling, glowHQColor, glowDithering, glowMagicNumber1, glowMagicNumber2, glowAnimationSpeed, glowVisibility, glowBlendMode, glowBlendPasses, glowPasses, glowIgnoreMask;
|
||||
SerializedProperty innerGlow, innerGlowWidth, innerGlowColor, innerGlowVisibility;
|
||||
SerializedProperty targetFX, targetFXTexture, targetFXColor, targetFXRotationSpeed, targetFXInitialScale, targetFXEndScale, targetFXScaleToRenderBounds;
|
||||
SerializedProperty targetFXAlignToGround, targetFXFadePower, targetFXGroundMaxDistance, targetFXGroundLayerMask, targetFXTransitionDuration, targetFXStayDuration, targetFXVisibility;
|
||||
SerializedProperty seeThrough, seeThroughOccluderMask, seeThroughOccluderMaskAccurate, seeThroughOccluderThreshold, seeThroughOccluderCheckInterval, seeThroughOccluderCheckIndividualObjects, seeThroughDepthOffset, seeThroughMaxDepth;
|
||||
SerializedProperty seeThroughIntensity, seeThroughTintAlpha, seeThroughTintColor, seeThroughNoise, seeThroughBorder, seeThroughBorderWidth, seeThroughBorderColor, seeThroughOrdered, seeThroughBorderOnly, seeThroughTexture, seeThroughTextureUVSpace, seeThroughTextureScale;
|
||||
SerializedProperty hitFxInitialIntensity, hitFxMode, hitFxFadeOutDuration, hitFxColor, hitFxRadius;
|
||||
SerializedProperty cameraDistanceFade, cameraDistanceFadeNear, cameraDistanceFadeFar;
|
||||
|
||||
void OnEnable() {
|
||||
effectGroup = serializedObject.FindProperty("effectGroup");
|
||||
effectGroupLayer = serializedObject.FindProperty("effectGroupLayer");
|
||||
effectNameFilter = serializedObject.FindProperty("effectNameFilter");
|
||||
combineMeshes = serializedObject.FindProperty("combineMeshes");
|
||||
alphaCutOff = serializedObject.FindProperty("alphaCutOff");
|
||||
cullBackFaces = serializedObject.FindProperty("cullBackFaces");
|
||||
depthClip = serializedObject.FindProperty("depthClip");
|
||||
normalsOption = serializedObject.FindProperty("normalsOption");
|
||||
fadeInDuration = serializedObject.FindProperty("fadeInDuration");
|
||||
fadeOutDuration = serializedObject.FindProperty("fadeOutDuration");
|
||||
constantWidth = serializedObject.FindProperty("constantWidth");
|
||||
overlay = serializedObject.FindProperty("overlay");
|
||||
overlayMode = serializedObject.FindProperty("overlayMode");
|
||||
overlayColor = serializedObject.FindProperty("overlayColor");
|
||||
overlayAnimationSpeed = serializedObject.FindProperty("overlayAnimationSpeed");
|
||||
overlayMinIntensity = serializedObject.FindProperty("overlayMinIntensity");
|
||||
overlayBlending = serializedObject.FindProperty("overlayBlending");
|
||||
overlayTexture = serializedObject.FindProperty("overlayTexture");
|
||||
overlayTextureUVSpace = serializedObject.FindProperty("overlayTextureUVSpace");
|
||||
overlayTextureScale = serializedObject.FindProperty("overlayTextureScale");
|
||||
outline = serializedObject.FindProperty("outline");
|
||||
outlineColor = serializedObject.FindProperty("outlineColor");
|
||||
outlineColorStyle = serializedObject.FindProperty("outlineColorStyle");
|
||||
outlineGradient = serializedObject.FindProperty("outlineGradient");
|
||||
outlineGradientInLocalSpace = serializedObject.FindProperty("outlineGradientInLocalSpace");
|
||||
outlineWidth = serializedObject.FindProperty("outlineWidth");
|
||||
outlineQuality = serializedObject.FindProperty("outlineQuality");
|
||||
outlineOptimalBlit = serializedObject.FindProperty("outlineOptimalBlit");
|
||||
outlineDownsampling = serializedObject.FindProperty("outlineDownsampling");
|
||||
outlineVisibility = serializedObject.FindProperty("outlineVisibility");
|
||||
outlineIndependent = serializedObject.FindProperty("outlineIndependent");
|
||||
glow = serializedObject.FindProperty("glow");
|
||||
glowWidth = serializedObject.FindProperty("glowWidth");
|
||||
glowQuality = serializedObject.FindProperty("glowQuality");
|
||||
glowOptimalBlit = serializedObject.FindProperty("glowOptimalBlit");
|
||||
glowDownsampling = serializedObject.FindProperty("glowDownsampling");
|
||||
glowHQColor = serializedObject.FindProperty("glowHQColor");
|
||||
glowAnimationSpeed = serializedObject.FindProperty("glowAnimationSpeed");
|
||||
glowDithering = serializedObject.FindProperty("glowDithering");
|
||||
glowMagicNumber1 = serializedObject.FindProperty("glowMagicNumber1");
|
||||
glowMagicNumber2 = serializedObject.FindProperty("glowMagicNumber2");
|
||||
glowAnimationSpeed = serializedObject.FindProperty("glowAnimationSpeed");
|
||||
glowBlendPasses = serializedObject.FindProperty("glowBlendPasses");
|
||||
glowVisibility = serializedObject.FindProperty("glowVisibility");
|
||||
glowBlendMode = serializedObject.FindProperty("glowBlendMode");
|
||||
glowPasses = serializedObject.FindProperty("glowPasses");
|
||||
glowIgnoreMask = serializedObject.FindProperty("glowIgnoreMask");
|
||||
innerGlow = serializedObject.FindProperty("innerGlow");
|
||||
innerGlowColor = serializedObject.FindProperty("innerGlowColor");
|
||||
innerGlowWidth = serializedObject.FindProperty("innerGlowWidth");
|
||||
innerGlowVisibility = serializedObject.FindProperty("innerGlowVisibility");
|
||||
targetFX = serializedObject.FindProperty("targetFX");
|
||||
targetFXTexture = serializedObject.FindProperty("targetFXTexture");
|
||||
targetFXRotationSpeed = serializedObject.FindProperty("targetFXRotationSpeed");
|
||||
targetFXInitialScale = serializedObject.FindProperty("targetFXInitialScale");
|
||||
targetFXEndScale = serializedObject.FindProperty("targetFXEndScale");
|
||||
targetFXScaleToRenderBounds = serializedObject.FindProperty("targetFXScaleToRenderBounds");
|
||||
targetFXAlignToGround = serializedObject.FindProperty("targetFXAlignToGround");
|
||||
targetFXGroundMaxDistance = serializedObject.FindProperty("targetFXGroundMaxDistance");
|
||||
targetFXGroundLayerMask = serializedObject.FindProperty("targetFXGroundLayerMask");
|
||||
targetFXFadePower = serializedObject.FindProperty("targetFXFadePower");
|
||||
targetFXColor = serializedObject.FindProperty("targetFXColor");
|
||||
targetFXTransitionDuration = serializedObject.FindProperty("targetFXTransitionDuration");
|
||||
targetFXStayDuration = serializedObject.FindProperty("targetFXStayDuration");
|
||||
targetFXVisibility = serializedObject.FindProperty("targetFXVisibility");
|
||||
seeThrough = serializedObject.FindProperty("seeThrough");
|
||||
seeThroughOccluderMask = serializedObject.FindProperty("seeThroughOccluderMask");
|
||||
seeThroughOccluderMaskAccurate = serializedObject.FindProperty("seeThroughOccluderMaskAccurate");
|
||||
seeThroughOccluderThreshold = serializedObject.FindProperty("seeThroughOccluderThreshold");
|
||||
seeThroughOccluderCheckInterval = serializedObject.FindProperty("seeThroughOccluderCheckInterval");
|
||||
seeThroughOccluderCheckIndividualObjects = serializedObject.FindProperty("seeThroughOccluderCheckIndividualObjects");
|
||||
seeThroughDepthOffset = serializedObject.FindProperty("seeThroughDepthOffset");
|
||||
seeThroughMaxDepth = serializedObject.FindProperty("seeThroughMaxDepth");
|
||||
seeThroughIntensity = serializedObject.FindProperty("seeThroughIntensity");
|
||||
seeThroughTintAlpha = serializedObject.FindProperty("seeThroughTintAlpha");
|
||||
seeThroughTintColor = serializedObject.FindProperty("seeThroughTintColor");
|
||||
seeThroughNoise = serializedObject.FindProperty("seeThroughNoise");
|
||||
seeThroughBorder = serializedObject.FindProperty("seeThroughBorder");
|
||||
seeThroughBorderWidth = serializedObject.FindProperty("seeThroughBorderWidth");
|
||||
seeThroughBorderColor = serializedObject.FindProperty("seeThroughBorderColor");
|
||||
seeThroughBorderOnly = serializedObject.FindProperty("seeThroughBorderOnly");
|
||||
seeThroughOrdered = serializedObject.FindProperty("seeThroughOrdered");
|
||||
seeThroughTexture = serializedObject.FindProperty("seeThroughTexture");
|
||||
seeThroughTextureScale = serializedObject.FindProperty("seeThroughTextureScale");
|
||||
seeThroughTextureUVSpace = serializedObject.FindProperty("seeThroughTextureUVSpace");
|
||||
hitFxInitialIntensity = serializedObject.FindProperty("hitFxInitialIntensity");
|
||||
hitFxMode = serializedObject.FindProperty("hitFxMode");
|
||||
hitFxFadeOutDuration = serializedObject.FindProperty("hitFxFadeOutDuration");
|
||||
hitFxColor = serializedObject.FindProperty("hitFxColor");
|
||||
hitFxRadius = serializedObject.FindProperty("hitFxRadius");
|
||||
cameraDistanceFade = serializedObject.FindProperty("cameraDistanceFade");
|
||||
cameraDistanceFadeNear = serializedObject.FindProperty("cameraDistanceFadeNear");
|
||||
cameraDistanceFadeFar = serializedObject.FindProperty("cameraDistanceFadeFar");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI() {
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.LabelField("Highlight Options", EditorStyles.boldLabel);
|
||||
EditorGUILayout.PropertyField(effectGroup, new GUIContent("Include"));
|
||||
if (effectGroup.intValue == (int)TargetOptions.LayerInScene || effectGroup.intValue == (int)TargetOptions.LayerInChildren) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(effectGroupLayer, new GUIContent("Layer"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
if (effectGroup.intValue != (int)TargetOptions.OnlyThisObject && effectGroup.intValue != (int)TargetOptions.Scripting) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(effectNameFilter, new GUIContent("Object Name Filter"));
|
||||
EditorGUILayout.PropertyField(combineMeshes);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(alphaCutOff);
|
||||
EditorGUILayout.PropertyField(cullBackFaces);
|
||||
EditorGUILayout.PropertyField(normalsOption);
|
||||
EditorGUILayout.PropertyField(depthClip);
|
||||
EditorGUILayout.PropertyField(fadeInDuration);
|
||||
EditorGUILayout.PropertyField(fadeOutDuration);
|
||||
EditorGUILayout.PropertyField(cameraDistanceFade);
|
||||
if (cameraDistanceFade.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(cameraDistanceFadeNear, new GUIContent("Near Distance"));
|
||||
EditorGUILayout.PropertyField(cameraDistanceFadeFar, new GUIContent("Far Distance"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(constantWidth);
|
||||
EditorGUILayout.PropertyField(outlineIndependent, new GUIContent("Independent", "Do not combine outline with other highlighted objects."));
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.LabelField("Effects", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(outline, "Outline", outline.floatValue > 0);
|
||||
if (outline.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(outlineWidth, new GUIContent("Width"));
|
||||
HighlightEffectEditor.QualityPropertyField(outlineQuality);
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(outlineColor, new GUIContent("Color"));
|
||||
} else {
|
||||
EditorGUILayout.PropertyField(outlineColorStyle, new GUIContent("Color Style"));
|
||||
switch ((ColorStyle)outlineColorStyle.intValue) {
|
||||
case ColorStyle.SingleColor:
|
||||
EditorGUILayout.PropertyField(outlineColor, new GUIContent("Color"));
|
||||
break;
|
||||
case ColorStyle.Gradient:
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(outlineGradient, new GUIContent("Gradient"));
|
||||
EditorGUILayout.PropertyField(outlineGradientInLocalSpace, new GUIContent("In Local Space"));
|
||||
EditorGUI.indentLevel--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(outlineDownsampling, new GUIContent("Downsampling"));
|
||||
EditorGUILayout.PropertyField(outlineOptimalBlit, new GUIContent("Optimal Blit", "Blits result over a section of the screen instead of rendering to the full screen buffer."));
|
||||
}
|
||||
if (outlineQuality.intValue == (int)QualityLevel.Highest && glowQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(glowVisibility, new GUIContent("Visibility"));
|
||||
} else {
|
||||
EditorGUILayout.PropertyField(outlineVisibility, new GUIContent("Visibility"));
|
||||
}
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(glow, "Outer Glow", glow.floatValue > 0);
|
||||
if (glow.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(glowWidth, new GUIContent("Width"));
|
||||
HighlightEffectEditor.QualityPropertyField(glowQuality);
|
||||
if (glowQuality.intValue == (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(glowDownsampling, new GUIContent("Downsampling"));
|
||||
EditorGUILayout.PropertyField(glowHQColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(glowOptimalBlit, new GUIContent("Optimal Blit", "Blits result over a section of the screen instead of rendering to the full screen buffer."));
|
||||
}
|
||||
EditorGUILayout.PropertyField(glowAnimationSpeed, new GUIContent("Animation Speed"));
|
||||
EditorGUILayout.PropertyField(glowVisibility, new GUIContent("Visibility"));
|
||||
EditorGUILayout.PropertyField(glowBlendMode, new GUIContent("Blend Mode"));
|
||||
if (glowQuality.intValue != (int)QualityLevel.Highest) {
|
||||
EditorGUILayout.PropertyField(glowDithering, new GUIContent("Dithering"));
|
||||
if (glowDithering.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(glowMagicNumber1, new GUIContent("Magic Number 1"));
|
||||
EditorGUILayout.PropertyField(glowMagicNumber2, new GUIContent("Magic Number 2"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(glowBlendPasses, new GUIContent("Blend Passes"));
|
||||
EditorGUILayout.PropertyField(glowPasses, true);
|
||||
EditorGUILayout.PropertyField(glowIgnoreMask, new GUIContent("Ignore Mask"));
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(innerGlow, "Inner Glow", innerGlow.floatValue > 0);
|
||||
if (innerGlow.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(innerGlowColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(innerGlowWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.PropertyField(innerGlowVisibility, new GUIContent("Visibility"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(overlay, "Overlay", overlay.floatValue > 0);
|
||||
if (overlay.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(overlayMode, new GUIContent("Mode"));
|
||||
EditorGUILayout.PropertyField(overlayColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(overlayTexture, new GUIContent("Texture"));
|
||||
if (overlayTexture.objectReferenceValue != null) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(overlayTextureUVSpace, new GUIContent("UV Space"));
|
||||
EditorGUILayout.PropertyField(overlayTextureScale, new GUIContent("Texture Scale"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(overlayBlending, new GUIContent("Blending"));
|
||||
EditorGUILayout.PropertyField(overlayMinIntensity, new GUIContent("Min Intensity"));
|
||||
EditorGUILayout.PropertyField(overlayAnimationSpeed, new GUIContent("Animation Speed"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(targetFX, "Target", targetFX.boolValue);
|
||||
if (targetFX.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(targetFXTexture, new GUIContent("Texture"));
|
||||
EditorGUILayout.PropertyField(targetFXColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(targetFXRotationSpeed, new GUIContent("Rotation Speed"));
|
||||
EditorGUILayout.PropertyField(targetFXInitialScale, new GUIContent("Initial Scale"));
|
||||
EditorGUILayout.PropertyField(targetFXEndScale, new GUIContent("End Scale"));
|
||||
EditorGUILayout.PropertyField(targetFXScaleToRenderBounds, new GUIContent("Scale To Object Bounds"));
|
||||
EditorGUILayout.PropertyField(targetFXAlignToGround, new GUIContent("Align To Ground"));
|
||||
if (targetFXAlignToGround.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(targetFXGroundMaxDistance, new GUIContent("Ground Max Distance"));
|
||||
EditorGUILayout.PropertyField(targetFXGroundLayerMask, new GUIContent("Ground Layer Mask"));
|
||||
EditorGUILayout.PropertyField(targetFXFadePower, new GUIContent("Fade Power"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(targetFXTransitionDuration, new GUIContent("Transition Duration"));
|
||||
EditorGUILayout.PropertyField(targetFXStayDuration, new GUIContent("Stay Duration"));
|
||||
EditorGUILayout.PropertyField(targetFXVisibility, new GUIContent("Visibility"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
EditorGUILayout.PropertyField(seeThrough);
|
||||
if (seeThrough.intValue != (int)SeeThroughMode.Never) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderMask, new GUIContent("Occluder Layer"));
|
||||
if (seeThroughOccluderMask.intValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderMaskAccurate, new GUIContent("Accurate"));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderThreshold, new GUIContent("Radius Threshold", "Multiplier to the object bounds. Making the bounds smaller prevents false occlusion tests."));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderCheckInterval, new GUIContent("Check Interval", "Interval in seconds between occlusion tests."));
|
||||
EditorGUILayout.PropertyField(seeThroughOccluderCheckIndividualObjects, new GUIContent("Check Individual Objects", "Interval in seconds between occlusion tests."));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughDepthOffset, new GUIContent("Depth Offset" + ((seeThroughDepthOffset.floatValue > 0) ? " •" : "")));
|
||||
EditorGUILayout.PropertyField(seeThroughMaxDepth, new GUIContent("Max Depth" + ((seeThroughMaxDepth.floatValue > 0) ? " •" : "")));
|
||||
EditorGUILayout.PropertyField(seeThroughIntensity, new GUIContent("Intensity"));
|
||||
EditorGUILayout.PropertyField(seeThroughTintColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(seeThroughTintAlpha, new GUIContent("Color Blend"));
|
||||
EditorGUILayout.PropertyField(seeThroughNoise, new GUIContent("Noise"));
|
||||
EditorGUILayout.PropertyField(seeThroughTexture, new GUIContent("Texture"));
|
||||
if (seeThroughTexture.objectReferenceValue != null) {
|
||||
EditorGUILayout.PropertyField(seeThroughTextureUVSpace, new GUIContent("UV Space"));
|
||||
EditorGUILayout.PropertyField(seeThroughTextureScale, new GUIContent("Texture Scale"));
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughBorder, new GUIContent("Border When Hidden"));
|
||||
if (seeThroughBorder.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(seeThroughBorderWidth, new GUIContent("Width"));
|
||||
EditorGUILayout.PropertyField(seeThroughBorderColor, new GUIContent("Color"));
|
||||
EditorGUILayout.PropertyField(seeThroughBorderOnly, new GUIContent("Border Only"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.PropertyField(seeThroughOrdered, new GUIContent("Ordered"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.BeginVertical(GUI.skin.box);
|
||||
DrawSectionField(hitFxInitialIntensity, "Hit FX", hitFxInitialIntensity.floatValue > 0);
|
||||
if (hitFxInitialIntensity.floatValue > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(hitFxInitialIntensity, new GUIContent("Initial Intensity"));
|
||||
EditorGUILayout.PropertyField(hitFxMode, new GUIContent("Mode"));
|
||||
EditorGUILayout.PropertyField(hitFxFadeOutDuration, new GUIContent("Fade Out Duration"));
|
||||
EditorGUILayout.PropertyField(hitFxColor, new GUIContent("Color"));
|
||||
if ((HitFxMode)hitFxMode.intValue == HitFxMode.LocalHit) {
|
||||
EditorGUILayout.PropertyField(hitFxRadius, new GUIContent("Radius"));
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
if (serializedObject.ApplyModifiedProperties() || (Event.current.type == EventType.ValidateCommand &&
|
||||
Event.current.commandName == "UndoRedoPerformed")) {
|
||||
|
||||
// Triggers profile reload on all Highlight Effect scripts
|
||||
HighlightEffect[] effects = FindObjectsOfType<HighlightEffect>();
|
||||
for (int t = 0; t < targets.Length; t++) {
|
||||
HighlightProfile profile = (HighlightProfile)targets[t];
|
||||
for (int k = 0; k < effects.Length; k++) {
|
||||
if (effects[k] != null && effects[k].profile == profile && effects[k].profileSync) {
|
||||
profile.Load(effects[k]);
|
||||
effects[k].Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DrawSectionField(SerializedProperty property, string label, bool active) {
|
||||
EditorGUILayout.PropertyField(property, new GUIContent(active ? label + " •" : label));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b3b0e551d6f4f4f3987e8e5be2e89285
|
||||
timeCreated: 1542886545
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace HighlightPlus {
|
||||
|
||||
[CustomEditor(typeof(HighlightSeeThroughOccluder))]
|
||||
public class HighlightSeeThroughOccluderEditor : Editor {
|
||||
|
||||
SerializedProperty mode, detectionMethod;
|
||||
|
||||
void OnEnable() {
|
||||
mode = serializedObject.FindProperty("mode");
|
||||
detectionMethod = serializedObject.FindProperty("detectionMethod");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI() {
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.PropertyField(mode);
|
||||
if (mode.intValue == (int)OccluderMode.BlocksSeeThrough) {
|
||||
EditorGUILayout.HelpBox("This object will occlude any see-through effect.", MessageType.Info);
|
||||
EditorGUILayout.PropertyField(detectionMethod);
|
||||
} else {
|
||||
EditorGUILayout.HelpBox("This object will trigger see-through effect. Use only on objects that do not write to depth buffer normally, like sprites or transparent objects.", MessageType.Info);
|
||||
}
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 11e725ecbe4d74569b232e1a0d57efba
|
||||
timeCreated: 1548711355
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace HighlightPlus {
|
||||
[CustomEditor(typeof(HighlightTrigger))]
|
||||
public class HighlightTriggerEditor : Editor {
|
||||
|
||||
SerializedProperty highlightOnHover, triggerMode, raycastCamera, raycastSource, raycastLayerMask;
|
||||
SerializedProperty minDistance, maxDistance, respectUI, volumeLayerMask;
|
||||
SerializedProperty selectOnClick, selectedProfile, selectedAndHighlightedProfile, singleSelection, toggleOnClick, keepSelection;
|
||||
HighlightTrigger trigger;
|
||||
|
||||
void OnEnable() {
|
||||
highlightOnHover = serializedObject.FindProperty("highlightOnHover");
|
||||
triggerMode = serializedObject.FindProperty("triggerMode");
|
||||
raycastCamera = serializedObject.FindProperty("raycastCamera");
|
||||
raycastSource = serializedObject.FindProperty("raycastSource");
|
||||
raycastLayerMask = serializedObject.FindProperty("raycastLayerMask");
|
||||
minDistance = serializedObject.FindProperty("minDistance");
|
||||
maxDistance = serializedObject.FindProperty("maxDistance");
|
||||
respectUI = serializedObject.FindProperty("respectUI");
|
||||
volumeLayerMask = serializedObject.FindProperty("volumeLayerMask");
|
||||
selectOnClick = serializedObject.FindProperty("selectOnClick");
|
||||
selectedProfile = serializedObject.FindProperty("selectedProfile");
|
||||
selectedAndHighlightedProfile = serializedObject.FindProperty("selectedAndHighlightedProfile");
|
||||
singleSelection = serializedObject.FindProperty("singleSelection");
|
||||
toggleOnClick = serializedObject.FindProperty("toggle");
|
||||
keepSelection = serializedObject.FindProperty("keepSelection");
|
||||
trigger = (HighlightTrigger)target;
|
||||
trigger.Init();
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI() {
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
if (trigger.triggerMode == TriggerMode.RaycastOnThisObjectAndChildren) {
|
||||
if (trigger.colliders == null || trigger.colliders.Length == 0) {
|
||||
EditorGUILayout.HelpBox("No collider found on this object or any of its children. Add colliders to allow automatic highlighting.", MessageType.Warning);
|
||||
}
|
||||
} else {
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
if (trigger.triggerMode == TriggerMode.ColliderEventsOnlyOnThisObject) {
|
||||
EditorGUILayout.HelpBox("This trigger mode is not compatible with the new input system.", MessageType.Error);
|
||||
}
|
||||
#endif
|
||||
if (trigger.GetComponent<Collider>() == null) {
|
||||
EditorGUILayout.HelpBox("No collider found on this object. Add a collider to allow automatic highlighting.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(triggerMode);
|
||||
switch (trigger.triggerMode) {
|
||||
case TriggerMode.RaycastOnThisObjectAndChildren:
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(raycastCamera);
|
||||
EditorGUILayout.PropertyField(raycastSource);
|
||||
EditorGUILayout.PropertyField(raycastLayerMask);
|
||||
EditorGUILayout.PropertyField(minDistance);
|
||||
EditorGUILayout.PropertyField(maxDistance);
|
||||
EditorGUI.indentLevel--;
|
||||
break;
|
||||
case TriggerMode.Volume:
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(volumeLayerMask);
|
||||
EditorGUI.indentLevel--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (trigger.triggerMode != TriggerMode.Volume) {
|
||||
EditorGUILayout.PropertyField(respectUI);
|
||||
}
|
||||
EditorGUILayout.PropertyField(highlightOnHover);
|
||||
EditorGUILayout.PropertyField(selectOnClick);
|
||||
if (selectOnClick.boolValue) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(selectedProfile);
|
||||
EditorGUILayout.PropertyField(selectedAndHighlightedProfile);
|
||||
EditorGUILayout.PropertyField(singleSelection);
|
||||
EditorGUILayout.PropertyField(toggleOnClick);
|
||||
if (trigger.triggerMode == TriggerMode.RaycastOnThisObjectAndChildren) {
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(keepSelection);
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
// Update all triggers
|
||||
HighlightTrigger[] triggers = FindObjectsOfType<HighlightTrigger>();
|
||||
foreach(HighlightTrigger t in triggers) {
|
||||
if (t.keepSelection != keepSelection.boolValue) {
|
||||
t.keepSelection = keepSelection.boolValue;
|
||||
EditorUtility.SetDirty(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
if (serializedObject.ApplyModifiedProperties()) {
|
||||
trigger.Init();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: eaf7f56fbcfa343efb5081d4309cb76b
|
||||
timeCreated: 1548711355
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEditor;
|
||||
|
||||
namespace HighlightPlus {
|
||||
|
||||
public class TransparentWithDepth {
|
||||
|
||||
static Material bmDepthOnly;
|
||||
static Material bmDepthClipping;
|
||||
|
||||
|
||||
[MenuItem ("GameObject/Effects/Highlight Plus/Add Depth To Transparent Object", false, 100)]
|
||||
static void AddDepthOption () {
|
||||
Renderer renderer = GetRenderer ();
|
||||
if (renderer == null)
|
||||
return;
|
||||
|
||||
if (!EditorUtility.DisplayDialog("Add Depth to Transparent Object", "This option will force the transparent object to write to the depth buffer by adding a new special material to the renderer (existing materials are preserved) so it can occlude and allow See-Through effect.\nOnly use on transparent objects.\n\nProceed?", "Yes", "No")) {
|
||||
return;
|
||||
}
|
||||
|
||||
Material[] materials = renderer.sharedMaterials;
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials [k] == bmDepthOnly) {
|
||||
EditorUtility.DisplayDialog ("Depth Support", "Already set! Nothing to do.", "Ok");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (materials == null) {
|
||||
renderer.sharedMaterial = bmDepthOnly;
|
||||
} else {
|
||||
List<Material> newMaterials = new List<Material> (materials);
|
||||
newMaterials.Insert (0, bmDepthOnly);
|
||||
renderer.sharedMaterials = newMaterials.ToArray ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("GameObject/Effects/Highlight Plus/Make Transparent Object Compatible with Depth Clipping", false, 101)]
|
||||
static void AddDepthClippingOption() {
|
||||
Renderer renderer = GetRenderer();
|
||||
if (renderer == null)
|
||||
return;
|
||||
|
||||
if (!EditorUtility.DisplayDialog("Make Transparent Object Compatible with Depth Clipping", "This option will force the transparent object to write to _CameraDepthBuffer which is used by depth clip option (existing materials are preserved) so it can occlude outline and glow effects in High Quality mode.\nOnly use on transparent objects which need to occlude other outline / glow effects in high quality mode.\n\nProceed?", "Yes", "No")) {
|
||||
return;
|
||||
}
|
||||
|
||||
Material[] materials = renderer.sharedMaterials;
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials[k] == bmDepthClipping) {
|
||||
EditorUtility.DisplayDialog("Depth Clipping Support", "Already set! Nothing to do.", "Ok");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (materials == null) {
|
||||
renderer.sharedMaterial = bmDepthClipping;
|
||||
} else {
|
||||
List<Material> newMaterials = new List<Material>(materials);
|
||||
newMaterials.Insert(0, bmDepthClipping);
|
||||
renderer.sharedMaterials = newMaterials.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("GameObject/Effects/Highlight Plus/Remove Depth Compatibility", false, 102)]
|
||||
static void RemoveDepthOption() {
|
||||
|
||||
Renderer renderer = GetRenderer();
|
||||
if (renderer == null)
|
||||
return;
|
||||
|
||||
bool found = false;
|
||||
Material[] materials = renderer.sharedMaterials;
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials[k] == bmDepthOnly || materials[k] == bmDepthClipping) {
|
||||
materials[k] = null;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
List<Material> newMaterials = new List<Material>();
|
||||
for (int k = 0; k < materials.Length; k++) {
|
||||
if (materials[k] != null) {
|
||||
newMaterials.Add(materials[k]);
|
||||
}
|
||||
}
|
||||
renderer.sharedMaterials = newMaterials.ToArray();
|
||||
return;
|
||||
}
|
||||
|
||||
EditorUtility.DisplayDialog("Depth Support", "This object was not previously modified! Nothing to do.", "Ok");
|
||||
}
|
||||
|
||||
|
||||
static Renderer GetRenderer() {
|
||||
|
||||
if (Selection.activeGameObject == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "This option can only be used on GameObjects.", "Ok");
|
||||
return null;
|
||||
}
|
||||
Renderer renderer = Selection.activeGameObject.GetComponent<Renderer>();
|
||||
if (renderer == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "This option can only be used on GameObjects with a Renderer component attached.", "Ok");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (bmDepthOnly == null) {
|
||||
bmDepthOnly = Resources.Load<Material>("HighlightPlus/HighlightPlusDepthWrite");
|
||||
if (bmDepthOnly == null) {
|
||||
EditorUtility.DisplayDialog("Depth Support", "HighlightPlusDepthWrite material not found!", "Ok");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (bmDepthClipping == null) {
|
||||
bmDepthClipping = Resources.Load<Material>("HighlightPlus/HighlightPlusDepthClipComp");
|
||||
if (bmDepthClipping == null) {
|
||||
EditorUtility.DisplayDialog("Depth Clipping Support", "HighlightPlusDepthClipComp material not found!", "Ok");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return renderer;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
fileFormatVersion: 2
|
||||
guid: be6e3be6d17ed49a3bd16d816815d6fd
|
||||
timeCreated: 1515683694
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEngine.XR;
|
||||
|
||||
namespace HighlightPlus {
|
||||
public static class VRCheck {
|
||||
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
|
||||
static List<XRDisplaySubsystemDescriptor> displaysDescs = new List<XRDisplaySubsystemDescriptor>();
|
||||
static List<XRDisplaySubsystem> displays = new List<XRDisplaySubsystem>();
|
||||
|
||||
public static bool IsActive() {
|
||||
displaysDescs.Clear();
|
||||
SubsystemManager.GetSubsystemDescriptors(displaysDescs);
|
||||
|
||||
// If there are registered display descriptors that is a good indication that VR is most likely "enabled"
|
||||
return displaysDescs.Count > 0;
|
||||
}
|
||||
|
||||
public static bool IsVrRunning() {
|
||||
bool vrIsRunning = false;
|
||||
displays.Clear();
|
||||
SubsystemManager.GetInstances(displays);
|
||||
foreach (var displaySubsystem in displays) {
|
||||
if (displaySubsystem.running) {
|
||||
vrIsRunning = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return vrIsRunning;
|
||||
}
|
||||
#else
|
||||
public static bool IsActive() {
|
||||
return PlayerSettings.virtualRealitySupported;
|
||||
}
|
||||
|
||||
public static bool IsVrRunning() {
|
||||
return Application.isPlaying && PlayerSettings.virtualRealitySupported;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e692cbce37dc14e29b436d0c876f45dc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Material
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d4aad1024aff38146ad49519baf219ee
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Material 1
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d353e0c2ef3e7154aa0b78e2ea974a10
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Material 2
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: edd7237b43bc9ac45a09cd4118cda0cd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Material 3
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 027b01e5e61172e449da734e38e1161a
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace DefaultNamespace
|
||||
{
|
||||
public class CharacterEquipBtOnClick : MonoBehaviour
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 33ac3fcd80ff49cc8bf4a4dfd520d2ec
|
||||
timeCreated: 1717469514
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MotionFramework;
|
||||
using UnityEngine;
|
||||
|
||||
|
|
@ -8,17 +9,24 @@ namespace DefaultNamespace
|
|||
/// <summary>
|
||||
/// 人物窗口装备管理器
|
||||
/// </summary>
|
||||
public class CharacterEquipWindowManager : ModuleSingleton<ToolsPackManager>, IModule
|
||||
public class CharacterEquipWindowManager : ModuleSingleton<CharacterEquipWindowManager>, IModule
|
||||
{
|
||||
private Dictionary<string, string> _equips;//装备集合
|
||||
|
||||
private Dictionary<string, Material> _equips; //装备集合
|
||||
private List<Material> _cancel; //未穿戴材质球
|
||||
private List<Material> _wear; //穿戴材质球
|
||||
|
||||
public void OnCreate(object createParam)
|
||||
{
|
||||
_equips = new Dictionary<string, string>();
|
||||
|
||||
_equips.Add("帽子", "");
|
||||
_equips.Add("手套", "");
|
||||
_equips.Add("衣服", "");
|
||||
_equips = new Dictionary<string, Material>();
|
||||
_cancel = new List<Material>();
|
||||
_wear = new List<Material>();
|
||||
|
||||
_cancel = Resources.LoadAll<Material>("Materials/CharacterEquip/Cancel").ToList();
|
||||
_wear = Resources.LoadAll<Material>("Materials/CharacterEquip/Wear").ToList();
|
||||
|
||||
_equips.Add("帽子", null);
|
||||
_equips.Add("手套", null);
|
||||
_equips.Add("衣服", null);
|
||||
}
|
||||
|
||||
public void OnUpdate()
|
||||
|
|
@ -32,5 +40,22 @@ namespace DefaultNamespace
|
|||
public void OnGUI()
|
||||
{
|
||||
}
|
||||
|
||||
public void ChangeEquip(string equipName, bool isChange)
|
||||
{
|
||||
Material ma = null;
|
||||
|
||||
if (_equips.TryGetValue(equipName, out ma))
|
||||
{
|
||||
if (isChange)
|
||||
{
|
||||
ma = _wear.SingleOrDefault(s => s.name == equipName);
|
||||
}
|
||||
else
|
||||
{
|
||||
ma = _cancel.SingleOrDefault(s => s.name == equipName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue