- Validator: Added asset validators with material texture and shader validation
- Validator: Added option to enable/disable certain validators - Project Settings: Fixed issue, where changes weren't always saved - Unity: Removed deprecated warnings in Unity 6.4
This commit is contained in:
parent
01ac17a078
commit
dd55a87740
30 changed files with 716 additions and 38 deletions
3
Editor/Validators/Assets.meta
Normal file
3
Editor/Validators/Assets.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ddbf30cd5a674751be0c125c1f4e917b
|
||||
timeCreated: 1779623970
|
||||
43
Editor/Validators/Assets/AssetValidatorMaterialShader.cs
Normal file
43
Editor/Validators/Assets/AssetValidatorMaterialShader.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace Module.ProjectValidator.Editor
|
||||
{
|
||||
internal sealed class AssetValidatorMaterialShader : IAssetValidator<Material>
|
||||
{
|
||||
public void Validate(Material obj, List<ValidatorResult> results)
|
||||
{
|
||||
if (obj.shader == null)
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, "Shader is Null"));
|
||||
else if (!IsCompatible(obj.shader))
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Warning, $"Shader '{obj.shader.name}' is not compatible with render pipeline"));
|
||||
else if (!obj.shader.isSupported)
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Warning, $"Shader '{obj.shader.name}' is not supported"));
|
||||
else if (ShaderUtil.ShaderHasError(obj.shader))
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, $"Shader '{obj.shader.name}' has compile errors"));
|
||||
}
|
||||
|
||||
private static bool IsCompatible(Shader shader)
|
||||
{
|
||||
var pipeline = GraphicsSettings.currentRenderPipeline;
|
||||
|
||||
if (pipeline == null)
|
||||
return true;
|
||||
|
||||
var tagSearch = new ShaderTagId("RenderPipeline");
|
||||
var tagPipeline = new ShaderTagId(pipeline.renderPipelineShaderTag);
|
||||
|
||||
for (var i = 0; i < shader.passCount; i++)
|
||||
{
|
||||
var tagPass = shader.FindPassTagValue(i, tagSearch);
|
||||
|
||||
if (tagPass == tagPipeline)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2218d247daff44bf84629756b63ea650
|
||||
timeCreated: 1779623986
|
||||
31
Editor/Validators/Assets/AssetValidatorMaterialTexture.cs
Normal file
31
Editor/Validators/Assets/AssetValidatorMaterialTexture.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace Module.ProjectValidator.Editor
|
||||
{
|
||||
internal sealed class AssetValidatorMaterialTexture : IAssetValidator<Material>
|
||||
{
|
||||
public void Validate(Material obj, List<ValidatorResult> results)
|
||||
{
|
||||
if (obj.shader == null)
|
||||
return;
|
||||
|
||||
var count = obj.shader.GetPropertyCount();
|
||||
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var propertyType = obj.shader.GetPropertyType(i);
|
||||
|
||||
if (propertyType != ShaderPropertyType.Texture)
|
||||
continue;
|
||||
|
||||
var propertyName = obj.shader.GetPropertyName(i);
|
||||
var propertyValue = obj.GetTexture(propertyName);
|
||||
|
||||
if (propertyValue == null)
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Warning, $"Texture property '{propertyName}' is Null"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cfeb4b29a9cd4ea79c1e9325b8122e17
|
||||
timeCreated: 1779627240
|
||||
12
Editor/Validators/Attributes/AttributeValidatorObsolete.cs
Normal file
12
Editor/Validators/Attributes/AttributeValidatorObsolete.cs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
|
||||
namespace Module.ProjectValidator.Editor
|
||||
{
|
||||
internal sealed class AttributeValidatorObsolete : IAttributeValidator<ObsoleteAttribute>
|
||||
{
|
||||
public ValidatorResult Validate(ObsoleteAttribute attribute, object value)
|
||||
{
|
||||
return ValidatorResult.Create(EValidatorSeverity.Error, "Obsolete");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 982ac4e898cc2ca438e98a2f0034a8d3
|
||||
28
Editor/Validators/GameObject/GameObjectValidatorTransform.cs
Normal file
28
Editor/Validators/GameObject/GameObjectValidatorTransform.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Module.ProjectValidator.Editor
|
||||
{
|
||||
internal sealed class GameObjectValidatorTransform : IGameObjectValidator
|
||||
{
|
||||
public void Validate(GameObject gameObject, List<ValidatorResult> results)
|
||||
{
|
||||
var transform = gameObject.transform;
|
||||
var lp = transform.localPosition;
|
||||
var lr = transform.localRotation;
|
||||
var ls = transform.localScale;
|
||||
|
||||
if (IsInvalid(lp.x) || IsInvalid(lp.y) || IsInvalid(lp.z))
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, $"Local position '{lp}' is invalid"));
|
||||
if (IsInvalid(lr.x) || IsInvalid(lr.y) || IsInvalid(lr.z) || IsInvalid(lr.w))
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, $"Local rotation '{lr}' is invalid"));
|
||||
if (IsInvalid(ls.x) || IsInvalid(ls.y) || IsInvalid(ls.z))
|
||||
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, $"Local scale '{ls}' is invalid"));
|
||||
}
|
||||
|
||||
private static bool IsInvalid(float value)
|
||||
{
|
||||
return float.IsNaN(value) || float.IsInfinity(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 727d5de59b004deb8c192337bcee132e
|
||||
timeCreated: 1779628852
|
||||
Loading…
Add table
Add a link
Reference in a new issue