Avoid copying animators that have nothing merged in

This commit is contained in:
bd_ 2022-08-29 18:35:16 -07:00
parent fb5f8c555e
commit 4ee54d47a1

View File

@ -13,6 +13,9 @@ namespace net.fushizen.modular_avatar.core.editor
private const string SAMPLE_PATH_LEGACY = "Assets/VRCSDK/Examples3/Animation/Controllers"; private const string SAMPLE_PATH_LEGACY = "Assets/VRCSDK/Examples3/Animation/Controllers";
public int callbackOrder => HookSequence.SEQ_MERGE_ANIMATORS; public int callbackOrder => HookSequence.SEQ_MERGE_ANIMATORS;
private Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorController> defaultControllers_ =
new Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorController>();
Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorCombiner> mergeSessions = Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorCombiner> mergeSessions =
new Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorCombiner>(); new Dictionary<VRCAvatarDescriptor.AnimLayerType, AnimatorCombiner>();
@ -28,8 +31,16 @@ namespace net.fushizen.modular_avatar.core.editor
foreach (var merge in toMerge) foreach (var merge in toMerge)
{ {
if (merge.animator != null && mergeSessions.TryGetValue(merge.layerType, out var session)) if (merge.animator == null) continue;
if (!mergeSessions.TryGetValue(merge.layerType, out var session))
{ {
session = new AnimatorCombiner();
mergeSessions[merge.layerType] = session;
if (defaultControllers_.ContainsKey(merge.layerType))
{
session.AddController("", defaultControllers_[merge.layerType]);
}
var relativePath = RuntimeUtil.RelativePath(avatarGameObject, merge.gameObject); var relativePath = RuntimeUtil.RelativePath(avatarGameObject, merge.gameObject);
mergeSessions[merge.layerType].AddController( mergeSessions[merge.layerType].AddController(
relativePath != "" ? relativePath + "/" : "", relativePath != "" ? relativePath + "/" : "",
@ -58,8 +69,11 @@ namespace net.fushizen.modular_avatar.core.editor
for (int i = 0; i < layers.Length; i++) for (int i = 0; i < layers.Length; i++)
{ {
layers[i].isDefault = false; if (mergeSessions.TryGetValue(layers[i].type, out var session))
layers[i].animatorController = mergeSessions[layers[i].type].Finish(); {
layers[i].isDefault = false;
layers[i].animatorController = session.Finish();
}
} }
return layers; return layers;
@ -71,11 +85,8 @@ namespace net.fushizen.modular_avatar.core.editor
{ {
var controller = ResolveLayerController(layer); var controller = ResolveLayerController(layer);
if (controller == null) controller = new AnimatorController(); if (controller == null) controller = new AnimatorController();
var session = new AnimatorCombiner();
session.AddController("", controller);
mergeSessions[layer.type] = session; defaultControllers_[layer.type] = controller;
} }
} }