1.缩放变换

Scale代表的是缩放。
通常意义下的缩放变换,指的是利用缩放矩阵和物体的齐次坐标相乘而进行变换,缩放矩阵形如:


Scalex代表x轴方向的缩放
Scaley代表y轴方向的缩放
Scalez代表z轴方向的缩放
当它与物体的齐次坐标相乘后,可以得到缩放后的物体坐标

可以发现缩放矩阵将物体原本的坐标依据缩放比例进行了变换。
这是几何上的缩放变换,那么在Unity中,缩放变换又是一种什么样的作用呢。

2.Unity中的缩放变换

在Unity中,对于导入的模型以及unity中自带的那些Object(例如 Cube 、Sphere…)是不能直接改变其本身属性坐标的大小的,只有通过缩放变换来改变其自身坐标系的大小来使其大小发生改变。也就是如果物体正常的长度为2,如果你本体坐标系的缩放为2,那么物体实际看到的长度就变为了4,但是这个物体在它本体坐标系下的长度仍然为2。在Unity中,Scale的变化你可以看做是对物体的本体坐标系进行的缩放变化,在这个缩放过程中,物体在其本体坐标系下的各项属性保持不变。


如图这是一个Cube改变Scale之前的状态,接下来我们在Z轴对它进行缩放


可以发现这个cube在z轴上的长度变为了原来的二倍,而它自身的坐标并未发生改变。

在unity中的物体的transform里,表示缩放的一共有两个量,lossyScale和localScale。

Localscale代表的是当前物体相对于父物体的缩放,既可以作为左值也可以作为右值。

Lossyscale代表的是当前物体在全局中的缩放,为只读变量,不可修改。

Inspector界面显示的scale表示的是localScale。

3.注意

在Unity中关于Scale容易出问题的地方就在于当物体之间包含父子关系时,如果父物体的Scale改变,会导致子物体的世界坐标(即transform.position)发生改变。(注意,inspector中的position为与父物体的相对坐标)

假定在父物体的Scale为(1,1,1)的情况下,父物体的世界坐标为(x1,y1,z1),子物体的世界坐标为(x2,y2,z2)。当父物体的Scale发生改变变为(1,1,2)时,父物体的世界坐标不发生改变,而子物体的世界坐标将变为(x1,y1,z1+(z2-z1)*2)。子物体的世界坐标发生这种改变的目的,是为了保证其相对于父物体本体坐标系的相对坐标的不变性。


演示一下

令Ojbect1为父物体,object2为obj1的子物体,object3为obj2的子物体
如果在初始情况下object1的坐标为(0,0,-2),object2的坐标为(0,0,1.5),object3的坐标为(0,0,4)
接下来改变三个物体的localScale。
Object1的localScale为(1,1,1.5) object2的localScale为(1,1,2) object3的localScale为(1,1,3)
改变过后,三者的lossyScale变为(1,1,1.5),(1,1,3),(1,1,9)。
Obj1的position为(0,0,-2),obj2的坐标为(0,0,3.25),obj3的坐标为(0,0,10.75)。

改变前后三个物体的localPosition均未发生改变。

接下来解释obj2和obj3的坐标变化是如何得来的。
3.25= -2+(1.5-(-2))*1.5
10.75=[-2+ (1.5-(-2))*1.5]+(4-1.5)*3
即子物体的当前世界坐标等于父物体的世界坐标加上子物体相对于父物体的相对坐标乘以父物体的lossyScale对应的值。

Unity中Scale详解相关推荐

  1. Unity中GPUInstance详解

    为什么要用GPUInstance        在没有GPUInstance此技术之前,对于像草地.树木,割草游戏,它们往往是数据量很大,但同时又只存在微小的差别如位置.旋转.颜色等.如果像常规物体那 ...

  2. Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  3. 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵

    转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...

  4. Unity动画系统详解10:子状态机是什么?

    摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...

  5. Unity动画系统详解9:Target Matching是什么?

    摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...

  6. 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏

    零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...

  7. Unity动画系统详解4:如何用代码控制动画?

    摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...

  8. Unity动画系统详解8:IK是什么?

    摘要:IK是Inverse Kinematic的缩写,也就是反向动力学.是根据骨骼的终节点来推算其他父节点的位置的一种方法.比如通过手的位置推算手腕.胳膊肘的骨骼的位置. 洪流学堂,让你快人几步.你好 ...

  9. Unity动画系统详解6:如何做好角色的移动动画?(Root Motion详解)

    摘要:Root Transform是body transform在Y平面上的投影,并且是运行时计算的.每一帧Root Transform的变化实时计算.然后Transform的变化会被应用到GameO ...

最新文章

  1. 【ZZ】浅谈大型web系统架构 | 菜鸟教程
  2. TSV_TNEW_PAGE_ALLOC_FAILED
  3. 【网址收藏】Linux 命令分类(debian Linux)
  4. 信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界。...
  5. java ucs2转utf8_Windows下Unicode(UCS2),UTF8,GBK(GB2312)互转
  6. lnmp 查看mysql版本_MySQL数据库之Lnmp环境中php-mysql版本问题
  7. 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
  8. Atitit 日志分析与方法调用链 发出命令与接收,,接收使用缩进一格来。。。 方法闭合 使用notepad++选中字符串模式单词。。所以 cls_mthd 模式的输出,来确定一个具体命令。
  9. win11系统下安装java 8的教程
  10. HDMI的DDC是什么
  11. 301work 不积跬步无以至千里Asp.net程序
  12. MongoDB可视化工具之Studio 3T的使用
  13. android 版本更新和下载安装适配7.0 8.0 9.0
  14. 品牌铸造,vivo踏入高端新境界
  15. 集合竞价如何买入_老股民教你如何用集合竞价买入涨停板,散户看到就是赚到!...
  16. html复选框代码隐藏勾勾,[译] 为什么 HTML 中复选框样式难写 — 本文给你答案
  17. 2015.7.15(千股跌停,开盘及时出货。10:49由于绘制通道错误,错误加仓)
  18. 计算机机房内管线路由设计,大学生公寓FTTB宽带接入网综合设计
  19. 《编程之美》1.4 买书问题 贪心法则
  20. Android开机启动流程简析

热门文章

  1. 1.类加载:什么是类加载???什么是类加载器???类加载器有哪三种类型???如何获取类加载器???
  2. 欢迎注册和登陆我们的学海灯塔
  3. Java 对象的克隆Clone和必须了解的浅拷贝与深拷贝
  4. 创龙科技Zynq-7010/20工业开发板(双核ARM Cortex-A9+A7)-性能及参数资料
  5. 【JavaScript】内容的展开/收起
  6. 漫画绘制技法大放送(上)
  7. 常用AF对焦算法详解
  8. Deep Learning 最优化方法
  9. 24点(给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利)
  10. LVI-SAM imuPreintegration代码解析