Transform 基础知识

本文详细介绍了Unity中Transform组件的功能及使用方法,包括如何通过代码控制物体的位置、旋转和缩放等基本操作,以及如何利用层级关系实现复杂的空间变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transform 变换,是场景中最常打交道的类,用于控制物体的位移,旋转,缩放等功能


Transform
Class, inherits from Component, IEnumerable

Position, rotation and scale of an object.
控制物体的位置,旋转和缩放。

Every object in a scene has a Transform. It's used to store and manipulate the position, rotation and scale of the object. Every Transform can have a parent, which allows you to apply position, rotation and scale hierachically. This is the hierarchy seen in the Hierarchy pane. They also support enumerators so you can loop through children using:
// Movesall transform children 10 units upwards!
for (var child: Transform in transform) {
child.position += Vector3.up *10.0;
}

每一个场景中的物体都有Transform这个类,他是用来储存和处理物体的位移,旋转和缩放的。每一个Transform都可以有一个父物体,这可以让你得到下游节点的位移旋转和缩放。这个层次结构关系可以从Hierarchy面板中看到。他还支持enumerators,以使用循环来遍寻所有的子节点。

Variables

position: Vector3  物体在世界坐标中的位置。 transform.position=Vector3(10,10,10)//把物体放到(x=10,y=10,z=10)的位置

localPosition: Vector3  相对位置,或自身位置,物体相对于父物体的位置。

eulerAngles: Vector3  轴向旋转角度,相对于世界坐标。单位为度(°)

localPosition: Vector3 相对轴向旋转角度,或自身的旋转角度,物体相对于父物体的旋转。一般使用和处理物体的旋转角度时都会使用到这个数值。

right: Vector3  物体自身的红色轴向(X轴)在世界坐标中所指向的位置。注意在maya中x轴指向物体的左边,而unity中的x轴则指向物体的右边。rigidbody.velotity=transform.right*moveSpeed;//向物体的右侧以moveSpeed的速度移动

up: Vector3  物体自身的绿色轴向(Y轴)在世界坐标中所指向的位置。

forward: Vector3  物体自身的蓝色轴向(Z轴)在世界坐标中所指向的位置。

rotation: Quaternion  以四元数来表达的物体自身的旋转。四元数可以快速的处理物体的旋转方向的计算,搭配Quaternion可以用来计算各种需要的旋转方案。具体应用方法参见Quaternion篇

localRotation: Quaternion 相对于父物体的用四元数来表达的旋转。

localScale: Vector3 物体相对于父物体的缩放

parent: Transform 物体的父物体。 如果没有则返回null。 如果改变父物体的位置,旋转和缩放,会同时影响并改变子物体的位置,旋转和缩放,但是保持相对位置,相对旋转和相对缩放。

worldToLocalMatrix: Matrix4x4 一个表达从世界坐标到相对坐标位置的四维矩阵,Read Only。 如果你对矩阵不是很了解,请使用Transform.InverseTransformPoint。

LocalToWorldMatrix: Matrix4x4 一个表达从相对坐标到世界坐标位置的四维矩阵,Read Only。 如果你对矩阵不是很了解,请使用Transform.TransformPoint。

root: Transform  返回物体的最高层的父物体。如果物体本身就是最高层,则返回物体本身。

childCount: Int   返回物体的子物体数量。

lossyScale:Vector3 返回物体相对于世界坐标的缩放值。 Read Only。没什么用的一个属性,当子物体被旋转后也不是特别精确,也不推荐大家用。如果想要计算物体的世界坐标缩放,最好自己写计算公式。


Functions
1)Translate, 用来移动物体的函数,非常常用的一个函数。

function Translate (translation : Vector3, relativeTo : Space Space.Self) : void

把物体向translation方向移动,距离为translation.magnitude。 relativeTo表示这个移动的参考坐标系。

function Translate (x : float, y : float, z : float, relativeTo : Space Space.Self) : void

同上

function Translate (translation : Vector3, relativeTo : Transform) : void

如果relativeTo 不是null, 则以目标物体relativeTo的自身轴向作为参考坐标系。

function Translate (x : float, y : float, z : float, relativeTo : Transform) : void

同上

脚本:
var speed=30;

//将物体以30米每秒的速度向前移动。
trasform.Translate(Vector3.forward*speed*Time.deltaTime);


2)Rotate,用来旋转物体的函数,非常常用,在知道需要旋转的角度的情况下。如果要让物体旋转到指定位置,需要搭配Quaternion来使用。

function Rotate (eulerAngles : Vector3, relativeTo : Space Space.Self) : void

旋转eulerAngles度(3个轴向分别旋转),以relativeTo为参考坐标系

function Rotate (xAngle : float, yAngle : float, zAngle : float, relativeTo : Space Space.Self) : void

同上

function Rotate (axis : Vector3, angle : float, relativeTo : Space Space.Self) : void

以axis为轴旋转angle度,以relativeTo为参考坐标系

3)RotateAround 让物体以某一点为轴心成圆周运动。

function RotateAround (point : Vector3, axis : Vector3, angle : float) : void

