mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-02-01 11:12:55 +08:00
[MergeArmature] Restore support for inferring prefix/suffix
This commit is contained in:
parent
8b9037009a
commit
7ca52e5a0a
@ -0,0 +1,56 @@
|
|||||||
|
using System;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace net.fushizen.modular_avatar.core.editor
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(ModularAvatarMergeArmature))]
|
||||||
|
public class MergeArmatureEditor : Editor
|
||||||
|
{
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
var target = (ModularAvatarMergeArmature) this.target;
|
||||||
|
var priorMergeTarget = target.mergeTargetObject;
|
||||||
|
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
base.OnInspectorGUI();
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
|
||||||
|
if (target.mergeTargetObject != null && priorMergeTarget == null
|
||||||
|
&& string.IsNullOrEmpty(target.prefix)
|
||||||
|
&& string.IsNullOrEmpty(target.suffix))
|
||||||
|
{
|
||||||
|
// We only infer if targeting the armature (below the Hips bone)
|
||||||
|
var rootAnimator = RuntimeUtil.FindAvatarInParents(target.transform)?.GetComponent<Animator>();
|
||||||
|
if (rootAnimator == null) return;
|
||||||
|
|
||||||
|
var hips = rootAnimator.GetBoneTransform(HumanBodyBones.Hips);
|
||||||
|
if (hips == null || hips.transform.parent != target.mergeTargetObject.transform) return;
|
||||||
|
|
||||||
|
// We also require that the attached object has exactly one child (presumably the hips)
|
||||||
|
if (target.transform.childCount != 1) return;
|
||||||
|
|
||||||
|
// Infer the prefix and suffix by comparing the names of the mergeTargetObject's hips with the child of the
|
||||||
|
// GameObject we're attached to.
|
||||||
|
var baseName = hips.name;
|
||||||
|
var mergeName = target.transform.GetChild(0).name;
|
||||||
|
|
||||||
|
var prefixLength = mergeName.IndexOf(baseName, StringComparison.InvariantCulture);
|
||||||
|
if (prefixLength < 0) return;
|
||||||
|
|
||||||
|
var suffixLength = mergeName.Length - prefixLength - baseName.Length;
|
||||||
|
|
||||||
|
target.prefix = mergeName.Substring(0, prefixLength);
|
||||||
|
target.suffix = mergeName.Substring(mergeName.Length - suffixLength);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(target.prefix) || !string.IsNullOrEmpty(target.suffix))
|
||||||
|
{
|
||||||
|
RuntimeUtil.MarkDirty(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f8a400eb7fa8474fb04770eca10b1255
|
||||||
|
timeCreated: 1664846740
|
Loading…
Reference in New Issue
Block a user