Unity中Transform类的基础学习一

在Unity中,Transform是所有游戏对象(GameObject)都具备的组件之一,它包含了游戏对象的位置、旋转和缩放等信息。下面是Transform的一些基础认知:

位置(Position):指游戏对象相对于世界坐标系的位置。

旋转(Rotation):指游戏对象相对于世界坐标系的旋转角度。在Unity中,旋转采用四元数(Quaternion)表示。

缩放(Scale):指游戏对象的大小比例。缩放值为1表示原大小,小于1表示缩小,大于1表示放大。

通过Transform组件,可以对游戏对象进行移动、旋转和缩放等操作,也可以获取它们在世界坐标系中的位置、旋转和缩放信息。需要注意的是,Transform的操作是相对的,即移动、旋转和缩放都是在当前对象坐标系下进行的,而非在世界坐标系下。 

Transform类的成员变量:

position:在世界空间坐标transform的位置。
localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。
eulerAngles:世界坐标系中的旋转(欧拉角)。
localEulerAngles:相对于父级的变换旋转角度。
right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)
up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)
forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)
rotation:世界坐标系中的旋转(四元数)。
localRotation:相对于父级的变换旋转角度。
localScale:相对于父级的缩放比例。
parent:父对象Transform组件。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
root:对象层级关系中的根对象的Transform组件。
childCount:子对象数量。
lossyScale:全局缩放比例(只读)。

Transform类的常用的公共函数(方法):

1.Translate函数

Translate 方法用于根据 translation 的方向和距离移动变换。它的语法如下:

public void Translate(Vector3 translation)

public void Translate(Vector3 translation,Space relative To=Space.Self)

沿着translation方向移动translation向量长度的距离,如果relativeTo留空或者设置为Space.Self,移动被应用相对于自身坐标系;

具体而言,Translate方法将在对象本地坐标系中按 X、Y 和 Z 轴分别移动指定的距离。向量 translation 指定了沿着这三个轴的位移矢量,即 translation.x 为 X 轴上的位移量,translation.y 为 Y 轴上的位移量,translation.z 为 Z 轴上的位移量。

这是一个简单的示例,演示如何使用 Translate方法:

这段代码其实就相当于物体在坐标系内沿z轴方向移动一个单位,相当于以下代码:

在常规的项目,经常会用到Vector3.forward,其中Vector3.forward是一个常量,表示向量(0,0,1),即指向z轴正方向的向量,也可以在Unity中使用其实现一些常见的方向操作,例如上述代码就可以表示为:

这会使对象在z 轴上以 speed 的速度移动。

此外,Vector3.right 表示 (1, 0, 0) 向量,向右;Vector3.up 表示 (0, 1, 0) 向上;Vector3.back 表示 (-1, 0, 0) 向左;Vector3.down 表示 (0, -1, 0) 向下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基础的计算机图形学代码编程题及其答案,题目要求使用Unity3D实现一个简单的画线程序: 1. 创建一个新场景,添加一个空物体作为画布。 2. 编写脚本,实现以下功能: (1)定义一个公共变量lineColor,用于设置画线的颜色; (2)定义一个公共变量lineWidth,用于设置画线的粗细; (3)定义一个List<Vector3>型的变量points,用于存储绘制线条所需要的点; (4)在Update函数,如果鼠标左键按下,则将当前鼠标位置添加到points列表; (5)在OnGUI函数,创建一个GUI.Button,用于清除所有绘制的线条; (6)在OnRenderObject函数,根据points列表的点,绘制线条。 以下是代码实现: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrawLine : MonoBehaviour { public Color lineColor = Color.black; // 画线颜色 public float lineWidth = 0.1f; // 画线粗细 private List<Vector3> points = new List<Vector3>(); // 存储绘制线条所需点 void Update() { if (Input.GetMouseButton(0)) { Vector3 mousePos = Input.mousePosition; mousePos.z = Camera.main.nearClipPlane; Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos); points.Add(worldPos); } } void OnGUI() { if (GUI.Button(new Rect(10, 10, 100, 50), "Clear")) { points.Clear(); } } void OnRenderObject() { GL.PushMatrix(); GL.MultMatrix(transform.localToWorldMatrix); GL.Begin(GL.LINE_STRIP); GL.Color(lineColor); GL.LineWidth(lineWidth); for (int i = 0; i < points.Count; i++) { GL.Vertex(points[i]); } GL.End(); GL.PopMatrix(); } } ``` 请注意,此代码仅实现了基本的画线功能,并且没有考虑到性能和优化问题。如果需要更高效的绘图方案,请参考Unity的官方文档或其他资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值