UE4实战记录(一)让物体向前飞行

34 篇文章 2 订阅

引擎版本为4.24
需求为:
自己实现一个投掷物类,不能使用UE4自带的ProjectMovementComponent组件。

首先,我想到的是得让我的投掷物,向前飞行呀!

开始实现该功能。
玩家类:

World->SpawnActor<AMyProjectile>(ProjectileClass, SpawnLocation, SpawnRotation, ActorSpawnParams);

这里就是一个生成投掷物类,具体信息去看第一人称模板。需要注意是这里投掷物的旋转是直接使用玩家控制器的旋转。
投掷物飞行函数:

void AMyProjectile::Flying() {
	AddActorLocalOffset(GetActorForwardVector()* Velocity);
	}

很简单的思路,就是物体使用向前向量乘以速度,添加到本地偏移,通过Tick函数来达到不断的前进的效果。

但是结果却是,很抱歉的,在运行程序后,不转动摄像头时,投掷物会往特定的地点飞行,但是一旦转动摄像头,就会出现飞行方向出现偏差的问题,偏差角度随转动摄像头的角度而定。
经过多次测试之后,发现多出的偏差角度大概是正确角度的一倍左右,就是尝试
在投掷物类中的Begin函数中加入

	FRotator TempRotation=GetActorRotation()* 0.5;
	SetActorRotation(TempRotation);

意思就是将旋转体除以2,缩小2倍。
由此,基本物体飞行效果达成。

但是,这属于误打误撞搞定的,让我很不高兴。
我便去测试ForwardVector的值,希望它能够给我一个解释。

由此发现,ForwardVector是存在负值的。
如下图所示:
请添加图片描述再回去看看我们的飞行函数,结合这张图,你就会发现,例如左边,我们要的旋转0-180度应该是向前向量的X在【0-1】之间取值,而不是旋转0-90度便要在【0-1】之间取值,并且X不能有负值.
由此,我们需要的应该是如下图一样的旋转角度到向前向量X的变换

在这里插入图片描述所以我们需要将旋转体/2,得到我们要的向前向量X变化。

至于旋转体到向前向量的变换,需要涉及到四元数。
其实四元数就是有(x,y,z,w)四个元素的数据结构,前面的是旋转轴,后面的是旋转量。
如:
初始值: (0,0,0,1)
沿着y轴旋转:180°(0,1,0,0) 360°(0,0,0,-1)540°(0,-1,0,0) 720°(0,0,0,1)
沿着x轴旋转:180°(-1,0,0,0) 360°(0,0,0,-1)540°(1,0,0,0) 720°(0,0,0,1)
四元数部分参考自:
Unity3D中的Quaternion(四元数)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值