玩家摄像头瞄准/锁定另一个对象

本文关键字:锁定 一个对象 摄像头 玩家 | 更新日期: 2023-09-27 18:24:04

我正在开发一款使用第三人称相机视图的游戏,以角色为中心,没有任何问题。但我找不到一种方法来"锁定"另一个物体,同时保持我的角色在视野中(火箭联盟的球摄像头:https://youtu.be/FDcO04gXihM)。

我知道lookAt()方法,但它本身还不够。我仍然需要计算相机的位置,以避免停留在玩家和目标之间。问题是:https://i.stack.imgur.com/WQ1PE.jpg

这就是我目前正在做的移动相机("自由摄像头"):

 if (freeCam) {
     transform.position = Vector3.Lerp(transform.position, camTarget.transform.position, speed);
     transform.rotation = Quaternion.Lerp(transform.rotation, camTarget.transform.rotation, speed);
 } else {
     // Lock cam
 }

camTarget是玩家的一个游戏对象。

玩家摄像头瞄准/锁定另一个对象

我现在了解了您的问题所在,并尝试解释解决方案。

假设玩家对象为PO,目标对象为TO,相机对象为CO。

因此,当你想实现这一点时,用相机视图始终跟踪目标对象,并将玩家对象保持在两者之间,你所要做的就是->

  1. CO需要在一个固定距离的轨道(轨道相机)中绕PO飞行
  2. 接下来创建一个从点TO到PO(CO轨道中心)的矢量
  3. 然后计算向量(TO|PO)与轨道的2个命中点。你现在有一个进入命中点ENP和一个退出命中点EXP
  4. 由于矢量总是有一个方向,如果保持从TO到PO的方向,EXP将始终是下一个点
  5. 将CO位置设置为EXP并查看to
  6. 对EXP应用与世界相对应的固定偏移。pvector始终位于PO上方
  7. [可选]如果存在曲面,请使用EXP对曲面进行碰撞检测。如果命中,请将EXP设置为碰撞检测点,并将PO render设置为false。一旦EXP不再与曲面冲突,就将PO渲染设置为true
  8. [可选]如果想实现始终有一个好的视角,而不是始终有一张好的视角看PO,取CO的前向向量的角度。如果是IV的四分之一(数学中角度的位置),你可以假设,你目前只看到PO,而不是to,因为相机正好位于PO之外,并通过PO向右看to。如果发生这种情况,请将PO render设置为false。一旦CO前向矢量角度为II-IV的四分之一,就将PO渲染设置为true

就是这样。我今晚会给你更多的深度代码,因为现在我正在工作。

也许你可以检查相机的位置是否在玩家和目标之间,然后将其旋转180º