Files
Nitrox/NitroxUnity/Assets/Editor/NitroxTestShowTransform.cs
2025-07-06 00:23:46 +02:00

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;
}
}