diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Export/UnityEngineTransform.txt |
Diffstat (limited to 'Runtime/Export/UnityEngineTransform.txt')
-rw-r--r-- | Runtime/Export/UnityEngineTransform.txt | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/Runtime/Export/UnityEngineTransform.txt b/Runtime/Export/UnityEngineTransform.txt new file mode 100644 index 0000000..f9eb906 --- /dev/null +++ b/Runtime/Export/UnityEngineTransform.txt @@ -0,0 +1,302 @@ +C++RAW + + +#include "UnityPrefix.h" +#include "Configuration/UnityConfigure.h" +#include "Runtime/Graphics/Transform.h" +#include "Runtime/Scripting/ScriptingUtility.h" +#include "Runtime/Mono/MonoBehaviour.h" +#include "Runtime/Scripting/Scripting.h" + +using namespace Unity; +using namespace std; + +CSRAW +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Collections; +using UnityEngineInternal; + +namespace UnityEngine +{ + +// Position, rotation and scale of an object. +CSRAW +CLASS Transform : Component, IEnumerable + + CSRAW private Transform () { } + + // The position of the transform in world space. + CSRAW + AUTO_PROP Vector3 position GetPosition SetPosition + + // Position of the transform relative to the parent transform. + CSRAW + AUTO_PROP Vector3 localPosition GetLocalPosition SetLocalPosition + + // The rotation as Euler angles in degrees. + CSRAW public Vector3 eulerAngles { get { return rotation.eulerAngles; } set { rotation = Quaternion.Euler(value); } } + + // The rotation as Euler angles in degrees relative to the parent transform's rotation. + AUTO_PROP Vector3 localEulerAngles GetLocalEulerAngles SetLocalEulerAngles + + // The red axis of the transform in world space. + CSRAW public Vector3 right { get { return rotation * Vector3.right; } set { rotation = Quaternion.FromToRotation(Vector3.right, value); } } + + // The green axis of the transform in world space. + CSRAW public Vector3 up { get { return rotation * Vector3.up; } set { rotation = Quaternion.FromToRotation(Vector3.up, value); } } + + // The blue axis of the transform in world space. + CSRAW public Vector3 forward { get { return rotation * Vector3.forward; } set { rotation = Quaternion.LookRotation(value); } } + + // The rotation of the transform in world space stored as a [[Quaternion]]. + AUTO_PROP Quaternion rotation GetRotation SetRotationSafe + + // The rotation of the transform relative to the parent transform's rotation. + AUTO_PROP Quaternion localRotation GetLocalRotation SetLocalRotationSafe + + // The scale of the transform relative to the parent. + AUTO_PROP Vector3 localScale GetLocalScale SetLocalScale + + // The parent of the transform. + CSRAW + AUTO_PTR_PROP Transform parent GetParent SetParent + + // Matrix that transforms a point from world space into local space (RO). + AUTO_PROP Matrix4x4 worldToLocalMatrix GetWorldToLocalMatrix + // Matrix that transforms a point from local space into world space (RO). + AUTO_PROP Matrix4x4 localToWorldMatrix GetLocalToWorldMatrix + + // Moves the transform in the direction and distance of /translation/. + CSRAW public void Translate (Vector3 translation, Space relativeTo = Space.Self) + { + if (relativeTo == Space.World) + position += translation; + else + position += TransformDirection (translation); + } + + // Moves the transform by /x/ along the x axis, /y/ along the y axis, and /z/ along the z axis. + CSRAW public void Translate (float x, float y, float z, Space relativeTo = Space.Self) + { + Translate (new Vector3 (x, y, z), relativeTo); + } + + // Moves the transform in the direction and distance of /translation/. + CSRAW public void Translate (Vector3 translation, Transform relativeTo) + { + if (relativeTo) + position += relativeTo.TransformDirection (translation); + else + position += translation; + } + + // Moves the transform by /x/ along the x axis, /y/ along the y axis, and /z/ along the z axis. + CSRAW public void Translate (float x, float y, float z, Transform relativeTo) + { + Translate (new Vector3 (x, y, z), relativeTo); + } + + // Applies a rotation of /eulerAngles.z/ degrees around the z axis, /eulerAngles.x/ degrees around the x axis, and /eulerAngles.y/ degrees around the y axis (in that order). + CSRAW public void Rotate (Vector3 eulerAngles, Space relativeTo = Space.Self) + { + Quaternion eulerRot = Quaternion.Euler (eulerAngles.x, eulerAngles.y, eulerAngles.z); + if (relativeTo == Space.Self) + localRotation = localRotation * eulerRot; + else + { + rotation = rotation * (Quaternion.Inverse (rotation) * eulerRot * rotation); + } + } + + // Applies a rotation of /zAngle/ degrees around the z axis, /xAngle/ degrees around the x axis, and /yAngle/ degrees around the y axis (in that order). + CSRAW public void Rotate (float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self) + { + Rotate (new Vector3 (xAngle, yAngle, zAngle), relativeTo); + } + + CUSTOM internal void RotateAroundInternal (Vector3 axis, float angle) { self->RotateAroundSafe (axis, angle); } + + // Rotates the transform around /axis/ by /angle/ degrees. + CSRAW public void Rotate (Vector3 axis, float angle, Space relativeTo = Space.Self) + { + if (relativeTo == Space.Self) + RotateAroundInternal (transform.TransformDirection (axis), angle * Mathf.Deg2Rad); + else + RotateAroundInternal (axis, angle * Mathf.Deg2Rad); + } + + // Rotates the transform about /axis/ passing through /point/ in world coordinates by /angle/ degrees. + CSRAW public void RotateAround (Vector3 point, Vector3 axis, float angle) + { + Vector3 worldPos = position; + Quaternion q = Quaternion.AngleAxis (angle , axis); + Vector3 dif = worldPos - point; + dif = q * dif; + worldPos = point + dif; + position = worldPos; + RotateAroundInternal (axis, angle * Mathf.Deg2Rad); + } + + // Rotates the transform so the forward vector points at /target/'s current position. + CSRAW public void LookAt (Transform target, Vector3 worldUp = Vector3.up) { if (target) LookAt (target.position, worldUp); } + + // Rotates the transform so the forward vector points at /worldPosition/. + CUSTOM void LookAt (Vector3 worldPosition, Vector3 worldUp = Vector3.up) + { + Vector3f forward = worldPosition - self->GetPosition (); + Quaternionf q = Quaternionf::identity (); + if (LookRotationToQuaternion (forward, worldUp, &q)) + self->SetRotationSafe (q); + else + { + float mag = Magnitude (forward); + if (mag > Vector3f::epsilon) + { + Matrix3x3f m; + m.SetFromToRotation (Vector3f::zAxis, forward / mag); + MatrixToQuaternion (m, q); + self->SetRotationSafe (q); + } + } + } + + // Transforms /direction/ from local space to world space. + AUTO Vector3 TransformDirection (Vector3 direction); + + // Transforms direction /x/, /y/, /z/ from local space to world space. + CSRAW public Vector3 TransformDirection (float x, float y, float z) { return TransformDirection (new Vector3 (x, y, z)); } + + + // Transforms a /direction/ from world space to local space. The opposite of Transform.TransformDirection. + AUTO Vector3 InverseTransformDirection (Vector3 direction); + + // Transforms the direction /x/, /y/, /z/ from world space to local space. The opposite of Transform.TransformDirection. + CSRAW public Vector3 InverseTransformDirection (float x, float y, float z) { return InverseTransformDirection (new Vector3 (x, y, z)); } + + // Transforms /position/ from local space to world space. + AUTO Vector3 TransformPoint (Vector3 position); + + // Transforms the position /x/, /y/, /z/ from local space to world space. + CSRAW public Vector3 TransformPoint (float x, float y, float z) { return TransformPoint (new Vector3 (x, y, z)); } + + + // Transforms /position/ from world space to local space. The opposite of Transform.TransformPoint. + AUTO Vector3 InverseTransformPoint (Vector3 position); + + + // Transforms the position /x/, /y/, /z/ from world space to local space. The opposite of Transform.TransformPoint. + CSRAW public Vector3 InverseTransformPoint (float x, float y, float z) { return InverseTransformPoint (new Vector3 (x, y, z)); } + + + // Returns the topmost transform in the hierarchy. + CUSTOM_PROP Transform root { return Scripting::ScriptingWrapperFor(&self->GetRoot()); } + + // The number of children the Transform has. + CUSTOM_PROP int childCount { return self->GetChildrenCount (); } + + // Unparents all children. + CUSTOM void DetachChildren () + { + Transform& transform = *self; + while (transform.begin () != transform.end ()) + (**transform.begin ()).SetParent (NULL); + } + + // Finds a child by /name/ and returns it. + CUSTOM Transform Find (string name) + { + return Scripting::ScriptingWrapperFor (FindRelativeTransformWithPath (*self, name.AsUTF8().c_str ())); + } + + //*undocumented + CONDITIONAL UNITY_EDITOR + CUSTOM internal void SendTransformChangedScale () + { + self->SendTransformChanged ( Transform::kScaleChanged ); + } + + + // The global scale of the object (RO). + AUTO_PROP Vector3 lossyScale GetWorldScaleLossy + + // Is this transform a child of /parent/? + CUSTOM bool IsChildOf (Transform parent) + { + return IsChildOrSameTransform(*self, *parent); + } + + // Has the transform changed since the last time the flag was set to 'false'? + CUSTOM_PROP bool hasChanged { return self->GetChangedFlag(); } { self->SetChangedFlag(value); } + + //*undocumented* + CSRAW public Transform FindChild (string name) { return Find(name); } + + //*undocumented* Documented separately + CSRAW public IEnumerator GetEnumerator () + { + return new Transform.Enumerator (this); + } + + CLASS private Enumerator : IEnumerator + CSRAW + Transform outer; + int currentIndex = -1; + + internal Enumerator (Transform outer) { this.outer = outer; } + //*undocumented* + public object Current + { + get { return outer.GetChild (currentIndex); } + } + + //*undocumented* + public bool MoveNext () + { + int childCount = outer.childCount; + return ++currentIndex < childCount; + } + + //*undocumented* + public void Reset () { currentIndex = -1; } + END + + // *undocumented* DEPRECATED + CSRAW + OBSOLETE warning use Transform.Rotate instead. + CUSTOM void RotateAround (Vector3 axis, float angle) { self->RotateAroundSafe (axis, angle); } + + // *undocumented* DEPRECATED + OBSOLETE warning use Transform.Rotate instead. + CUSTOM void RotateAroundLocal (Vector3 axis, float angle) { self->RotateAroundLocalSafe (axis, angle); } + + // Get a transform child by index + CUSTOM Transform GetChild (int index) + { + Transform& transform = *self; + if (index >= 0 && index < transform.GetChildrenCount ()) + return Scripting::ScriptingWrapperFor (&transform.GetChild (index)); + else + { + Scripting::RaiseMonoException ("Transform child out of bounds"); + return SCRIPTING_NULL; + } + } + + //*undocumented* DEPRECATED + OBSOLETE warning use Transform.childCount instead. + CUSTOM int GetChildCount () { return self->GetChildrenCount (); } + + CONDITIONAL UNITY_EDITOR + CUSTOM internal bool IsNonUniformScaleTransform () + { + Transform& transform = *self; + Matrix4x4f temp; + TransformType scaleType = transform.CalculateTransformMatrix (temp); + return IsNonUniformScaleTransform (scaleType); + } + +END + +CSRAW } |