Skip to content

Commit

Permalink
Merge commit '811d49c6877ba12d9fe6d93aabefc269287eafdd'
Browse files Browse the repository at this point in the history
  • Loading branch information
Tliks committed May 17, 2024
2 parents 47edaeb + 811d49c commit 89a4451
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 25 deletions.
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,19 @@
### Added

### Changed

- Change log message to appropriate format
### Deprecated

### Removed

### Fixed
- rootbone of skinned mesh is not held
- anchor of skinned mesh is not held
- Prefab Asset is not updated

### Security

## [0.4.0] - 20204-05-09
## [0.4.0] - 2024-05-09
### Added
- window to Window/Module Creator
- option to disable PhysBone/PhysBoneColider output
Expand Down
52 changes: 29 additions & 23 deletions Editor/ModuleCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,30 @@ public void CheckAndCopyBones(GameObject sourceObject)

CleanUpHierarchy(new_root, skin_index);

PrefabUtility.SavePrefabAsset(new_root);

PrefabUtility.InstantiatePrefab(new_root);

Debug.Log("Saved to " + variantPath);
Debug.Log("Saved prefab to " + variantPath);
}

catch (InvalidOperationException ex)
{
Debug.LogError("[Module Creator] " + ex.Message);
}
catch (Exception ex)
{
Debug.LogError(ex);
Debug.LogError(ex.StackTrace);
Debug.LogError(ex);
}
}

private (GameObject, int) CheckObjects(GameObject targetObject)
{
Checktarget(targetObject);
GameObject root = CheckRoot(targetObject);
CheckHips(root);
CheckSkin(targetObject);
CheckHips(root);

//skin_index: 複製先でSkinnedMeshRendererがついたオブジェクトを追跡するためのインデックス
Transform[] AllChildren = GetAllChildren(root);
Expand Down Expand Up @@ -82,6 +88,16 @@ GameObject CheckRoot(GameObject targetObject)
return root;
}

void CheckSkin(GameObject targetObject)
{
SkinnedMeshRenderer skinnedMeshRenderer = targetObject.GetComponent<SkinnedMeshRenderer>();
if (skinnedMeshRenderer == null)
{

throw new InvalidOperationException($"'{targetObject.name}' does not have a SkinnedMeshRenderer.");
}
}

void CheckHips(GameObject root)
{
GameObject hips = null;
Expand All @@ -103,15 +119,6 @@ void CheckHips(GameObject root)
}
}

void CheckSkin(GameObject targetObject)
{
SkinnedMeshRenderer skinnedMeshRenderer = targetObject.GetComponent<SkinnedMeshRenderer>();
if (skinnedMeshRenderer == null)
{

throw new InvalidOperationException($"{targetObject.name} does not have a SkinnedMeshRenderer.");
}
}
}

private (GameObject, string) CopyRootObject(GameObject root_object, string source_name)
Expand Down Expand Up @@ -158,8 +165,17 @@ private void CleanUpHierarchy(GameObject new_root, int skin_index)
GameObject skin = AllChildren[skin_index].gameObject;
objectsToSave.Add(skin);

SkinnedMeshRenderer skinnedMeshRenderer = skin.GetComponent<SkinnedMeshRenderer>();

// SkinnedMeshRendererのrootBoneとanchor overrideに設定されているオブジェクトを追加
Transform rootBone = skinnedMeshRenderer.rootBone;
Transform anchor = skinnedMeshRenderer.probeAnchor;
if (rootBone) objectsToSave.Add(rootBone.gameObject);
if (anchor) objectsToSave.Add(anchor.gameObject);

// ウェイトをつけているオブジェクトを追加
HashSet<GameObject> weightedBones = CheckBoneWeight(skin);
HashSet<GameObject> weightedBones = GetWeightedBones(skinnedMeshRenderer);
Debug.Log($"Bones weighting {skin.name}: {weightedBones.Count}/{skinnedMeshRenderer.bones.Length}");
objectsToSave.UnionWith(weightedBones);

// PhysBoneに関連するオブジェクトを追加
Expand All @@ -172,16 +188,6 @@ private void CleanUpHierarchy(GameObject new_root, int skin_index)
CheckAndDeleteRecursive(new_root, objectsToSave);
}

private HashSet<GameObject> CheckBoneWeight(GameObject targetObject)
{
SkinnedMeshRenderer skinnedMeshRenderer = targetObject.GetComponent<SkinnedMeshRenderer>();
// 指定のメッシュにウェイトを付けてるボーンの一覧を取得
HashSet<GameObject> weightedBones = GetWeightedBones(skinnedMeshRenderer);

Debug.Log($"Bones weighting {targetObject.name}: {weightedBones.Count}/{skinnedMeshRenderer.bones.Length}");
return weightedBones;
}

private HashSet<GameObject> GetWeightedBones(SkinnedMeshRenderer skinnedMeshRenderer)
{
BoneWeight[] boneWeights = skinnedMeshRenderer.sharedMesh.boneWeights;
Expand Down

0 comments on commit 89a4451

Please sign in to comment.