前言

在使用unity3D进行场景设计和物体控制的过程中,多层物体嵌套是经常会用到的一个结构。多层级物体中,每个层次的物体可能都会有子物体,这就导致了子物体的一些行为会收到父物体参数的影响。本文讨论子物体旋转操作偶然会出现的mesh变形的问题。

问题描述

图1 正常操作展示

图1(A)所示,我们设置了一个父物体(parent_cube)和一个子物体(child_cube),采用默认cube的Scale参数都是(1,1,1),父子物体要相距一定距离便于观察表现。此时的表现是正常的,即(1)当旋转父物体时候,子物体正常跟随转动并保持稳定结构关系,如图1(B)所示;(2)当旋转子物体时候,父物体静止而子物体可以正常旋转,如图1(C)所示。

图2 异常效果问题展示

但是,当我们改变父物体的Scale参数数值,例如(1,0.2,1),且删除原来的子物体,并在和父物体同层级创建一个新的物体,不妨叫做“new_child_cube”,它的Scale参数采用默认设置即为(1,1,1)。接下来将新的子物体拖动到父物体之下,形成图2(A)所示的层级关系。此时,会发现子物体(new_child_cube)在被放到父物体下之后,它自己的scale变成了(1,5,1)。当旋转父物体时候,仍然正常,如图2(B)所示。但是当旋转子物体的时候,奇怪的Mesh形变就出现了,如图2(C)所示,这是咱们不想要看到的。这种现象对咱们设计多层物体并进行控制操作是不友好的。

解决方法

要解决这种问题,首先要明确引发其产生的原因。通过上面的展示,我们能发现,当Scale的三个数值不相等的时候就会发生这种现象。但是如果父物体已经改变了Scale,子物体拖进去时候会自动重新适配Scale以保证其形状外观不变,而这种重新适配的Scale会导致其在自身发生旋转时出现Mesh变形。所以只要我们想办法保证每个层级的子物体都是采用自己的标准Scale,不受各级父物体的Scale变化影响,问题就自然解决了。

图3 解决方法

为了方便展示,我们改变一种组织多层次物体的结构。创建空物体,命名为parent_root,再创建另一个空物体,命名为child_root,它们的Scale均采用默认参数(1,1,1)。创建一个Cube作为父物体,命名为parent_cube,采用变形过的Scale数值(1,0.2,1),再创建一个Cube作为子物体,命名为child_cube,采用默认Scale参数(1,1,1)。拖动这些物体形成如图3(A)所示结构,父物体方块(parent_cube)和子物体方块(child_cube)分别挂在两个空物体节点(parent_root、child_root)之下。parent_cube和child_cube的position、rotation参数都设置为(0,0,0)。

经过上述设置,我们实现了通过操作其父级挂载结点(空物体)来间接控制某一实际物体旋转的目的,同时物体的Scale参数的变化不会对更深层级的子物体产生影响,因为原本需要作为子物体的那些物体已经通过解耦设计解除了直接的控制关联,且保持了应有的等价控制效果。这样,图3(B)、图3(C)展示了现在的操作效果,实现通过控制挂载点来控制不同层级物体旋转。

结论

本文介绍了一个Unity中比较常见的简单案例,虽然问题简单,能在比较关键的时刻帮助大家理清问题源头,快速定位问题从而解决问题。

