c# - 玩家相机瞄准/锁定另一个物体

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

最佳答案

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

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

因此,当您想要实现时,始终跟随目标对象的相机 View 并将播放器对象保持在两者之间,所有您需要做的 ->

  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 渲染设置为 true。
  8. [optional] 如果想要始终保持良好的视野而不是始终良好地观察 PO,请取 CO 的前向矢量的角度。如果它是 IV 的四分之一(数学中角度的位置)你可以假设,你目前只看到 PO 而不是 TO,因为相机正好位于 PO 之外,并通过 PO 向 TO 看。如果发生这种情况,请将 PO 渲染设置为 false。一旦 CO 前向矢量角为四分之一 II-IV,就将 PO 渲染设置为真。

就是这样。今晚我会尽量给你更深入的代码,因为现在我在工作。

关于c# - 玩家相机瞄准/锁定另一个物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866344/

相关文章:

c# - 如何使用 Windows 窗体单选按钮进行数据绑定(bind)?

c# - 如何循环 SQL 参数列表和 WHERE 子句?或者更有效地获得结果?

c# - cSharp 中的对象创建程序集

ios - 如何从 URL 方案中检索参数值

c# - 在运行时在 Unity 中解析具有超过 65k 个顶点的网格

unity3d - 更改默认场景网格颜色

c# - Firebase Unity 密码身份验证失败

c# - 为 .net5 项目创建单元测试

c# - MediaComposition.RenderToFileAsync 因许多静态图像而崩溃

c# - 初始化从单一行为派生的对象的最佳方法是什么?