Unity Transform 缩放

如果父物体缩放了,那么成为它子物体的物体可能会发生变形

### UnityTransform 组件的旋转操作 在 Unity 的场景中,`Transform` 是每个游戏对象的核心组件之一,它负责存储和控制对象的位置、旋转以及缩放。对于旋转操作而言,可以通过 `rotation` 和 `localRotation` 属性来实现不同的效果。 #### 1. 使用 Quaternion 设置绝对旋转 通过设置 `transform.rotation` 可以定义一个基于世界坐标的绝对旋转角度。以下是使用四元数 (Quaternion) 来指定特定方向的一个例子: ```csharp using UnityEngine; public class RotateObject : MonoBehaviour { void Start() { // 将物体旋转至固定的世界坐标系下的欧拉角(0, 90, 0) transform.rotation = Quaternion.Euler(new Vector3(0, 90, 0)); // [^1] } } ``` 这里的 `Quaternion.Euler(Vector3)` 方法接受三个参数分别对应绕 X 轴、Y 轴和 Z 轴的角度偏移量。 #### 2. 基于当前状态增加旋转 如果希望让物体围绕某个轴逐渐转动,则可以利用 `Rotate()` 函数或者修改 `eulerAngles` 属性完成增量式的调整。 ```csharp void Update() { float anglePerSecond = 45f; // 每秒转过多少度 // 让物体每帧都沿 Y 轴正向自增一定角度 transform.Rotate(Vector3.up * Time.deltaTime * anglePerSecond); // [^2] /* 或者直接改变 eulerAngles */ // transform.eulerAngles += new Vector3(0, Time.deltaTime * anglePerSecond, 0); } ``` 上述代码片段展示了如何使物体持续不断地沿着垂直屏幕的方向缓慢旋转起来的效果。 #### 3. 对象局部空间内的相对旋转 当存在父子关系时,“Local Rotation”变得尤为重要。它可以让你单独处理子节点相对于父节点的姿态而不受全局影响。 假设我们有这样一个结构:Parent -> Child,在不考虑其他因素的情况下执行如下命令将会只影响 child 自身姿态而不会波及 parent。 ```csharp child.transform.localRotation *= Quaternion.AngleAxis(-10F, Vector3.right); // // 这里表示让孩子逆时针(从右侧看过去)稍微倾斜一点。 ``` 注意这里乘法运算符的作用顺序是从右往左依次作用各个因子上的变换矩阵;另外由于 quaternion 不像 vector 那样直观易懂所以建议多做实验熟悉它们的行为模式。 #### 关键概念总结 - **World vs Local**: 如果该 GameObject 存在一个 Parent 则它的 Position/Rotation/Scale 默认指的是相对于这个 Parent 的值;如果没有 Parents 它们就代表的是 World Space 下的数据. - **Synchronization Across Networked Clients**: In multiplayer games built with Unity's networking system, changes made locally via scripts like those above will automatically propagate across all connected clients thanks to the presence of a 'NetworkTransform' component attached alongside your regular ones.[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值