Unity——父子关系

简介: Unity——父子关系

一个场景中可以有很多物体,而这些物并不是随意散布在场景里的,而是有"父子关系"的。

父子关系让多个物体形成嵌套的、树形的结构。很多游戏开发技术,如骨骼动画、指定旋转的锚点、同一物体生命周期等问题都可以用"父子关系"表示或解决。下文将指出,只要用好"父子关系"这一特性,就能很好地解决很多实际问题,而不需要引入其他概念


一、使用"父子关系"复用零件

在某些游戏引擎中,可以重复使用的零件也被称为"组件"。例如,制作出的一个灯泡肌可以用在吊灯上,也可以用在台灯上。这样会带来一个概念上的小问题,因为一旦组件可以单独存在,那么概念就变得复杂了——又多出来一种可以单独存在的"组件",甚至它还可以有自身的位置,如灯泡在吊灯里的位置是可以调整的。

而Unity严格规定了物体和组件分别能干什么、不能干什么。例如,组件必须挂在与物体之上,不能单独存在;组件本身不具有位置参数;由于组件和物体是一体的,因此脚本中引用组件实际上是引用了物体。这样的规定让组件无法单独存在,从表面上看限制了实现时的灵活性。

可以重复使用的灯泡显然是必要的,在很多游戏中都可以找到重复使用物体的例子。对复用零件的问题,Unity的解决方案是使用子物体。简单来说,只要把灯泡做成一个单独的物体,然后把它作为吊灯或提灯的子物体,这样灯泡就成了吊灯或台灯的一部分,问题就解决了。由于物体可以任意移动位置,因此仍可以把它放在吊灯的任意位置。

二、"父子关系"与局部坐标系

每个场景整体都有一个大的坐标系,成为世界坐标系。世界坐标系也有x,y,z轴,在Unity中分别规定为右、上、前方。

但在很多情况下,只有世界坐标系是不够的。例如,在移动台灯的时候,希望灯泡能一起移动;旋转台灯的时候,希望灯泡能一起旋转;放大台灯的时候,希望灯泡能一起放大。在这里,台灯就构成了一个局部坐标系,它内部物体的位移、旋转、缩放都要受到局部坐标系的影响。

简单来说,局部坐标系就是父物体自身的坐标系,父物体的位置就是局部坐标系的原点,父物体的右、上、前分别对应xyz。一旦父物体缩放,所有的子物体也会跟着缩放

举个例子,局部坐标系中有一个非常经典的应用——实现房门的转动

先用三个Cube构成一个门框,在用一个Cube来当作门。如果直接旋转这个门,一般门会沿着其自身的中线旋转。而我们想要的是让门沿着门框旋转。可以给门做一个空的父物体,将父物体定位在门的转轴位置。这是旋转父物体,门就会绕父物体转动了。

三、使用"父子关系"表示角色的骨骼

骨骼动画师现代3D游戏不氪互殴饿的功能。简单来说,3D角色不仅有一个模型外观,该模型内部还有一个虚拟的骨骼,这个骨骼的运动会拉扯模型的表面材质跟着运动,这样一来只需要移动骨骼,就可以让模型做出各种动作了。

如果将人的骨骼结构看作一种链接结构,每一个可旋转的部分都有对应的关节链接。肩膀的旋转会带动整条胳膊的旋转,肘部的旋转会带动小臂和手的旋转,再结合前文提到的"局部坐标系"思考,这些骨骼关系正好可以用"父子关系"表示

事实也确实如此,Unity直接用"父子关系"表示模型骨骼,再在模型表面蒙上一层可伸缩的网格,就像皮肤一样(皮肤一样的网格组件叫做Skinned Mesh),这样就用"父子关系"解决了骨骼动画的问题

Skinned Mesh Renderer组件:在Unity中看不到单独的Skinned Mesh组件。带骨骼的三维模型使用Skinned Mesh Renderer统一管理网格和材质,而不像一般的模型用Mesh Filter和Mesh Renderer分别表示

四、利用父物体统一管理大量的物体

