玩家相机瞄准/锁定另一个对象

时间:2015-11-23 08:19:45

标签: c# unity3d

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

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

这就是我目前正在做的移动相机(“自由凸轮”):

 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是玩家的游戏对象。

1 个答案:

答案 0 :(得分:0)

我现在明白你的问题是什么,并尝试解释解决方案。

假设您将玩家对象作为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. 将一个固定偏移量应用于与world.upvector对应的EXP,以始终位于PO上方。
  7. [可选]如果存在表面,则使用EXP对表面进行碰撞检测。如果命中,则将EXP设置为碰撞检测点,并将PO渲染设置为false。一旦EXP不再与曲面集PO渲染到真,就会碰撞。
  8. [可选]如果要实现始终拥有良好的视图,而不是总是好好看看PO,请采用CO的前向矢量的角度。如果是IV的四分之一(数学中角度的位置)你可以假设,你当前只是看到了PO而不是TO,因为相机正好位于PO之外,并且通过PO向右看。如果发生这种情况,请将PO渲染设置为false一旦CO前向矢量角度为四分之一IV-IV,则设置PO渲染为真。
  9. 就是这样。我今晚会尝试给你更深入的代码,因为现在我正在工作。