美文网首页
TopDown视角射击游戏,鼠标瞄准方向的矫正

TopDown视角射击游戏,鼠标瞄准方向的矫正

作者: 小小謨 | 来源:发表于2019-05-27 11:54 被阅读0次

如题,笔者最近在做个小游戏(常见Top视角射击)复习UE4网路,发现问题,解决问题。
问题如图:


image.png
image.png

初始算法:
1.摄像机聚焦点世界坐标(在这里是SpringArmCompoennt的WorldLocation)转化到屏幕空间,得到在屏幕上的投影坐标Loc1。
2.获取鼠标在屏幕的坐标Loc2。
3.根据Loc1,Loc2计算得出瞄准方向Yaw,修改Character的朝向。
问题描述:
如果在纯粹的顶视角下,这个计算方法并没有问题,但是笔者游戏设定不是纯粹的顶视角(存在一定Pitch方向的旋转量),比较上面图中黄色(HUD上绘制的2D线段,标识计算的鼠标朝向),红色(角色世界坐标3D射线),在非正交角度时,通过鼠标计算的方向与世界空间实际转向存在一定误差。

思考一下,发现误差的形成是来自坐标系的不同,我们根据Loc1和Loc2计算出的选择Yaw,是在屏幕空间,如果把这个空间扩充理解成3D空间,这个空间与Character所处的空间差了一个Pitch偏角。

解决方案:
把Character所在的坐标系当成基准,通过Pitch偏角构建一个相对坐标系,将屏幕空间的向量从这个相对坐标系转到世界坐标系。

未简化代码:

FVector2D PlayerScreenLoc;
PC->ProjectWorldLocationToScreen(GetActorLocation()+ ArmOffset, PlayerScreenLoc);

float MouseLocX, MouseLocY;
PC->GetMousePosition(MouseLocX, MouseLocY);
float PosErrorX = MouseLocX - PlayerScreenLoc.X;
float PosErrorY = PlayerScreenLoc.Y - MouseLocY;
//这个计算结果就是旋转Yaw(ArmYaw为配置参数,可调整初始旋转)
float DirYaw = FVector(PosErrorY, PosErrorX, 0.f).Rotation().Yaw + ArmYaw;

在上述代码后新增解决Pitch偏转带来的误差,好吧,懒得拆开来写了,这是方便理解的写法,应该还有简化写法,。

//转化到世界坐标系的最终角度。
float transformYaw = FTransform(FRotator(90.f + ArmPitch, 0.f, 0.f)).TransformVector(FRotator(0.f, DirYaw, 0.f).Vector()).Rotation().Yaw;

测试结果OK:


image.png

相关文章

  • TopDown视角射击游戏,鼠标瞄准方向的矫正

    如题,笔者最近在做个小游戏(常见Top视角射击)复习UE4网路,发现问题,解决问题。问题如图: 初始算法:1.摄像...

  • SCUM瞄准镜的缩放

    在0.4版本中,瞄准镜加入了缩放功能,可以实现更为精准的瞄准和射击 瞄准镜的缩放操作方法是: 放大:左ALT+鼠标...

  • 瞄准,射击!

    一无戒365训练营极限挑战第45天 宋逸阳和未婚妻晓冰走在顺河路上。 晚风习习,河岸的霓虹喜气洋洋地眨着调皮的小眼...

  • 射击——瞄准

    不知生活中你是否有这样的体验:当一堆事情堆在你面前需要你去处理时(大事、小事、重要的、不重要的、简单的、困难的、琐...

  • 《狭缝射击》

    游戏名:狭缝射击 游戏说明:瞄准时机,发射小球,不要碰到旋转的障碍物,否则游戏失败。只要小球撞到屏幕边界,就能得分...

  • unity3d问题集 <3> 对Physics.Ra

    在游戏中,我们常常要用到鼠标来控制物体的移动或是鼠标拾取某个物体。还有射击游戏里,子弹打中靶子......这些都需...

  • “预备、射击、瞄准”和“预备、瞄准、射击”的区别

    时间管理100篇系列文章第15篇 为什么要先射击,后瞄准? 军训打靶的时候教练都会教我们“预备、瞄准、射击”,这是...

  • 《吃鸡英雄》微信小游戏,狙击手养成计划

    《吃鸡英雄》是一款射击类休闲小游戏,操作简单、容易上手。玩家只需要通过判断角色瞄准对手的时机,轻轻点击屏幕进行射击...

  • 预备,射击,瞄准

    如果想要11点前睡觉的话,我只剩下10分钟的时间写文章了,我暂时还没有想好学什么,但是当我写下这段话时,突然想起了...

  • 射击瞄准时为什么要闭上一只眼?

    在使用单筒望远镜观察远方的时候,会闭上一只眼睛来阻隔多余的信息,射击时进行瞄准也是这样的原因。 射击时如何瞄准??...

网友评论

      本文标题:TopDown视角射击游戏,鼠标瞄准方向的矫正

      本文链接:https://www.haomeiwen.com/subject/dfictctx.html