feat(scripting): add transform orientation overloads

This commit is contained in:
2026-03-27 14:39:19 +08:00
parent 727b6ca249
commit 3e2608a802
6 changed files with 141 additions and 0 deletions

View File

@@ -73,6 +73,7 @@ set(XCENGINE_GAME_SCRIPT_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/LifecycleProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformConversionProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformMotionProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformOrientationProbe.cs
${CMAKE_CURRENT_SOURCE_DIR}/GameScripts/TransformSpaceProbe.cs
)

View File

@@ -0,0 +1,40 @@
using XCEngine;
namespace Gameplay
{
public sealed class TransformOrientationProbe : MonoBehaviour
{
public Vector3 ObservedForwardAfterAxisAngleRotate;
public Vector3 ObservedForwardAfterWorldAxisAngleRotate;
public Vector3 ObservedForwardAfterDefaultLookAt;
public Vector3 ObservedRightAfterDefaultLookAt;
public Vector3 ObservedUpAfterDefaultLookAt;
public Vector3 ObservedForwardAfterLookAtWithUp;
public Vector3 ObservedRightAfterLookAtWithUp;
public Vector3 ObservedUpAfterLookAtWithUp;
public void Start()
{
transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f);
transform.localRotation = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f);
transform.Rotate(new Vector3(0.0f, 1.0f, 0.0f), 90.0f);
ObservedForwardAfterAxisAngleRotate = transform.forward;
transform.Rotate(new Vector3(1.0f, 0.0f, 0.0f), 90.0f, Space.World);
ObservedForwardAfterWorldAxisAngleRotate = transform.forward;
transform.localRotation = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f);
transform.LookAt(new Vector3(1.0f, 0.0f, 1.0f));
ObservedForwardAfterDefaultLookAt = transform.forward;
ObservedRightAfterDefaultLookAt = transform.right;
ObservedUpAfterDefaultLookAt = transform.up;
transform.localRotation = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f);
transform.LookAt(new Vector3(1.0f, 0.0f, 1.0f), new Vector3(1.0f, 0.0f, 0.0f));
ObservedForwardAfterLookAtWithUp = transform.forward;
ObservedRightAfterLookAtWithUp = transform.right;
ObservedUpAfterLookAtWithUp = transform.up;
}
}
}

View File

@@ -101,9 +101,15 @@ namespace XCEngine
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Transform_Rotate(ulong gameObjectUUID, ref Vector3 eulers, int relativeTo);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Transform_RotateAxisAngle(ulong gameObjectUUID, ref Vector3 axis, float angle, int relativeTo);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Transform_LookAt(ulong gameObjectUUID, ref Vector3 target);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Transform_LookAtWithUp(ulong gameObjectUUID, ref Vector3 target, ref Vector3 up);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Transform_TransformPoint(ulong gameObjectUUID, ref Vector3 point, out Vector3 transformedPoint);

View File

@@ -231,11 +231,26 @@ namespace XCEngine
InternalCalls.Transform_Rotate(GameObjectUUID, ref eulers, (int)relativeTo);
}
public void Rotate(Vector3 axis, float angle)
{
Rotate(axis, angle, Space.Self);
}
public void Rotate(Vector3 axis, float angle, Space relativeTo)
{
InternalCalls.Transform_RotateAxisAngle(GameObjectUUID, ref axis, angle, (int)relativeTo);
}
public void LookAt(Vector3 worldPosition)
{
InternalCalls.Transform_LookAt(GameObjectUUID, ref worldPosition);
}
public void LookAt(Vector3 worldPosition, Vector3 worldUp)
{
InternalCalls.Transform_LookAtWithUp(GameObjectUUID, ref worldPosition, ref worldUp);
}
public Vector3 TransformPoint(Vector3 point)
{
InternalCalls.Transform_TransformPoint(GameObjectUUID, ref point, out Vector3 transformedPoint);