对 GameObject 应用变换的坐标空间。
您可以从此枚举中传递一个值作为参数传递给方法,例如Transform.Rotate 和 Transform.Translate,以指定在哪个坐标空间中应用变换。
由 Space.World 表示的世界坐标空间指的是相对于场景 x、y 和 z 轴原点 (0,0,0) 的 GameObject 位置。该Transform.position 属性给出 GameObject 在世界空间中的当前位置。
使用 Space.World 相对于其 Transform.position 和场景轴变换 GameObject,忽略 GameObject 自己的方向。例如,transform.Translate(Vector3.forward, Space.World)
在场景的 z 轴上将对象 Transform.position 添加一个单位。
由 Space.Self 表示的局部坐标空间指的是相对于其父级 GameObject 的对象位置,包括父级 GameObject 的任何旋转。该 Transform.localPosition 属性给出 GameObject 在局部空间中的当前位置,该位置相对于父级 GameObject(如果存在)。如果 GameObject 没有父级,则其 Transform.localPosition 与其 Transform.position 相同。
例如,一个没有父级且 Transform.position 为 (1,3,0) 的 GameObject 也会有 Transform.localPosition 为 (1,3,0)。但如果此第一个对象的子级 GameObject 的 Transform.position 为 (1,3,0),则子级对象的 Transform.localPosition 为 (0,0,0),因为它与父级对象在同一位置。
使用 Space.Self 相对于其 Transform.localPosition 及其自身的局部轴变换 GameObject,考虑其方向。例如,Transform.Translate(Vector3.forward, Space.Self)
在对象的 z 轴上将对象的 Transform.localPosition 添加一个单位,这可能与场景的 z 轴不同,具体取决于对象的方向。在场景视图中选择一个对象以查看其局部位置和轴。
有关更多信息,请参阅手册中的 变换、Unity 中的旋转和方向 和 定位游戏对象。
// Attach this script to a GameObject. // This example demonstrates the difference between Space.World and Space.Self in rotation. // The inWorldSpace field is automatically exposed as a checkbox in the Inspector window labelled In World Space. Enable or disable the checkbox in the Inspector to start in world or self space, respectively. // Press play to see the GameObject rotating appropriately. Press space or toggle the In World Space checkbox to switch between world and self space.
using UnityEngine;
public class Example : MonoBehaviour { float rotationSpeed; public bool inWorldSpace;
void Start() { // Set the speed of the rotation rotationSpeed = 20.0f; // Start off in World.Space inWorldSpace = true; // Rotate the GameObject a little at the start to show the difference between world and local spaces transform.Rotate(60, 0, 60); }
void Update() { // Rotate the GameObject in world space if inWorldSpace is true if (inWorldSpace) transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.World); // Otherwise, rotate the GameObject in local space else transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.Self);
// Press the Space button to switch between world and local space states if (Input.GetKeyDown(KeyCode.Space)) { // Make the current state switch to the other state inWorldSpace = !inWorldSpace; // Output the current state to the console Debug.Log("World space : " + inWorldSpace.ToString()); } } }