You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
public class Outliner : MonoBehaviour
|
|
{
|
|
public Material outlineMaterial; // Assign in Inspector
|
|
public float outlineWidth = 0.1f; // Customize per object
|
|
|
|
private Renderer objRenderer;
|
|
private Material[] originalMaterials;
|
|
private MaterialPropertyBlock propertyBlock;
|
|
|
|
void Start()
|
|
{
|
|
objRenderer = GetRenderer();
|
|
if (objRenderer != null)
|
|
{
|
|
originalMaterials = objRenderer.sharedMaterials;
|
|
propertyBlock = new MaterialPropertyBlock();
|
|
}
|
|
}
|
|
|
|
public void EnableOutline()
|
|
{
|
|
if (objRenderer != null && outlineMaterial != null)
|
|
{
|
|
Material[] newMaterials = new Material[originalMaterials.Length + 1];
|
|
newMaterials[0] = outlineMaterial; // Outline material at index 0
|
|
|
|
for (int i = 0; i < originalMaterials.Length; i++)
|
|
newMaterials[i + 1] = originalMaterials[i];
|
|
|
|
objRenderer.materials = newMaterials;
|
|
|
|
// Set custom outline width
|
|
objRenderer.GetPropertyBlock(propertyBlock);
|
|
propertyBlock.SetFloat("_OutlineWidth", outlineWidth);
|
|
objRenderer.SetPropertyBlock(propertyBlock);
|
|
}
|
|
}
|
|
|
|
public void DisableOutline()
|
|
{
|
|
if (objRenderer != null)
|
|
{
|
|
objRenderer.materials = originalMaterials; // Restore original materials
|
|
}
|
|
}
|
|
|
|
public Renderer GetRenderer()
|
|
{
|
|
if (TryGetComponent<MeshRenderer>(out MeshRenderer meshRenderer))
|
|
return meshRenderer;
|
|
if (TryGetComponent<SkinnedMeshRenderer>(out SkinnedMeshRenderer skinnedRenderer))
|
|
return skinnedRenderer;
|
|
return null;
|
|
}
|
|
}
|