【问题标题】:Unity3D Cinemachine - How can I lock onto an enemy dark souls style?Unity3D Cinemachine - 如何锁定敌人的黑暗灵魂风格?
【发布时间】:2021-03-31 04:43:16
【问题描述】:

我正在 Unity 中进行一个小型实验项目,我想锁定一个敌人。通过使用 Cinemachine Free Look 相机,我的相机的行为类似于 Dark Souls 相机。现在我希望能够单击一个按钮并锁定敌人,类似于黑暗灵魂相机的工作原理,显示在this video。我还制作了一张图片来解释我在寻找什么。我希望玩家和敌人在锁定时都在屏幕的垂直中心,但我希望相机跟随玩家,同时基本上围绕敌人旋转。

我尝试将玩家和敌人都添加到目标组中,但它的行为不符合我的预期。当然,它会同时查看玩家和敌人,但不会像我试图在图像和视频中展示的那样让它们保持一致。

Image describing the goal

【问题讨论】:

  • 你已经尝试了什么?
  • @Ruzihm 我尝试将玩家和敌人都添加到目标组中,但这并没有按照我希望的方式对齐它们。我怀疑弄乱目标的重量和边距可能会给我想要的东西,但我不太确定如何。

标签: unity3d cinemachine


【解决方案1】:

对我来说,在视频中,摄像头似乎围绕着一个固定在播放器上的枢轴点(绿色)。然后摄像机指向玩家和选定敌人之间的确切中间位置(橙色点)。敌人跳跃时看起来也有一个最大角度。

使用我制作的代码快速验证概念。然而,代码实际上只是一个概念证明:

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;
    }
}

【讨论】:

  • 我认为这非常准确。一些代码会大大改善这个答案,但这是一个有用的部分答案,所以我给了它一个赞成票。关于如何定位绿色枢轴点有什么想法吗?
  • @Ruzihm 在做了一个简单的实现之后,我认为它看起来与我们在黑暗之魂中看到的非常接近。我最终使枢轴点跟随玩家上方,但使它落后了一点。这产生了一个很好的效果,看起来当玩家快速移动时相机需要做出反应。它没有尝试移动枢轴点,所以这可能会使它看起来更好。再加上一些修补,它看起来会很棒。
  • 太棒了!!但是,除非你让玩家立方体开始滚动,否则我不认为我可以相信这是一个真正的黑暗灵魂相机......(当然只是在开玩笑;])
  • 这正是我想要的!谢谢你。你认为有办法用cinemamachine做到这一点吗?或者我可以简单地将这个脚本与cinemamachine一起实现吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多