解决Unity3D中多层级结构子物体旋转受父物体尺寸影响的问题相关推荐

  1. Linux系统中的层级结构(二级目录)

    linux层级结构标准叫FHS,标准是3 Applications的附件文件中的其他位置中有电脑,其中有子目录如下: 这些子目录是在安装系统时自动建立出来的,称为二级目录,有自己独特的功能,这些独特功 ...

  2. Unity子物体脱离父物体,解除父子关系,子物体不随父物体移动

    在Unity中创建一个手雷,并且需求是扔出手雷时,手雷不能跟随人物移动 这个需要调用 gameObject.transform.DetachChildren方法,将GrenadePosition下的所 ...

  3. 解决quasar中的q-tree结构default-expand-all不生效的问题

    今天在工作中用quasar框架遇到了树(q-tree)结构默认不全部展开子节点的问题. quasar框架 代码中已经加入default-expand-all属性,但是就是不生效 <q-treec ...

  4. 解决Unity3D中“There is no 'Renderer' attached to the game object”问题

    最近在开发一个Unity3D的项目,遇到一个问题,弄了老半天才解决,过程中发现中文的资料并不多(也可能是我的搜索能力问题),于是写一篇博客,可能能帮助到以后碰到这个问题的开发者们. 问题描述一: 我遇 ...

  5. 9_less中的层级结构

    如果在某一选择器的 {} 中直接写上了其他的选择器,会自动转换成后代选择器,如: .father{.son{} } 此时编译为css就是(好像这个有点废话了): .father .son{} & ...

  6. 【论文解读】ICDM2020 | 挖掘异构图中的层级结构

    1. 基于层次聚合和关系度量学习的树结构感知图表示学习 Tree Structure-Aware Graph Representation Learning via Integrated Hierar ...

  7. css中的继承,子标签会继承父标签的某些样式(话说自己以前还真的没有注意到过继承)

    css有三大特性:层叠.继承.优先级.这里说一下继承 继承的好处是:恰当地使用继承,可以简化代码,降低css样式的复杂性. 能够继承的有大部分text- font- line- 这些前缀开头的.col ...

  8. 【Fracturing Destruction】点破小球——Unity3D中达到条件才触发的物体爆裂、炸裂、碎裂效果

    在<[Fracturing & Destruction]Unity3D的物体爆裂.炸裂.碎裂效果>(点击打开链接)提到了Unity3D的物体爆裂.炸裂.碎裂效果到底是用哪些组件去制 ...

  9. unity3d中animator和animation k动画注意点和问题 无法播放等等

    一般情况下有时候为了方便或者是好控制, 会在unity3d中直接用animation进行k动画操作 但是有的时候就会发现有的animation无法拖入到animator 或者是有的animation组 ...

最新文章

  1. 学习Hadoop时遇到的问题以及解决方法
  2. Oculus不准备出席E3了!这是要搞事情?
  3. shell-while循环
  4. 【C语言探索之旅】 第一部分第六课:条件表达式
  5. python input与返回值-python中使用input()函数获取用户输入值方式
  6. PHP中的short_open_tag
  7. pytorch教程龙曲良46-55
  8. python简单爬虫(一)
  9. pom报错如何解决(org.apache.maven.archiver.mavenarchiver.getmanifest)
  10. VMware Workstation的彻底清除 与 VMware Workstation下载安装图文教程
  11. MTK Android GT928触摸屏驱动客制化触摸的开关
  12. 如果你有想珍惜的人,一定要送TA这个礼物!绝美又有内涵
  13. 扫描转换html,html+css实现图片扫描仪特效
  14. Swift减少print函数的耗费
  15. org.apache.mina.core.RuntimeIoException: Failed to get the session 异常可能出现的原因
  16. 回归分析在计算机中的应用,应用回归分析(何晓群)学习笔记
  17. 远程连接MySQL数据库的时候显示Can‘t connect to MySQL server (10060
  18. Hive基础知识(三)--分桶表
  19. 二叉树找到两个结点的最近公共祖先
  20. 物联网架构实例—Ubuntu 安装Redis

热门文章

  1. java中的char占几个字节
  2. ZZULIOJ 2131 Can Win【思维建图+最大流】
  3. 配音秀今天怎么显示服务器,教你如何玩转配音秀
  4. 700fp_映美FP-700KII驱动
  5. 如何用matlab画烧杯,matlab 微分方程求解作图这个方程怎么解,还有图象怎么出来~dN1/dt=[r1*(1-N1/K1)-m*N2]*N...
  6. 判断三个老师教哪门课命题c语言,教师招聘考试真题7-2013年郑州市高新区
  7. 《Fluid Engine Development》 学习笔记2-基础
  8. RTCSD团队第三组第二周进度报告
  9. 远程桌面提示CredSSP加密数据库修正
  10. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中