在前面的教学中,使门旋转的核心节点就是SetRelativeRotation,如果你去搜索SetRelative会出现三种类型,SetRelativeLocation、SetRelativeRotation、SetRelativeTransforms,也有Get节点,很显然前者是设置,后者是获得,另外还有SetActor,和SetWorld类型。
很多朋友一开始学,肯定面临两个问题,一个是根本不懂这三个是什么鬼,另一个问题就是什么时候使用哪种类型的。这篇文章或许能解决你的问题,顺便学习一下SetActorScale 3D这个简单的节点
本文通过实例设置ActorLocation和Mesh的WorldLocation和RelativeLocation来告诉大家这三钟设置的区别
正文:
0.首先你必须理解两个概念,一个是坐标系概念,一个是层级关系
简单的说
在世界坐标下,对象为Actor,设置的Actor的任何属性,是对整个Actor蓝图进行设置
在Actor坐标系下,对象是Actor蓝图里面的组件,对组件的任何属性进行设置,只影响该组件
可能有点晕,直接看例子吧。
1.新建了一个蓝图,先创建了两个cube(随便两个物体都可以)。
先说最简单的SetActor类型的,选择一个SetActorLocation
我们让物体在开始游戏后2秒后朝着一个方向移动一定距离,需要一个EventBeginPlay(打开事件图表就有,是灰色是因为还没有使用,引出引脚就可以了)和一个Delay节点(空白处搜索或者按住D左键单击),按图示连接
可以看到
目标是self
New Location,xyz都是0,我们的目的是将目标在当前位置发生一定移动,那么我们需要计算这个最终位置
我们设置Actor的位置,就使用Actor的位置,所以搜索节点GetActorLocation(顺便说一下,这个Return Value返回的是一个Vector类型变量,如果不懂的话没事,使用下面的Break就可以对这个坐标进行相应操作了)
我们随便给物体一个位置
运行,发现没,这个Actor中的两个Box的位置都移动了,而且中间间距没有变,说明什么?说明你设置Actor的位置,是Actor就移动了,不管Actor都多少东西都要同时移动,里面的东西只是随着Actor移动而移动.
2.让我们来试试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设置相对属性,
3.多的不说,直接看SetWorldLocationi
这就奇了****怪了,一样的?把Actor旋转一下试试
发现没,这次球并没有靠近正方体,而是朝着当前世界的X轴负方向移动了200
理论上说,这么详细的图文,如果没看懂,那就多看两次,绝对不可能理解不了,实在不行自己去试试,这是最好的办法。
总结:
本文通过实例设置ActorLocation和Mesh的WorldLocation和RelativeLocation来告诉大家这三钟设置的区别
回答开始的一个问题,什么时候用哪种?这个问题相信认真看完的朋友心里已经有个更清晰的想法了,我的建议就是看你要干嘛,如果你希望你Actor里面的东西全部动或者旋转,就用SetActor属性,如果希望局部改变就用World或者Relative,World的属性主要就是基于世界坐标,不会涉及你Actor旋转问题,Relative简单的来说就是使用的Actor内部的坐标系。
自己领悟吧,我用的词语不太标准,语句也有些啰嗦,只能说个大概,最好自己去试一下。
另外,你必须要理解这个相对坐标和世界坐标,其实不难,你只要理解了这个坐标,你能运用的节点就很多了,位移,旋转,缩放,能做的事也多了
说了这么多无聊的东西,下一章改变一下我们的界面,讲一下UE4的UI系统