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

目录

一. 变换组件

二. 约束



一. 变换组件

在 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 组件,赋值源

运行效果

Unity 2022.3引入了一些新的导航功能,以帮助开发者更方便地为游戏添加导航系统。新版本中的导航系统改进了性能和功能,使其更加强大和灵活。 首先,Unity 2022.3引入了实时路径搜索功能。该功能可以根据场景中的物体位置和碰撞体等信息,在实时场景中进行路径搜索。这意味着开发者可以在游戏运行时动态计算角色或其他游戏实体的路径。这一功能对于实时策略游戏或动态变化的游戏环境非常有用。 其次,新版本的导航系统还改进了自动化的对话框生成功能。开发者可以通过简单的设置,自动生成适应场景的对话框来实现导航指示。这个功能可以大大减轻开发者的负担,并提高游戏中导航的质量。 此外,Unity 2022.3还提供了更多的导航算法选项。不同的游戏场景可能需要不同的导航算法来平衡效率和精度。新版本中的导航系统提供了多种算法选项,让开发者能够根据具体需求选择合适的算法。 最后,Unity 2022.3导航系统的改进还包括了对2D游戏的支持。早期的导航系统主要面向3D游戏,但新版本中加入了对2D游戏的导航支持。这使得开发者能够更方便地为2D游戏创建导航系统,为玩家提供更好的游戏体验。 总的来说,Unity 2022.3版本的导航系统带来了更多强大和灵活的功能,包括实时路径搜索、自动对话框生成、多种导航算法选项以及对2D游戏的支持。这些新功能使得开发者在为游戏添加导航系统时更加便捷,为玩家提供更好的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值