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

news2024/12/26 0:06:36

目录

一. 变换组件

二. 约束



一. 变换组件

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

运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv-python实战项目十:二维码识别

文章目录 一:简介二:opencv二维码识别流程三:整体代码四:效果 一:简介 二维码识别是一种利用图像处理技术,从数字图像中提取并解析二维码信息的过程。该技术广泛应用于信息快速交换、移动支付、产品追踪等…

SpringCloud的能源管理系统-能源管理平台源码

介绍 基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 软件架构

MySQL的InnoDB存储引擎中的Buffer Pool机制

目录 Buffer Pool 简介 定义 为什么需要Buffer Pool 图解重点知识 Buffer Pool 的组成 数据页(Data Pages) 索引页(Index Pages) 插入缓冲页(Insert Buffer Pages) undo页(Undo Pages&a…

idea鼠标悬浮显示注释

鼠标悬停在代码上的时候会出现快速文档,如下图,这里介绍下如何去除快速文档的显示 2020版本之前 依次找到 File—>Settings—>Editor—>General 去掉勾选 Show quick documentation on mouse move 2020版本之后 依次找到 File—>Settings…

Python数据可视化案例——地图

目录 简单案例: 进阶案例: 继上文数据可视化案例,今天学习用pyecharts练习数据可视化案例2-构建地图。 简单案例: 首先构建一个简单的地图。 代码: import json from pyecharts.charts import MapmapMap() data[…

什么反人类设计?

一、什么反人类设计? 反人类设计,也被称为“诺曼”,是由美国心理学家唐纳德A诺曼提出的概念,指的是那些设计不佳、不利于用户使用的物品。这类设计的特点通常包括不符合人体工学原理、与日常认知和惯性思维相悖。在日常生活中&…

OpenCV图像滤波(13)均值迁移滤波函数pyrMeanShiftFiltering()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数执行均值迁移图像分割的初始步骤。 该函数实现了均值迁移分割的过滤阶段,即输出是经过滤波的“海报化”图像,其中颜色…

Java 垃圾回收,看一遍就懂

了解 Java 垃圾收集的工作原理并优化应用程序中的内存使用情况。详细了解 Java 中内存管理的复杂性。 垃圾收集是一个关键过程,可以帮助任何Java 开发公司。编程语言中的这一强大功能可以巧妙地管理内存分配和释放,防止内存泄漏并优化资源利用率。它就像…

pytorch库 04 神经网络代码基础

文章目录 一、神经网络基本骨架 nn.Module二、卷积层三、池化层四、非线性激活层五、线性层六、模型搭建小练习:CIFAR 10 model 结构七、损失函数与反向传播八、优化器九、现有网络模型的使用与修改十、网络模型的保存与读取十一、一个完整模型训练套路十二、GPU加速…

arm体系结构(1)

一 RAM: 随机存储(主存储器) 速度快、掉电数据丢失 ROM: 只读存储(辅助存储器) 速度慢、掉电数据不丢失 RAM SRAM DRAM SDRAM DDR2、3、4、5 静态 动态 同步 ROM PROM EPROM EEPROM 可编程 可擦除 电可擦可编程 flash:结合RAM和ROM的优点,快、掉…

Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录

ANSI C程序中,用到了wcsrchr、wcsncpy_s、wcscat_s、wcscpy_s等几个字符串函数,但是编译时提示: 错误 LNK2001 无法解析的外部符号 _wcscat_s 查了挺多帖子,没有解决。 https://bbs.csdn.net/topics/250012844 解决VS编译…

Python青少年简明教程:为何学习Python编程语言及Python编程环境搭建

Python青少年简明教程:为何学习Python编程语言及Python编程环境搭建 我们写给他人看的文章,使用类语言。人类语言有很多种如汉语,英语,法语等等。 而写给 计算机 执行的 程序文件 ,必须使用 编程语言 , 因…

Java 集成测试详解及示例

通过综合指南探索 Java 集成测试的世界。了解工具、流程和最佳实践,并辅以实际示例。 随着软件系统变得越来越大、越来越复杂,组件和服务以错综复杂的方式交互,集成测试已变得不可或缺。通过验证所有组件和模块在组合时是否正常工作&#xff…

三级_网络技术_27_计算机网络环境及应用系统的安装与调试

1.对于频繁改变位置并使用DHCP获取PP地址的DNS客户端,为减少对其资源记录的手动管理,可采取的措施是()。 允许动态更新 使用反向查找区域 增加别名记录 设置较小的生存时间 2.下列Windows 2003系统命令中,可以清空DNS缓存(DNScache)的是…

在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

打靶记录11——Billu_b0x

靶机: https://download.vulnhub.com/billu/Billu_b0x.zip难度: 中(两种攻击路线) 目标: 取得root权限 涉及的攻击方法: 主机发现端口扫描Web信息收集SQL注入(Sqlmap跑不出来)…

Spring Boot 3.3 【四】Spring Boot 整合JPA

🌟 技术人聊管理 请关注 【技术管理修行】 一、JPA 简介 Spring Data JPA 是 Spring Data 项目的一部分,它为使用 Java Persistence API (JPA) 进行数据库访问提供了一种非常简便的方式。Spring Data JPA 的主要目的是简化基于 JPA 的数据访问层的开发工…

leetCode - - - 栈和队列

目录 1.有效的括号( LeetCode 20 ) 2.最小栈( LeetCode 155 ) 3.接雨水( LeetCode 42 ) 4.逆波兰表达式求值(LeetCode 150) 5.柱状图中最大的矩形(LeetCode 84&…

SAP LE学习笔记02 - WM和库存管理(IM)之间的关系,保管Lot(Quant)

上一章学习了LE的基础知识。 1,LE的概述,LE里面包含下面3个大的模块 - LE-WM 仓库管理 / - LE-SHP 发货/ - LE-TRA 运输 2,仓库的结构 - 仓库番号 / -保管域Type(存储区域)/ - 保管区画(存储区)/ - 棚番(Storage Bin 仓位&…

IDEA快捷键(Ctrl + tab)非常好用 切换最近使用的编辑器选项卡

文章目录 1、为什么要使用 ctrl tab 快捷键?2、使用 ctrl tab 快捷键 1、为什么要使用 ctrl tab 快捷键? 当我们点击 ctrl alt 鼠标左键点击 进入方法的实现时,这个时候我们会在这个实现类中不断的点击,查看源码&#xff0c…