mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-03-11 00:04:56 +08:00
chore: preserve outfit side PhysBone even if the bone names match
This commit is contained in:
parent
ef17cbbbf9
commit
ff28d43671
@ -40,6 +40,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
private ndmf.BuildContext frameworkContext;
|
private ndmf.BuildContext frameworkContext;
|
||||||
private BuildContext context;
|
private BuildContext context;
|
||||||
|
private VRCPhysBone[] physBones;
|
||||||
private BoneDatabase BoneDatabase = new BoneDatabase();
|
private BoneDatabase BoneDatabase = new BoneDatabase();
|
||||||
|
|
||||||
private PathMappings PathMappings => frameworkContext.Extension<AnimationServicesContext>()
|
private PathMappings PathMappings => frameworkContext.Extension<AnimationServicesContext>()
|
||||||
@ -52,6 +53,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
this.frameworkContext = context;
|
this.frameworkContext = context;
|
||||||
this.context = context.Extension<ModularAvatarContext>().BuildContext;
|
this.context = context.Extension<ModularAvatarContext>().BuildContext;
|
||||||
|
this.physBones = avatarGameObject.transform.GetComponentsInChildren<VRCPhysBone>(true);
|
||||||
|
|
||||||
var mergeArmatures =
|
var mergeArmatures =
|
||||||
avatarGameObject.transform.GetComponentsInChildren<ModularAvatarMergeArmature>(true);
|
avatarGameObject.transform.GetComponentsInChildren<ModularAvatarMergeArmature>(true);
|
||||||
@ -338,7 +340,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
var targetObjectName = childName.Substring(config.prefix.Length,
|
var targetObjectName = childName.Substring(config.prefix.Length,
|
||||||
childName.Length - config.prefix.Length - config.suffix.Length);
|
childName.Length - config.prefix.Length - config.suffix.Length);
|
||||||
var targetObject = newParent.transform.Find(targetObjectName);
|
var targetObject = newParent.transform.Find(targetObjectName);
|
||||||
if (targetObject != null)
|
// Zip merge bones if the names match and the outfit side is not affected by its own PhysBone.
|
||||||
|
if (targetObject != null && !IsAffectedByPhysBone(child))
|
||||||
{
|
{
|
||||||
childNewParent = targetObject.gameObject;
|
childNewParent = targetObject.gameObject;
|
||||||
shouldZip = true;
|
shouldZip = true;
|
||||||
@ -350,6 +353,11 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsAffectedByPhysBone(Transform target)
|
||||||
|
{
|
||||||
|
return physBones.Any(x => target.IsChildOf(x.GetRootTransform()) && !x.ignoreTransforms.Any(target.IsChildOf));
|
||||||
|
}
|
||||||
|
|
||||||
Transform FindOriginalParent(Transform merged)
|
Transform FindOriginalParent(Transform merged)
|
||||||
{
|
{
|
||||||
while (merged != null && thisPassAdded.Contains(merged)) merged = merged.parent;
|
while (merged != null && thisPassAdded.Contains(merged)) merged = merged.parent;
|
||||||
|
Loading…
Reference in New Issue
Block a user