我正在开发一款使用第三人称视角、角色集中的游戏,这没有问题。但是我找不到一种方法来“锁定”另一个对象,同时保持我的角色在视野中(火箭联盟球形摄像机: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 是玩家的游戏对象。
最佳答案
我现在明白你的问题是什么,并尝试解释解决方案。
假设玩家对象为 PO,目标对象为 TO,相机对象为 CO。
因此,当您想要实现时,始终跟随目标对象的相机 View 并将播放器对象保持在两者之间,所有您需要做的 ->
- CO 需要在固定距离的轨道(轨道相机)中绕 PO 行进。
- 接下来创建一个从点 TO 到 PO(CO 轨道中心)的向量
- 然后用轨道计算矢量 (TO|PO) 的 2 个命中点。您现在有一个进入生命点 ENP 和一个退出生命点 EXP。
- 因为向量始终有一个方向,所以如果您保持从 TO 到 PO 的方向,则 EXP 将始终是更远的点。
- 将 CO 位置设置为 EXP 并查看 TO
- 对与 world.upvector 相对应的 EXP 应用固定偏移量,以始终位于 PO 之上。
- [可选] 如果表面存在,用 EXP 对表面进行碰撞检测。如果命中,将 EXP 设置为碰撞检测点,并将 PO 渲染设置为 false。一旦 EXP 不再与表面发生碰撞,将 PO 渲染设置为 true。
- [optional] 如果想要始终保持良好的视野而不是始终良好地观察 PO,请取 CO 的前向矢量的角度。如果它是 IV 的四分之一(数学中角度的位置)你可以假设,你目前只看到 PO 而不是 TO,因为相机正好位于 PO 之外,并通过 PO 向 TO 看。如果发生这种情况,请将 PO 渲染设置为 false。一旦 CO 前向矢量角为四分之一 II-IV,就将 PO 渲染设置为真。
就是这样。今晚我会尽量给你更深入的代码,因为现在我在工作。
关于c# - 玩家相机瞄准/锁定另一个物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866344/