Merge pull request #2485 from ousttrue/fix/collidergroup_separate

VRM10SpringBoneColliderGroup 改善
This commit is contained in:
ousttrue 2024-11-08 00:22:26 +09:00 committed by GitHub
commit c81242b588
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 84 additions and 3 deletions

View File

@ -34,7 +34,12 @@ namespace UniVRM10
public bool IsSelected => GetInstanceID() == SelectedGuid;
public void OnDrawGizmosSelected()
void OnDrawGizmosSelected()
{
DrawGizmos();
}
public void DrawGizmos()
{
Gizmos.matrix = transform.localToWorldMatrix;
switch (ColliderType)

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace UniVRM10
@ -14,5 +15,80 @@ namespace UniVRM10
[SerializeField]
public List<VRM10SpringBoneCollider> Colliders = new List<VRM10SpringBoneCollider>();
string GetName()
{
if (!string.IsNullOrEmpty(Name))
{
return Name;
}
return Colliders[0].name;
}
#if UNITY_EDITOR
[ContextMenu("Create child and move to that")]
public void Separate()
{
var vrm = GetComponentInParent<Vrm10Instance>();
if (vrm == null)
{
return;
}
if (Colliders == null || Colliders.Count == 0)
{
return;
}
UnityEditor.Undo.IncrementCurrentGroup();
UnityEditor.Undo.SetCurrentGroupName("VRM10SpringBoneColliderGroup.Separate");
var undo = UnityEditor.Undo.GetCurrentGroup();
var child = new GameObject($"group: {GetName()}");
UnityEditor.Undo.RegisterCreatedObjectUndo(child, "child");
UnityEditor.Undo.SetTransformParent(child.transform, transform, "setParent");
var group = UnityEditor.Undo.AddComponent<VRM10SpringBoneColliderGroup>(child);
group.Name = Name;
group.Colliders = Colliders.ToList();
for (int i = 0; i < vrm.SpringBone.ColliderGroups.Count; ++i)
{
if (vrm.SpringBone.ColliderGroups[i] == this)
{
vrm.SpringBone.ColliderGroups[i] = group;
}
}
foreach (var spring in vrm.SpringBone.Springs)
{
for (int i = 0; i < spring.ColliderGroups.Count; ++i)
{
if (spring.ColliderGroups[i] == this)
{
spring.ColliderGroups[i] = group;
}
}
}
if (Application.isPlaying)
{
Destroy(this);
}
else
{
UnityEditor.Undo.DestroyObjectImmediate(this);
}
UnityEditor.Undo.RegisterFullObjectHierarchyUndo(vrm.gameObject, "VRM10SpringBoneColliderGroup.Separate");
UnityEditor.Undo.CollapseUndoOperations(undo);
}
#endif
public void OnDrawGizmosSelected()
{
foreach (var collider in Colliders)
{
collider.DrawGizmos();
}
}
}
}

View File

@ -23,7 +23,7 @@ namespace UniVRM10
[SerializeField, Range(0, 1)]
public float m_dragForce = 0.4f;
[SerializeField]
[SerializeField]
public float m_jointRadius = 0.02f;
[SerializeField]

View File

@ -101,7 +101,7 @@ namespace UniVRM10
{
foreach (var collider in group.Colliders)
{
collider.OnDrawGizmosSelected();
collider.DrawGizmos();
}
}
m_drawCollider = 0;