UDN
Search public documentation:

MOBAKitPCCameraCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 虚幻开发工具包精华文章 > MOBA入门包 >PC相机系统

MOBA 入门包 - PC相机系统


于2012 年 5 月针对 UDK 进行最后测试

概述


PC相机系统更大程度上就是传统的RTS风格的相机系统。它支持通过将鼠标向屏幕的边缘移动来到处移动相机、跟踪玩家的角色,它也是用了固定高度位置配置系统。固定高度位置配置系统确保了相机总是在同样的高度,无论地形是否低。这使得当相机到处移动时产生较少的抖动感。

相关类是:

  • UDKMOBACamera - 这是相机的基类,提供了游戏使用的基本接口。
  • UDKMOBACameraProperties - 这是用于数据存储的原型类对象。
  • UDKMOBACamera_PC - 这是相机的针对PC平台的变种。
  • UDKMOBACameraProperties_PC - 这是相机属性的针对PC平台的变种。

使用UDKMOBACameraProperties 和UDKMOBACameraProperties_PC的原因


UDKMOBACamera和UDKMOBACameraProperties_PC通过使用原型来存储数据,使得在虚幻编辑中迭代改变更加容易,因为它针对这些属性改变在游戏中的情形提供了实时反馈。

UDKMOBACameraProperties 变量

  • Rotation - 常量相机旋转度。这个属性设置了固定的相机旋转度,在该情形中一般指向下方。
  • BlendSpeed - 相机从一处混合到另一处地方的速度。该值越高,相机从一个地方混合到另一个地方的速度越快。

UDKMOBACameraProperties_PC 变量

  • MovementPlane - 这是平面上的一个点,相机使用该点作为其固定高度。
  • MovementPlaneNormal - 这是法线,代表相机所使用的作为其固定高度的平面。可以使用倾斜的平面,使得相机产生不同的运动。

UDKMOBACamera


函数

  • SetDesiredCameraLocation() - 设置期望的相机位置。

变量

  • DesiredCameraLocation - 当前期望的相机位置。
  • IsTrackingHeroPawn - 如果该项为true,那么该相机应该跟踪角色。

UDKMOBACamera_PC


函数

  • UpdateViewTarget() - 这是相机用于计算它应该在何处时使用的主要函数。

变量

  • CameraProperties - 到UDKMOBACameraProperties_PC 原型的引用。

UDKMOBACamera_PC::UpdateViewTarget()


该函数负责在PC版本中确定相机的位置。

首先,函数通过检查 CameraProperties 是否为none来执行判断是否可以跳出函数。如果*CameraProperties* 是none,那么则返回默认实现。

接下来,函数判断玩家是否想到处移动相机。首先通过使用8个像素的缓冲来判断硬件鼠标位置是否位于屏幕的边缘。如果鼠标位于任何边缘处,那么它将设置 CameraMoveDirection 中存储的适当变量。然后它和任何 PlayerInput(玩家输入) 动作相加,比如当玩家使用箭头键或WASD键时。 然后正规化 CameraDirection ,以便最终的运动速度是常量。

如果 CameraMoveDirection 不为0,那么则意味着玩家当前没有移动相机并且相机正在跟踪玩家的角色,然后应该禁用该项。

如果相机正在跟踪玩家的角色,那么相机仅使用了玩家的角色的位置作为期望的相机位置。否则,相机的期望位置基于相机移动方向和速度进行计算。

首先获得坐标轴。需要使用它来基于相机的旋转度获得本地坐标。这确保当玩家想向上平移相机时,相机可以向屏幕上代表向上的方向移动,因为这可能不一定是Vect(0.f, 1.f, 0.f)。我们首先处理向上和向下的运动。使用 CameraDirectionY + Rot(0, 16384, 0)的原因是 CameraDirectionX 不是代表向上和向下的方向。相反,我们需要将 CameraDirectionY 调整90度来创建那个坐标轴。或许使用四元数从技术上讲会更精确,并可以获得更加精确的结果,但是这个方法较快并可以获得合理的精确度。然后为左、右轴使用了类似的计算。

一旦计算了 DesiredCameraLocation ,然后将执行线面交叉。平面通过一个点和一个法线定义在 UDKMOBACameraProperties_PC 中。通过执行线面交叉,保证了相机的位置位于稳定的高度上。

然后,相机混合到 CameraIntersectionPoint ,从而产生相机的位置。

相机的旋转度设置为相机属性中定义的 Rotation 值。