Skip to content

Commit a0c2a7b

Browse files
committed
Improve integration with Live2D assets
- Added container-independent method for searching AnimationClip assets (However, it's not really universal, so it can't completely replace the container-dependent method)
1 parent 0cc74b8 commit a0c2a7b

File tree

6 files changed

+75
-1
lines changed

6 files changed

+75
-1
lines changed

AssetStudio/AssetsManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public void SetAssetFilter(params ClassIDType[] classIDTypes)
7474
filteredAssetTypesList.Add(ClassIDType.Texture2D);
7575
filteredAssetTypesList.Add(ClassIDType.SpriteAtlas);
7676
}
77+
if (classIDTypes.Contains(ClassIDType.Animator))
78+
{
79+
filteredAssetTypesList.Add(ClassIDType.AnimatorController);
80+
filteredAssetTypesList.Add(ClassIDType.AnimatorOverrideController);
81+
}
7782

7883
filteredAssetTypesList.UnionWith(classIDTypes);
7984
}

AssetStudio/CubismModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class CubismModel
1515
public List<MonoBehaviour> ParamDisplayInfoList { get; set; }
1616
public List<MonoBehaviour> PartDisplayInfoList { get; set; }
1717
public List<MonoBehaviour> PosePartList { get; set; }
18+
public List<AnimationClip> ClipMotionList { get; set; }
1819
public GameObject ModelGameObject { get; set; }
1920

2021
public CubismModel(GameObject m_GameObject)
@@ -26,6 +27,7 @@ public CubismModel(GameObject m_GameObject)
2627
ParamDisplayInfoList = new List<MonoBehaviour>();
2728
PartDisplayInfoList = new List<MonoBehaviour>();
2829
PosePartList = new List<MonoBehaviour>();
30+
ClipMotionList = new List<AnimationClip>();
2931
}
3032
}
3133
}

AssetStudioCLI/Options/CLIOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ public static void ParseArgs(string[] args)
586586
o_exportAssetTypes.Value = new List<ClassIDType>
587587
{
588588
ClassIDType.AnimationClip,
589+
ClassIDType.Animator,
589590
ClassIDType.MonoBehaviour,
590591
ClassIDType.Texture2D,
591592
};

AssetStudioCLI/Studio.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ public static void ParseAssets()
295295
if (m_GameObject.CubismModel != null && TryGetCubismMoc(m_GameObject.CubismModel.CubismModelMono, out var mocMono))
296296
{
297297
l2dModelDict[mocMono] = m_GameObject.CubismModel;
298+
BindAnimationClips(m_GameObject);
298299
}
299300
break;
300301
case Animator m_Animator:
@@ -940,6 +941,34 @@ private static void BindCubismPosePart(MonoBehaviour m_MonoBehaviour)
940941
}
941942
}
942943

944+
private static void BindAnimationClips(GameObject gameObject)
945+
{
946+
if (gameObject.m_Animator == null || gameObject.m_Animator.m_Controller.IsNull)
947+
return;
948+
949+
if (!gameObject.m_Animator.m_Controller.TryGet(out var controller))
950+
return;
951+
952+
AnimatorController animatorController;
953+
if (controller is AnimatorOverrideController overrideController)
954+
{
955+
if (!overrideController.m_Controller.TryGet(out animatorController))
956+
return;
957+
}
958+
else
959+
{
960+
animatorController = (AnimatorController)controller;
961+
}
962+
963+
foreach (var clipPptr in animatorController.m_AnimationClips)
964+
{
965+
if (clipPptr.TryGet(out var m_AnimationClip))
966+
{
967+
gameObject.CubismModel.ClipMotionList.Add(m_AnimationClip);
968+
}
969+
}
970+
}
971+
943972
private static Transform GetRootTransform(Transform m_Transform)
944973
{
945974
if (m_Transform == null)

AssetStudioGUI/Studio.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ public static (string, List<TreeNode>) BuildAssetData()
236236
if (m_GameObject.CubismModel != null && TryGetCubismMoc(m_GameObject.CubismModel.CubismModelMono, out var mocMono))
237237
{
238238
l2dModelDict[mocMono] = m_GameObject.CubismModel;
239+
BindAnimationClips(m_GameObject);
239240
}
240241
break;
241242
case Texture2D m_Texture2D:
@@ -1075,6 +1076,34 @@ private static void BindCubismPosePart(MonoBehaviour m_MonoBehaviour)
10751076
}
10761077
}
10771078

1079+
private static void BindAnimationClips(GameObject gameObject)
1080+
{
1081+
if (gameObject.m_Animator == null || gameObject.m_Animator.m_Controller.IsNull)
1082+
return;
1083+
1084+
if (!gameObject.m_Animator.m_Controller.TryGet(out var controller))
1085+
return;
1086+
1087+
AnimatorController animatorController;
1088+
if (controller is AnimatorOverrideController overrideController)
1089+
{
1090+
if (!overrideController.m_Controller.TryGet(out animatorController))
1091+
return;
1092+
}
1093+
else
1094+
{
1095+
animatorController = (AnimatorController)controller;
1096+
}
1097+
1098+
foreach (var clipPptr in animatorController.m_AnimationClips)
1099+
{
1100+
if (clipPptr.TryGet(out var m_AnimationClip))
1101+
{
1102+
gameObject.CubismModel.ClipMotionList.Add(m_AnimationClip);
1103+
}
1104+
}
1105+
}
1106+
10781107
private static Transform GetRootTransform(Transform m_Transform)
10791108
{
10801109
if (m_Transform == null)

AssetStudioUtility/CubismLive2DExtractor/Live2DExtractor.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public Live2DExtractor(KeyValuePair<MonoBehaviour, List<Object>> assetGroupKvp,
7575
PhysicsMono = Model.PhysicsController;
7676
if (searchFadeMotions && TryGetFadeList(Model.FadeController, out var fadeMono))
7777
{
78-
FadeMotionLst = selFadeMotionLst = fadeMono;
78+
FadeMotionLst = fadeMono;
7979
}
8080
if (TryGetExpressionList(Model.ExpressionController, out var expressionMono))
8181
{
@@ -107,6 +107,10 @@ public Live2DExtractor(KeyValuePair<MonoBehaviour, List<Object>> assetGroupKvp,
107107
PoseParts = Model.PosePartList;
108108
searchPoseParts = false;
109109
}
110+
if (Model.ClipMotionList.Count > 0 && selClipMotions == null)
111+
{
112+
AnimationClips = Model.ClipMotionList;
113+
}
110114
}
111115
foreach (var asset in assetGroupKvp.Value)
112116
{
@@ -205,6 +209,10 @@ public Live2DExtractor(KeyValuePair<MonoBehaviour, List<Object>> assetGroupKvp,
205209
{
206210
Texture2Ds = renderTextureSet.ToList();
207211
}
212+
if (AnimationClips.Count > 0)
213+
{
214+
AnimationClips = AnimationClips.Distinct().ToList();
215+
}
208216
}
209217

210218
public void ExtractCubismModel(string destPath, Live2DMotionMode motionMode, bool forceBezier = false, int parallelTaskCount = 1)

0 commit comments

Comments
 (0)