我正在开发一款使用第三人称视角的游戏,角色集中,没有问题。但是我无法找到一种方法来“锁定”另一个对象,同时又保持我的角色在视野中(火箭联赛球凸轮: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。

因此,当您要实现目标时,要始终遵循摄像机视图的目标对象并将播放器对象保持在它们之间,所有您需要做的->


CO需要在轨道(轨道摄像机)中以固定距离绕PO运行。
接下来,创建一个从点TO到PO(CO的中心)的向量
然后根据轨道计算向量的两个命中点(TO | PO)。现在,您有一个输入命中点ENP和一个出口命中点EXP。
从向量开始,总有一个方向,如果您保持从TO到PO的方向,则EXP将永远是另一个方向。
将CO位置设置为EXP并查看TO
对与world.upvector相对应的EXP应用固定的偏移量,使其始终位于PO之上。
[可选]如果存在表面,请使用EXP对表面进行碰撞检测。如果被击中,则将EXP设置为碰撞检测点,并将PO render设置为false。一旦EXP不再与曲面集PO碰撞为true时发生碰撞。
[可选]如果要始终保持对PO的好看而不是始终对PO的好看,请获取CO的正向矢量的角度。如果它是IV的四分之一I(数学上的角度位置),则可以假定,那么您当前只能看到PO而不是TO,因为摄像机位于PO的正上方,并通过PO直望TO。如果发生这种情况,请将PO render设置为false。一旦CO正向矢量角度为四分之一II-IV,将PO设为true。


而已。今晚我将尝试为您提供更深入的代码,因为现在我在工作。

关于c# - 播放器摄像机瞄准/锁定另一个对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33866344/

10-14 13:26