【Unity】如何使用Cinemachine和C#制作交互式相机

1,012 阅读4分钟

虚拟摄像机可以通过脚本进行调整。您可以使用它通过将特定的摄像机视图附加到按键甚至创建游戏元素来简化测试。让我们看看如何通过 C# 使相机可交互!

目标:了解如何将Cinemachine的虚拟摄像机与C#一起使用,以及如何通过代码使用其组件。在此示例中,我们将了解如何更改相机的定位以瞄准不同的对象,以及在按下某个键时更改镜头的变焦。

目录

· 访问电影机·按键

· 更改相机目标

· 镜头放大

. 最后

通过脚本访问虚拟摄像机

Unity 中的大多数内容都可以通过包含正确的[命名空间]来访问。通过在脚本中添加 cinemachine 命名空间,您将可以访问其所有实用程序。

1m98ovN0kl_0bYGUqPncaSA.png

按键时更改相机目标

  1. 现在我们有了命名空间,我们可以访问虚拟摄像机。让我们声明我们的全局变量来标识这一点。这将是一个序列化字段,以便我们可以通过检查器分配它。

16hnsZXZvTtou17YLISdQpA.png 2. 让我们进入编程逻辑的主要部分。

  • 每当我们按下某个键时,我们都想更改相机的目标。

如果您一直关注,您就会知道虚拟摄像机有一个 “查看” 组件,可以使它们瞄准检查器中的给定对象。所以我们需要...

  • 通过代码访问“查看”组件。
  • 使用我们所需对象的转换。

我们将从对象开始,我们的新全局变量将解释这一点。

1ROxxby7stQQokc-IS8r_6A.png 3. 我们将添加的最后一个全局变量是一个布尔值,用于跟踪当前目标对象。

1s0FoQIoXWxdUh5msitQ9Og.png 由于此示例使用两个目标,因此我们可以通过仅检查其中一个来简化此操作,默认情况下,当第一个目标未处于活动状态时,我们知道第二个目标必须处于活动状态。别担心,我们稍后会看看这个:)

4. 为了保持整洁,让我们创建一个函数来处理 Look Look Look 组件的输入逻辑。

1DBLDobhsV2W8ZstWm2j8GQ.png 我知道这是一个块,但我们现在要分解它!

  • 如果按下 R 键,我们会检查第一个目标是否处于活动状态。输入检查将在更新功能中,所以现在不用担心。
  • 如果它处于活动状态,我们将获取 Look Look 组件并将其定向到 target1。
  • 然后我们反转布尔变量的值,以便我们可以在两者之间循环。这发生在两个 if 语句上。

注1:请记住,对象_是_转换,这就是为什么我们在这里使用它来标识对象。

注意2:如果您愿意,也可以在启动函数中获取Look At组件,但是仅在使用时获取此组件会更加优化。

  • 否则,如果 — 如果 target1 未处于活动状态,那么我们获取 Look Look 组件并将其定向到 target2。

5.好的,脚本剩下的就是在更新中使用我们的输入检查调用切换目标函数。

1-pGQsQfPY6X9zROj5Qf2Kw.png 6. 在检查器中分配相应的变量。我们通过在全局变量上使用 SerializeField 来提供这些字段。

1Vl6b8HfUYPeezdRWQc4atQ.gif 在某些情况下,您需要使用更复杂的结构,例如列表或数组,但此示例非常简单,可以坚持使用对象变量。

结果

当我按R键时,您可以看到对象之间的“看向/瞄准指示器”(黄色方块)开关。

1Uy37eXo1MmSSiOv_anzHSA.gif

镜头放大

149EQ9eYj4PoYrzK-awymZg.png 你也可以通过简单地修改我们的代码来做一些非常有趣的事情。让我们快速浏览一下!

如果我使用视野组件来更改按键的缩放比例,它将如下所示:

1hITzInMWint1kvIuw5DxSw.png

  • 我们将缩放(放大)减少 20 个单位。
  • 它存储在变量中,以便可以重用。
  • 我们检查FOV(视野)是否小于10,以便我们可以将其重置为开始时的状态(通过检查器将起始值设置为60)

1QYFHfqTwwya9mpVpqhEd0Q.png

最后

1JJICzpxFtDsIcktPzqIFZg.gif 我希望您发现这些有价值的信息!关注我以获取更多 Unity 开发文章!:)

博主属于自学型选手,如果你也是Unity初学者,欢迎加入我的群聊进行互助交流:618012892