目录
一. 变换组件
二. 约束
一. 变换组件
在 Unity 中,变换组件(Transform Component)是每个游戏对象都必备的组件,用于控制对象在场景中的位置、旋转和缩放。
位置(Position):
- 表示对象在三维空间中的坐标。可以通过
transform.position
来获取或设置。 - 以
Vector3
类型存储,例如(x, y, z)
。
旋转(Rotation):
- 有多种表示方式,常见的是欧拉角(Euler Angles)和四元数(Quaternion)。
transform.rotation
通常以四元数形式获取或设置旋转。- 欧拉角更直观,但可能存在万向锁问题。可以通过
transform.eulerAngles
来获取或设置为欧拉角。
缩放(Scale):
- 决定对象在各个轴上的缩放比例。
- 通过
transform.localScale
来获取或设置。
父对象与子对象的变换关系:
- 子对象的变换是相对于父对象的。
- 例如,如果父对象移动,子对象会跟随移动,但相对位置不变。
变换组件的应用:
- 控制对象的移动:通过修改位置实现对象在场景中的平移。
- 实现对象的旋转动画:逐渐改变旋转值。
- 调整对象的大小:修改缩放值。
举例来说:
在一个 3D 平台游戏中,玩家角色的移动就是通过不断更新其变换组件的位置来实现的。
在一个机械组装的模拟场景中,零件的旋转和缩放都是通过变换组件来控制的。
结合上篇的输入,就可以做出来控制主角移动的功能了.
using UnityEngine;
public class ObjectMovementTranslate : MonoBehaviour
{
public float speed = 5f;
void Update()
{
// 按 W 键向前移动
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
// 按 S 键向后移动
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * speed * Time.deltaTime);
}
// 按 A 键向左移动
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * speed * Time.deltaTime);
}
// 按 D 键向右移动
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
}
二. 约束
在 Unity 中,约束(Constraints)用于限制游戏对象的变换属性,如位置、旋转和缩放。
常见的约束类型:
位置约束(Position Constraint):
- 可以限制对象在某个轴或多个轴上的位置移动。
- 例如,只允许对象在 X 轴上移动,而固定其在 Y 和 Z 轴上的位置。
旋转约束(Rotation Constraint):
- 控制对象的旋转自由度。
- 比如,限制对象只能绕某个特定轴旋转。
缩放约束(Scale Constraint):
- 规定对象在各个轴上的缩放范围。
应用场景:
- 模拟机械结构:确保关节的运动在合理的范围内。
- 角色动画:限制某些部位的移动和旋转,以保持真实的动作。
例如,在一个机械臂的模拟中,可以使用旋转约束来限制关节的旋转角度,使其运动符合实际的机械结构。
在使用约束时,需要注意以下几点:
- 约束可能会与物理模拟或其他脚本的操作产生交互影响,需要进行充分的测试。
- 不同的约束类型和组合可以实现复杂的限制效果,但也可能增加调试的难度。
常见的与约束相关的组件包括:
-
Rigidbody 组件中的约束:
Constraints
选项:可以设置对位置(Freeze Position
)和旋转(Freeze Rotation
)在不同轴上的冻结,从而实现约束效果。例如,勾选Freeze Position X
可禁止刚体在 X 轴上的位置移动。
-
ConfigurableJoint 组件:
- 提供了非常丰富和灵活的约束设置。
- 可以对线性运动(
Linear Limits
)和角度运动(Angular Limits
)进行约束。 - 还能设置弹簧、阻尼等参数来控制约束的弹性和阻力特性。
-
Parent Constraint 组件:
- 使对象的位置、旋转或缩放跟随一个或多个目标对象的变换。
- 可以设置权重来控制对每个目标的跟随程度。
-
LookAt Constraint 组件:
- 强制对象始终看向指定的目标。
这些约束组件在不同的场景中有不同的用途:
比如,在一个车辆模拟中,使用 Rigidbody
的约束来固定车轮的旋转轴;在一个角色的肢体关节模拟中,使用 ConfigurableJoint
来限制关节的活动范围。
实例,
新建一个立方体,添加LookAt Constraint 组件,赋值源
运行效果