某些游戏会大量产生同类物体,如射击游戏中的子弹物体、塔防游戏中的大量敌人等。很多时候需要统一管理这些子弹,如一起隐藏、一起销毁等。如果它们散布在整个场景中,要同时对它们进行操作就会很麻烦。这是可以创建一个空物体作为父物体,让这些大量的痛了对象都称为父物体的子物体。那么只要隐藏父物体,它们就会一起隐藏,也可以一起销毁。因此,结合父物体可以轻松设计出有效的物体管理器

Unity官方文档指出:如果在父物体上使用了非等比缩放,那么在某些特殊情况下可能导致子物体的位置、朝向计算错误,因此建议在父物体上尽可能避免非等比缩放


相关文章
大模型应用开发-LangChain入门教程
大模型应用开发-LangChain入门教程
942 0
|
机器学习/深度学习 自然语言处理 并行计算
Transformer 学习笔记 | Seq2Seq,Encoder-Decoder,分词器tokenizer,attention,词嵌入
本文记录了学习Transformer过程中的笔记,介绍了Seq2Seq模型及其编码器-解码器结构。Seq2Seq模型通过将输入序列转化为上下文向量,再由解码器生成输出序列,适用于机器翻译、对话系统等任务。文章详细探讨了Seq2Seq的优势与局限,如信息压缩导致的细节丢失和短期记忆限制,并引入注意力机制来解决长序列处理问题。此外,还介绍了分词器(tokenizer)的工作原理及不同类型分词器的特点,以及词嵌入和Transformer架构的基础知识。文中包含大量图表和实例,帮助理解复杂的概念。参考资料来自多个权威来源,确保内容的准确性和全面性。
|
机器学习/深度学习 人工智能 自然语言处理
2025人工智能证书|2025年人工智能行业AI证书如何选择?
在2025年AI浪潮中,生成式AI已成为职场核心竞争力。企业招聘将“AI能力”设为基础门槛,如何选择有价值的AI认证?本文从行业趋势、证书价值、备考策略及职业规划四大维度解析。GAI认证由培生推出,涵盖核心技术与实际应用,结合理论与实践考核,助力职业发展。它不仅评估技术能力,还注重伦理法律等复合技能。备考需分阶段规划,善用官方资源,注重实践。无论转型、深耕还是管理晋升,GAI认证均适合作为起点,抢占AI时代先机。
|
监控 数据挖掘 API
京东商品历史价格 API 接口系列(京东 API)
本文介绍了如何使用京东开放平台API获取商品价格信息。首先,需注册账号并创建应用以获取App Key和App Secret,进而获取Access Token。准备好开发工具后,通过调用`jd.item_search`和`jd.item_get`接口,可以分别按关键字搜索商品和获取指定商品的详细信息及价格。示例代码展示了如何使用Python的requests库进行API请求。应用场景包括价格监控、商家定价策略、电商平台数据分析及商业智能决策支持。
1512 10
|
存储 算法 NoSQL
Zstandard (zstd)压缩算法在JAVA上的使用
Zstandard (zstd)压缩算法在JAVA上的使用
2874 0
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
1876 1
|
API 定位技术
天气预报1天-中国气象局-IP查询版免费API接口教程
此接口基于IP地址自动判断并提供该地区当日的天气信息,数据源自中国气象局。支持POST/GET请求,需提供用户ID和KEY,可选输入IP地址,默认返回北京天气。返回参数包括天气详情、地理位置及IP等。示例请求与响应详见文档。
1591 8
|
存储 人工智能 自然语言处理
社区供稿 | 源大模型的快速部署与高效推理——GGUF格式模型介绍与使用教程
在人工智能领域,大型语言模型的发展日新月异,它们在自然语言处理、机器翻译、智能助手等多个领域展现出了前所未有的能力。
社区供稿 | 源大模型的快速部署与高效推理——GGUF格式模型介绍与使用教程
|
算法 定位技术 图形学
unity2d实现一个全方位的无限随机地图
unity2d实现一个全方位的无限随机地图
1393 0
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
1998 0