由于关于移动的代码量太过庞大,所以我们先抛开引擎或者说抛开移动组件来思考几个问题。
问题:抛开MovementComponent这些个移动组件,如果让我们自己写角色移动,应该怎么构思?
1、UMovementComponent
首先我们可以从移动的本质开始思考,移动就是改变位置信息,那么就是在一个循环中一直更新一个位置信息,所以体育老师教的公式S=vt用到了
紧接着思考另一个问题:移动的对象肯定是角色,但是角色Actor是没有位置信息的,所以驱动移动的是什么呢,是包含位置信息的组件对吧,例如:SceneComponent;
所以通过以上分析我们大致可以理出来一点思路,就是移动本质就是调用一个类似名称这样的SetComponentLocation函数。
所以我们可以开始写了,比如写UMovementComponent一个这样的组件然后继承与UActorComponent,
class ENGINE_API UMovementComponent : public UActorComponent
为什么继承与UActorComponent而不是其他呢 ,因为我没必要有其他任何的类似于位置信息或者渲染信息之类的需求呀,我只需要做好自己的计算移动驱动移动就好了,那为什么没有直接继承自UObject 呢,因为我还需要同步的一些功能呀哈哈。
那么UMovementComponent的一个重要变量就是USceneComponent* UpdatedComponent了,
USceneComponent* UpdatedComponent;
接上文提到SetActorLocation就是模拟移动,所以查看代码可以知道SetActorLocation里面肯定有我们需要的函数
![2273331a8cdc8bbca405c1ab87e6468d.png](https://i-blog.csdnimg.cn/blog_migrate/e82e12825621aa90cee0a2a78ffe28b2.jpeg)
所以我们这个组件里面也应该有如下函数MoveUpdatedComponentImpl
![c97071d2e06374a503b47e42072b953d.png](https://i-blog.csdnimg.cn/blog_migrate/a3ef71d71c2d9fa787766c30236573df.jpeg)
而且该函数的第一个参数很重要 De