90 lines
2.8 KiB
C#
90 lines
2.8 KiB
C#
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
[ExecuteAlways]
|
|
public class NitroxTestShowTransform : MonoBehaviour
|
|
{
|
|
[Header("GlobalPosition")]
|
|
[SerializeField] private float positionX;
|
|
[SerializeField] private float positionY;
|
|
[SerializeField] private float positionZ;
|
|
|
|
[Header("GlobalRotation")]
|
|
[SerializeField] private float rotationX;
|
|
[SerializeField] private float rotationY;
|
|
[SerializeField] private float rotationZ;
|
|
[SerializeField] private float rotationW;
|
|
|
|
[Header("GlobalRotationEuler")]
|
|
[SerializeField] private float rotationEulerX;
|
|
[SerializeField] private float rotationEulerY;
|
|
[SerializeField] private float rotationEulerZ;
|
|
|
|
[Header("Matrices")]
|
|
[SerializeField] private Matrix4x4 localToWorldMatrix;
|
|
[SerializeField] private Matrix4x4 translationMatrix;
|
|
[SerializeField] private Matrix4x4 rotationMatrix;
|
|
[SerializeField] private Matrix4x4 scaleMatrix;
|
|
|
|
public void Update()
|
|
{
|
|
Vector3 position = transform.position;
|
|
positionX = position.x;
|
|
positionY = position.y;
|
|
positionZ = position.z;
|
|
|
|
Quaternion rotation = transform.rotation;
|
|
rotationX = rotation.x;
|
|
rotationY = rotation.y;
|
|
rotationZ = rotation.z;
|
|
rotationW = rotation.w;
|
|
|
|
Vector3 eulerAngles = transform.eulerAngles;
|
|
rotationEulerX = eulerAngles.x;
|
|
rotationEulerY = eulerAngles.y;
|
|
rotationEulerZ = eulerAngles.z;
|
|
|
|
localToWorldMatrix = transform.localToWorldMatrix;
|
|
translationMatrix = Matrix4x4.Translate(transform.localPosition);
|
|
rotationMatrix = Matrix4x4.Rotate(transform.localRotation);
|
|
scaleMatrix = Matrix4x4.Scale(transform.localScale);
|
|
}
|
|
}
|
|
|
|
[CustomPropertyDrawer(typeof(Matrix4x4))]
|
|
public class MatrixDrawer : PropertyDrawer
|
|
{
|
|
private const float CELL_WIDTH = 95f;
|
|
private const float CELL_HEIGHT = 20f;
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
EditorGUI.BeginProperty(position, label, property);
|
|
EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
|
|
|
|
position.x += 10;
|
|
position.y += 20;
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
for (int j = 0; j < 4; j++)
|
|
{
|
|
Rect rect = new Rect(position.x, position.y, CELL_WIDTH, CELL_HEIGHT);
|
|
EditorGUI.PropertyField(rect, property.FindPropertyRelative("e" + i+j), GUIContent.none);
|
|
|
|
position.x += CELL_WIDTH;
|
|
}
|
|
|
|
position.x -= CELL_WIDTH*4;
|
|
position.y += CELL_HEIGHT;
|
|
}
|
|
|
|
EditorGUI.EndProperty();
|
|
}
|
|
|
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
|
{
|
|
return base.GetPropertyHeight(property, label) * 5 + 20;
|
|
}
|
|
}
|