Unity3D Cinemachine - 如何锁定敌人的黑暗灵魂风格?
Unity3D Cinemachine - How can I lock onto an enemy dark souls style?
我正在 Unity 中进行一个小型实验项目,我想锁定一个敌人。通过使用 Cinemachine Free Look 相机,我的相机表现类似于 Dark Souls 相机。现在我希望能够单击一个按钮,并锁定敌人,类似于 this video 中显示的黑暗灵魂相机的工作方式。我还制作了一张图片来解释我在寻找什么。我希望玩家和敌人在锁定时都位于屏幕的垂直中心,但我希望相机跟随玩家,同时基本上围绕敌人旋转。
我尝试将玩家和敌人都添加到一个目标组中,但它的行为并不符合我的要求。当然,它会同时查看玩家和敌人,但不会像我在图像和视频中尝试显示的那样使它们保持对齐。
Image describing the goal
在我看来,在视频中,摄像机似乎围绕固定在播放器上的枢轴点(绿色)定位。然后摄像机指向玩家和选定敌人之间的确切中间位置(橙色点)。貌似还有敌人跳跃时的最大角度
用我编写的代码快速证明概念。然而,代码实际上只是一个概念证明:
public class CameraScript : MonoBehaviour
{
public Transform enemy;
public Transform player;
public float cameraSlack;
public float cameraDistance;
private Vector3 pivotPoint;
void Start()
{
pivotPoint = transform.position;
}
void Update()
{
Vector3 current = pivotPoint;
Vector3 target = player.transform.position + Vector3.up;
pivotPoint = Vector3.MoveTowards(current, target, Vector3.Distance(current, target) * cameraSlack);
transform.position = pivotPoint;
transform.LookAt((enemy.position + player.position) / 2);
transform.position -= transform.forward * cameraDistance;
}
}
我正在 Unity 中进行一个小型实验项目,我想锁定一个敌人。通过使用 Cinemachine Free Look 相机,我的相机表现类似于 Dark Souls 相机。现在我希望能够单击一个按钮,并锁定敌人,类似于 this video 中显示的黑暗灵魂相机的工作方式。我还制作了一张图片来解释我在寻找什么。我希望玩家和敌人在锁定时都位于屏幕的垂直中心,但我希望相机跟随玩家,同时基本上围绕敌人旋转。
我尝试将玩家和敌人都添加到一个目标组中,但它的行为并不符合我的要求。当然,它会同时查看玩家和敌人,但不会像我在图像和视频中尝试显示的那样使它们保持对齐。
Image describing the goal
在我看来,在视频中,摄像机似乎围绕固定在播放器上的枢轴点(绿色)定位。然后摄像机指向玩家和选定敌人之间的确切中间位置(橙色点)。貌似还有敌人跳跃时的最大角度
用我编写的代码快速证明概念。然而,代码实际上只是一个概念证明:
public class CameraScript : MonoBehaviour
{
public Transform enemy;
public Transform player;
public float cameraSlack;
public float cameraDistance;
private Vector3 pivotPoint;
void Start()
{
pivotPoint = transform.position;
}
void Update()
{
Vector3 current = pivotPoint;
Vector3 target = player.transform.position + Vector3.up;
pivotPoint = Vector3.MoveTowards(current, target, Vector3.Distance(current, target) * cameraSlack);
transform.position = pivotPoint;
transform.LookAt((enemy.position + player.position) / 2);
transform.position -= transform.forward * cameraDistance;
}
}