本来是思考一个技能,通过一组Actor的凝聚,分散,还有组合.这些类似鸟群的方法.
那么单个的单位我就在后面起个名字叫Sentry吧.
首先是本来想通过UE4的Niagara来实现.
虽然Niagara实现起来比较简单,但是对于销毁的控制,和处理碰撞的方法比较贫乏,毕竟是粒子系统.
实现思路参考了:Coding Adventure: Boids
所以就考虑自己来写算法来实现集群行为了.
搭建了一个测试环境
因为考虑到会频繁使用射线查询,性能可能会有瓶颈,所以这里先用蓝图实现粗略的写法,之后再用C++实现.(说到底这个地方应该被这样实现吗....)
那么具体实现方法应该是通过射线查询来判断距离自己附近的所有有碰撞的Actor最后拟合一个为一个力来成为自己的方向.
但是要注意的是这里并不会检测Sentry自身.Sentry只用和附近的Sentry保持距离就可以了.
看起来实现了基础效果,所以证明了自己的方案是可行的,那么接下来在C++当中实现.
C++中的实现比较自由,所以我应该有一个控制全局Sentry的参数,用来方便以后控制矩阵
//全局控制变量 会放在游戏开始时初始化 USTRUCT(BlueprintType) struct FSentryMParam { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly, VisibleAnywhere) //数量 int Num; //等等等 };
接下来是实现实现射线碰撞的终点算法,我本来自己是设想看能不能有一种获取均匀生成在球体表面点的算法,
然后我决定自己来写一个快速算法.
日志应该不是这么写的吧....
......所以我贴代码是想干嘛....
暂无关于此日志的评论。