Unity(2022.3.38LTS) - 变换组件和约束

发布于:2024-08-16 ⋅ 阅读:(135) ⋅ 点赞:(0)

目录

一. 变换组件

二. 约束



一. 变换组件

在 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)用于限制游戏对象的变换属性,如位置、旋转和缩放。

常见的约束类型

  1. 位置约束(Position Constraint)

    • 可以限制对象在某个轴或多个轴上的位置移动。
    • 例如,只允许对象在 X 轴上移动,而固定其在 Y 和 Z 轴上的位置。
  2. 旋转约束(Rotation Constraint)

    • 控制对象的旋转自由度。
    • 比如,限制对象只能绕某个特定轴旋转。
  3. 缩放约束(Scale Constraint)

    • 规定对象在各个轴上的缩放范围。

应用场景

  1. 模拟机械结构:确保关节的运动在合理的范围内。
  2. 角色动画:限制某些部位的移动和旋转,以保持真实的动作。

例如,在一个机械臂的模拟中,可以使用旋转约束来限制关节的旋转角度,使其运动符合实际的机械结构。

在使用约束时,需要注意以下几点:

  1. 约束可能会与物理模拟或其他脚本的操作产生交互影响,需要进行充分的测试。
  2. 不同的约束类型和组合可以实现复杂的限制效果,但也可能增加调试的难度。

常见的与约束相关的组件包括:

  1. Rigidbody 组件中的约束

    • Constraints 选项:可以设置对位置(Freeze Position)和旋转(Freeze Rotation)在不同轴上的冻结,从而实现约束效果。例如,勾选 Freeze Position X 可禁止刚体在 X 轴上的位置移动。
  2. ConfigurableJoint 组件

    • 提供了非常丰富和灵活的约束设置。
    • 可以对线性运动(Linear Limits)和角度运动(Angular Limits)进行约束。
    • 还能设置弹簧、阻尼等参数来控制约束的弹性和阻力特性。
  3. Parent Constraint 组件

    • 使对象的位置、旋转或缩放跟随一个或多个目标对象的变换。
    • 可以设置权重来控制对每个目标的跟随程度。
  4. LookAt Constraint 组件

    • 强制对象始终看向指定的目标。

这些约束组件在不同的场景中有不同的用途:

比如,在一个车辆模拟中,使用 Rigidbody 的约束来固定车轮的旋转轴;在一个角色的肢体关节模拟中,使用 ConfigurableJoint 来限制关节的活动范围。

实例,

新建一个立方体,添加LookAt Constraint 组件,赋值源

运行效果