VRC_Avatar/Assets/RekornTools/Avatar/Components/SkinnedMeshTools/MeshBonePairs.cs

50 lines
1.7 KiB
C#
Raw Normal View History

2025-02-15 18:50:31 +09:00
#if UNITY_EDITOR
using System.Linq;
using JetBrains.Annotations;
using UnityEditor;
using UnityEngine;
namespace RekornTools.Avatar
{
[ExecuteInEditMode]
public sealed class MeshBonePairs : MonoBehaviour
{
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Local
[field: SerializeField] [NotNull] public SkinnedMeshRenderers Meshes { get; private set; } = new SkinnedMeshRenderers();
[field: SerializeField] [NotNull] public Transforms Bones { get; private set; } = new Transforms();
// ReSharper restore AutoPropertyCanBeMadeGetOnly.Local
public void SelectAll()
{
var selection = new Object[] { };
if (Meshes.TryGetSelections(out var meshSelections))
selection = selection.Concat(meshSelections).ToArray();
if (Bones.TryGetSelections(out var boneSelections))
selection = selection.Concat(boneSelections).ToArray();
if (selection.Length > 0) Selection.objects = selection;
}
public void ClearAll()
{
ClearMeshes();
ClearBones();
}
public void DestroyAll()
{
DestroyMeshes();
DestroyBones();
}
public void SelectMeshes() => Meshes.SelectComponents();
public void SelectBones() => Bones.SelectComponents();
public void ClearMeshes() => this.UndoableAction(() => Meshes.Clear());
public void ClearBones() => this.UndoableAction(() => Bones.Clear());
public void DestroyMeshes() => this.UndoableAction(() => Meshes.DestroyItems());
public void DestroyBones() => this.UndoableAction(() => Bones.DestroyItems());
}
}
#endif