62 lines
1.4 KiB
C#
62 lines
1.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace VRM
|
|
{
|
|
[Serializable]
|
|
public struct OffsetOnTransform
|
|
{
|
|
public Transform Transform;
|
|
public Matrix4x4 OffsetRotation;
|
|
|
|
public Matrix4x4 WorldMatrix
|
|
{
|
|
get
|
|
{
|
|
if (Transform == null) return Matrix4x4.identity;
|
|
return Transform.localToWorldMatrix * OffsetRotation;
|
|
}
|
|
}
|
|
|
|
public Vector3 WorldForward
|
|
{
|
|
get
|
|
{
|
|
var m = WorldMatrix;
|
|
return m.GetColumn(2); // zaxis
|
|
}
|
|
}
|
|
|
|
Matrix4x4 m_initialLocalMatrix;
|
|
public void Setup()
|
|
{
|
|
if (Transform == null) return;
|
|
m_initialLocalMatrix = Transform.parent.worldToLocalMatrix * Transform.localToWorldMatrix;
|
|
}
|
|
|
|
public Matrix4x4 InitialWorldMatrix
|
|
{
|
|
get
|
|
{
|
|
return Transform.parent.localToWorldMatrix * m_initialLocalMatrix;
|
|
}
|
|
}
|
|
|
|
public static OffsetOnTransform Create(Transform transform)
|
|
{
|
|
var coordinate = new OffsetOnTransform
|
|
{
|
|
Transform = transform
|
|
};
|
|
|
|
if (transform != null)
|
|
{
|
|
coordinate.OffsetRotation = transform.worldToLocalMatrix.RotationToWorldAxis();
|
|
}
|
|
|
|
return coordinate;
|
|
}
|
|
}
|
|
}
|