赞
踩
最近在研究优化一个功能, 将人物actor从当前坐标移动到固定的坐标点, 由于有大量的相同actor, 想尽量减少消耗. 在网上找到了MoveComponentTo这个函数, 但是发现它只能移动场景组件,一度陷入搁置. 经过了九九八十一难, 终于弄明白如何使用了, 不一定是正道,但是能用,嘿嘿.
创建一个Character, Mesh和动画蓝图随便弄一弄就行,我用的是UE新手教学的小白人, 重要的是Character自带的角色移动组件(CharacterMovementComponent).
MoveComponentTo必须要移动子Actor, 因此我们需要一个控制这些子Actor的父Actor蓝图. 一般来说,遇到这种需求看这个文章的,应该本身都有个父蓝图了吧XD!
这里我写的是每3秒创建一个人物,并把它移动到随机位置. 这一步的重点是要使用"添加子Actor组件"节点,然后"设置子Actor类"! 妄想直接创建出类型是我们之前创建的Character的子Actor是不可行的, 卡了好久…
这里的RandomXY和计算相对位置都是比较简单的、方便测试的函数, 下面我会放出截图. 这一步最重要的是要把获取之前传入的子Actor组件中的子Actor, 然后才能转换成我们自己的Charactor(C_Person),如果直接传入子Actor组件会报错,类型转换会一直失败!
最后的旋转并移动就是本篇核心了! 不知道是不是已经想骂我废话多了, 但是曾经的我就经常卡在教程里非重点的内容不得要领, 所以我自己写教程要每个部分都尽量详细, 哈哈.
介绍一下旋转并移动的几个输入参数:
Child Actor: 就是上一步添加的子Actor组件
Rotation: 从当前位置到目标位置的旋转向量
Target Relative Location: 目标坐标的相对位置向量
一个简单的随机浮点数函数.
由于MoveComponentTo使用的是相对位置, 我们需要单独计算一下放进去, 不知道有没有更方便的UE自带函数, 不过这个计算自己写起来也很方便.
接下来需要在Character的蓝图界面添加移动事件
这里已经获取了所有所需的函数, 直接调用就可以了, Ease Out和Ease In代表在结束/开始时是否逐渐减速/加速. Over Time就是整个移动过程需要的时间.
#总结
其实使用这个函数还有一个原因是想控制在3秒内移动, 因为人物位置的数据接口刷新频率是3秒一次, 这种移动方式可以无论距离多远都在3秒内大概走完, 方便控制时间. 本身MoveComponentTo的使用是很简单的, 麻烦的是寻找合适的添加子Actor方法和转换子Actor组件类型的方法. 研究明白了感觉很简单, 但是没路的时候很难猜出, 只能在所有的可能节点里依次寻找, 网上也搜不到类似的用法, 不知道有没有更好的解决方法, 欢迎大家指点.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。