目录
在前面的教学中,使门旋转的核心节点就是SetRelativeRotation,还有Location和Scale
这三种属性都有三种参考系不同的方法Actor,World,Relative
概念
参考系
参考系不同,坐标不同
假设在一个Actor中添加一个StaticMesh,将Mesh沿Actor坐标系x轴正方向5个单位,再把Actor沿着世界坐标系x轴方向移动5个单位,那么现在Mesh的世界坐标就是10个单位。每一个对象都有自己的参考系,ActorLocation和WorldLocation都可以看做绝对参考系。
层级关系
在上面的例子中Mesh是Actor的子对象,而Actor整个关卡蓝图的子对象,因此在移动Actor的时候,Mesh的位置也会改变,关卡也可以移动,同样Actor也会跟着移动
结论
- 我们在蓝图中对Mesh这样的组件进行“相对--”改变的时候,是以Actor为参考系的
- 而在对Actor进行“Actor--”改变的时候,是以关卡(场景)为参考系的
- 而在使用“世界--”属性的时候,实际上是以整个场景为参考系的
这里你可能有疑问,2和3好像没有什么区别。现阶段你可以理解为没有区别,因为当前关卡的原点和世界的原点是重合的,也就是说两个参考系相同,当你学习了流送关卡之后就会发现这个问题
下面我们进行一些测试
ActorLocation
1.新建了一个蓝图,先创建了两个cube(随便两个物体都可以)。
先说最简单的SetActor类型的,选择一个SetActorLocation
我们让物体在开始游戏后2秒后朝着一个方向移动一定距离,需要一个EventBeginPlay(打开事件图表就有,是灰色是因为还没有使用,引出引脚就可以了)和一个Delay节点(空白处搜索或者按住D左键单击),按图示连接
可以看到
目标是self
New Location,xyz都是0,我们的目的是将目标在当前位置发生一定移动,那么我们需要计算这个最终位置
我们设置Actor的位置,就使用Actor的位置,所以搜索节点GetActorLocation
这个Return Value返回的是一个Vector类型变量,也就是个三维向量,使用Break就可以对这个坐标的xyz进行相应操作了
我们随便给物体一个位置
运行,发现没,这个Actor中的两个Box的位置都移动了,而且中间间距没有变,说明什么?
说明你设置Actor的位置,是Actor就移动了,不管Actor都多少东西都要同时移动,里面的东西只是随着Actor移动而移动.
RelativeLocation
让我们来试试SetRelativeLocation,这个是对Actor里面的Mesh进行操作
由于两个box没有区别,所以我把box_2换成了球,更明显
注意此时GetActorLocation也要换成GetRelativeTransForm还要break一下
SetRelativeLocation的目标是Box2
在场景中,点击该物体,你会发现,这个Actor的中心在正方体中,Mesh_2(球)其实是在正方的x轴正方向300的位置
为什么是x轴300的位置?请注意蓝图该mesh的细节中我设置的就是300,这里设置的的位置就是相对位置(RelativeLocation)
那么你可以想象一下,程序是设置这个球的相对位置x-200,最终球的相对位置是x=100,也就是说会靠近正方体对吧?
运行你就知道了,没错吧,你在场景中旋转这个Actor,不管你怎么旋转,这个球最后都是靠近正方体
这个就是SetRelative设置相对属性,
WorldLocation
多的不说,直接看SetWorldLocation
这就奇了****怪了,一样的?把Actor旋转一下试试
发现没,这次球并没有靠近正方体,而是朝着当前世界的X轴负方向移动了200
理论上说,这么详细的图文,如果没看懂,那就多看两次,绝对不可能理解不了,实在不行自己去试试,这是最好的办法。
总结
- 本文通过实例设置ActorLocation和Mesh的WorldLocation和RelativeLocation来告诉大家这三钟设置的区别
- 什么时候用哪种?这个问题相信看明白的朋友心里已经有想法了
- 如果你希望你Actor里面的东西全部动或者旋转,就用SetActor属性,
- 如果希望局部改变就用World或者Relative,World的属性主要就是基于世界坐标,不会涉及你Actor旋转问题,Relative简单的来说就是使用的Actor内部的坐标系。
- 自己领悟吧,我用的用词可能不太标准,语句也有些啰嗦,水平有限,只能这样了
- 你必须要理解这个相对坐标和世界坐标,其实不难,你只要理解了这个坐标,另外几个都是这个道理,位移,旋转,缩放
下一章
改变一下我们的界面,讲一下UE4的UI系统