mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-11 21:14:19 -05:00
fix SphereCollider. fix gizmo
This commit is contained in:
parent
28ef0547f2
commit
ed7b0955bc
|
|
@ -137,26 +137,18 @@ namespace VRM
|
|||
|
||||
protected virtual Vector3 Collision(List<SphereCollider> colliders, Vector3 nextTail)
|
||||
{
|
||||
var position = m_transform.position;
|
||||
|
||||
foreach (var collider in colliders)
|
||||
{
|
||||
var ls = collider.transform.lossyScale;
|
||||
var scale = Mathf.Max(ls.x, ls.y, ls.z);
|
||||
|
||||
var r = Radius + collider.radius * scale;
|
||||
var colliderPosition = collider.transform.TransformPoint(collider.center);
|
||||
|
||||
if (Vector3.SqrMagnitude(nextTail - colliderPosition) > r * r) continue;
|
||||
|
||||
// ヒット。Colliderの半径方向に押し出す
|
||||
var normal = (nextTail - colliderPosition).normalized;
|
||||
var posFromCollider = colliderPosition + normal * (Radius + collider.radius * scale);
|
||||
|
||||
// 長さをboneLengthに強制
|
||||
nextTail = position + (posFromCollider - position).normalized * m_length;
|
||||
var r = Radius + collider.Radius;
|
||||
if (Vector3.SqrMagnitude(nextTail - collider.Position) <= (r * r))
|
||||
{
|
||||
// ヒット。Colliderの半径方向に押し出す
|
||||
var normal = (nextTail - collider.Position).normalized;
|
||||
var posFromCollider = collider.Position + normal * (Radius + collider.Radius);
|
||||
// 長さをboneLengthに強制
|
||||
nextTail = m_transform.position + (posFromCollider - m_transform.position).normalized * m_length;
|
||||
}
|
||||
}
|
||||
|
||||
return nextTail;
|
||||
}
|
||||
|
||||
|
|
@ -267,10 +259,19 @@ namespace VRM
|
|||
|
||||
public struct SphereCollider
|
||||
{
|
||||
public Transform transform;
|
||||
public Vector3 center;
|
||||
public float radius;
|
||||
// public Transform Transform;
|
||||
public readonly Vector3 Position;
|
||||
public readonly float Radius;
|
||||
|
||||
public SphereCollider(Transform transform, VRMSpringBoneColliderGroup.SphereCollider collider)
|
||||
{
|
||||
Position = transform.TransformPoint(collider.Offset);
|
||||
var ls = transform.lossyScale;
|
||||
var scale = Mathf.Max(ls.x, ls.y, ls.z);
|
||||
Radius = scale * collider.Radius;
|
||||
}
|
||||
}
|
||||
|
||||
private List<SphereCollider> m_colliders = new List<SphereCollider>();
|
||||
private void UpdateProcess(float deltaTime)
|
||||
{
|
||||
|
|
@ -290,12 +291,7 @@ namespace VRM
|
|||
{
|
||||
foreach (var collider in group.Colliders)
|
||||
{
|
||||
m_colliders.Add(new SphereCollider
|
||||
{
|
||||
transform = group.transform,
|
||||
center = group.transform.TransformPoint(collider.Offset),
|
||||
radius = collider.Radius,
|
||||
});
|
||||
m_colliders.Add(new SphereCollider(group.transform, collider));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ using UnityEngine;
|
|||
|
||||
namespace VRM
|
||||
{
|
||||
#if UNITY_5_5_OR_NEWER
|
||||
#if UNITY_5_5_OR_NEWER
|
||||
[DefaultExecutionOrder(11001)]
|
||||
#endif
|
||||
#endif
|
||||
public class VRMSpringBoneColliderGroup : MonoBehaviour
|
||||
{
|
||||
[Serializable]
|
||||
|
|
@ -33,10 +33,15 @@ namespace VRM
|
|||
{
|
||||
Gizmos.color = m_gizmoColor;
|
||||
Matrix4x4 mat = transform.localToWorldMatrix;
|
||||
var ls = Mathf.Max(
|
||||
transform.lossyScale.x,
|
||||
transform.lossyScale.y,
|
||||
transform.lossyScale.z
|
||||
);
|
||||
Gizmos.matrix = mat * Matrix4x4.Scale(new Vector3(
|
||||
1.0f / transform.lossyScale.x,
|
||||
1.0f / transform.lossyScale.y,
|
||||
1.0f / transform.lossyScale.z
|
||||
1.0f / transform.lossyScale.x * ls,
|
||||
1.0f / transform.lossyScale.y * ls,
|
||||
1.0f / transform.lossyScale.z * ls
|
||||
));
|
||||
foreach (var y in Colliders)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user