让物体以point为中心,绕axis为轴向旋转angle度。 保持原来与point的距离。

4)LookAt 让物体的z轴看向目标物体

function LookAt (target : Transform, worldUp : Vector3 Vector3.up) : void

让物体的z轴看向target的位置,并以worldUp为y轴指向方向。

function LookAt (worldPosition : Vector3, worldUp : Vector3 Vector3.up) : void

让物体看向worldPosition

5)TransformDirection

function TransformDirection (direction : Vector3) : Vector3

返回以物体自身为坐标轴的向量direction在世界坐标中的朝向向量。

function TransformDirection (x : float, y : float, z : float) : Vector3

同上

6)InverseTransformDirection

function InverseTransformDirection (direction : Vector3) : Vector3

function InverseTransformDirection (x : float, y : float, z : float) : Vector3

与TransformDirection相反,从世界坐标转换到自身相对坐标。

7)TransformPoint

function TransformPoint (position : Vector3) : Vector3

function TransformPoint (x : float, y : float, z : float) : Vector3

把一个点从自身相对坐标转换到世界坐标

8)InverseTransformPoint

function InverseTransformPoint (position : Vector3) : Vector3

function InverseTransformPoint (x : float, y : float, z : float) : Vector3

把一个点从时间坐标转换到自身坐标的位置。

9)DetachChildren

function DetachChildren () : void

把自身所有的子物体的父物体都设成世界,也就是跟自己的所有子物体接触父子关系。

10)Find

function Find (name : string) : Transform

找到一个名字是name的物体并返回
如果没有找到则返回null。 如果字符串被/隔离,函数则会像文件路径一样逐级下查。

// Themagical rotating finger
function Update() {
aFinger = transform.Find("LeftShoulder/Arm/Hand/Finger");
aFinger.Rotate(Time.deltaTime*20,0, 0);
}

11)IsChildOf

function IsChildOf (parent : Transform) : bool

如果物体是parent的父子层级关系下的一员,返回true;


原文:http://blog.sina.com.cn/s/blog_4a2183a60100niet.html

### PyTorch基础教程入门指南 PyTorch 是一种功能强大的开源机器学习框架,广泛应用于深度学习领域。以下是关于 PyTorch 的基础知识及其核心概念。 #### 1. PyTorch 基本语法 PyTorch 提供了许多类似于 NumPy 的操作方法,但它支持 GPU 加速和自动求导机制。以下是一些基本操作: - **创建张量 (Tensor)** 张量是 PyTorch 中最基本的数据结构,可以看作多维数组。 ```python import torch # 创建一个全为1的2x2张量 x = torch.ones(2, 2) print(x) # 输出 [[1., 1.], [1., 1.]] ``` - **张量与 NumPy 数组之间的转换** PyTorch 支持无缝地将张量与 NumPy 数组互相转换[^3]。 ```python a = torch.ones(5) b = a.numpy() # 转换为NumPy数组 c = torch.from_numpy(b) # 将NumPy数组转回张量 ``` #### 2. 自动求导机制 (Autograd) PyTorch 的 `autograd` 模块能够实现动态计算图并自动生成梯度。这是构建和训练神经网络的关键特性之一[^1]。 - 设置 `requires_grad=True` 来跟踪张量的操作以便后续计算梯度。 ```python x = torch.ones(2, 2, requires_grad=True) y = x + 2 z = y * y * 3 out = z.mean() # 反向传播 out.backward() # 查看梯度 print(x.grad) # 输出梯度矩阵 ``` #### 3. 构建神经网络 在 PyTorch 中,可以通过继承 `nn.Module` 类来定义自己的神经网络架构。 - 定义简单的前馈神经网络: ```python import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 128) # 输入层到隐藏层 self.fc2 = nn.Linear(128, 10) # 隐藏层到输出层 def forward(self, x): x = F.relu(self.fc1(x)) x = self.fc2(x) return x net = Net() print(net) ``` #### 4. 数据处理 PyTorch 提供了丰富的工具用于加载和预处理数据集。`torchvision.datasets` 模块包含了多个常用的真实世界数据集,例如 CIFAR、FashionMNIST 等[^4]。 - 下载 FashionMNIST 数据集: ```python from torchvision import datasets, transforms transform = transforms.ToTensor() training_data = datasets.FashionMNIST( root="data", train=True, download=True, transform=transform ) test_data = datasets.FashionMNIST( root="data", train=False, download=True, transform=transform ) ``` #### 5. 训练过程概述 完整的训练流程通常包括以下几个部分: - 初始化模型参数; - 定义损失函数(如交叉熵损失); - 使用优化器更新权重(如 SGD 或 Adam); - 进行多次迭代直到收敛。 ```python import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.01) for epoch in range(10): # 多次遍历整个数据集... running_loss = 0.0 for i, data in enumerate(training_data, 0): inputs, labels = data optimizer.zero_grad() # 清零梯度缓存 outputs = net(inputs.view(-1, 784)) # 前向传递 loss = criterion(outputs, labels) # 计算损失 loss.backward() # 后向传递 optimizer.step() # 更新参数 running_loss += loss.item() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值