unity摄像机跟随_游戏诞生之日05 - 功能篇 游戏中的演出:摄像机控制、分镜和时间轴...

这篇文章我们将尝试为游戏添加一段过场动画,研究游戏里演出的制作流程和注意事项。

第十四块拼图 - 摄像机控制

Unity官方讲解Cinemachine有一段很不错的教程,可以先看下这个教程。

Unity实现尼尔机械纪元运镜设计_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
a509c382b1d8c4e4454ba65c7982e3af.png

虚拟摄像机

Cinemachine的基础的是虚拟摄像机,一个假设这里有一台摄像机,实际不参与渲染的点。虚拟摄像机的两个基础功能是瞄准物体和跟随物体,可以选择不同的模式,默认为缓慢跟随模式,使镜头过渡更自然稳定。

f9cb8e14adaaa97d1f1f7a200979a23b.png
摄像机的区域划分

当处于缓动模式时,选中虚拟摄像机可以看到不同颜色的区域,让跟踪的物体始终保持在屏幕中的合适范围内。

自由视角相机

8c146bfa9da6fbbd5b796ea7c99ffc9c.png
自由视角相机

如果选择不同的移动方式,让摄像机围绕上中下三个不同圆形轨道旋转,就成为了FreeLookCamera。

c77c49fb589c8024031a6cd090cb1fa8.png
Cinemachine中的自由视角相机https://www.zhihu.com/video/1196556972911210496

摄影机移动轨道

Cinemachine组建中还能创建可编辑的轨道,轨道可以插入数个路径点,插值生成平滑的轨道。如果将摄像机在轨道上,就成了轨道摄像机。轨道摄像机可以手动选择跟随位置,也可以自动跟随。

例如在场景上空创建一条环形轨道,让摄像机在上持续移动,并且跟拍我的人物,就创建出一个无人机监控的视角。

a27e96acc8a346aefbbfd683e7f8e58f.png
Dolly Track轨道
8d494a84b7262cfb1af94ffffd32cc26.png
使用摄影机轨道创建无人机视角https://www.zhihu.com/video/1196755794446626816

次级虚拟相机管理

Unity还提供了一些组件来管理多个虚拟相机。例如ClearShot Camera,可以在几个摄像机里选择一个最合适的相机来进行拍摄。当人物被遮挡时自动切换能看到人物的相机。

da8bc1a21f94c758666bd0d99febd731.gif
ClearShot相机 被遮挡自动切换视角

第十四块拼图 - 摄像机控制 Cinemachine

  • 付出成本: 3
  • 上手难度: 2
  • 可控性: 7
  • 表现效果: 8
  • 性价比: 3.0

第十五块拼图 - 分镜怎么设计

本想设计一个简单的游戏过场动画,结果无从下手,于是转而学习了些基础的分镜头脚本设计。这里推荐这本《STORYBOARDING分镜头脚本设计》入门。

在设计分镜时,有些基础的概念是需要知道的:

  1. 镜头有不同的景别和拍摄角度,对应不同的用法。例如拍摄人物对话常用正反打的手法,表现一个宏大场景则常用远景镜头等,如果想表现某个场景,可以参考一下其他人是怎么进行表现的。
  2. 轴线原则,不要越过表演轴线。拍摄时会假定在场景中有一条虚拟的轴线,往往是两个人的连线或是视线的方向。拍摄在轴线的一侧进行切换可以保持不同镜头之间的连贯性。如果越过轴线进行拍摄被称为越轴,毫无交代的越轴可能会打破观众的空间感,造成混乱。不过轴线不是绝对的,有几种技巧可以越过轴线而不造成混乱。
  3. 三分法原则。整个画面最吸引人目光的地方叫做兴趣点,新手往往会把兴趣点置于镜头正中,但这样构建出来的画面会缺乏张力。可以将兴趣点置于画面左1/3,右1/3,上1/3,下1/3四条连线的形成的四个交点附近,更容易构建一个戏剧化的画面。
  4. 利用分镜来暗示一些信息。例如利用高角度或低角度镜头可以暗示人物心理变化,用景别的差别拉近观众和角色的关系,利用画面的构图暗示稳定或不稳定,利用灯光渲染人物的情绪等。
  5. 保持节奏,只展示需要的片段,剔除无关紧要的细节。展示出的信息未必是越多越好的,仅仅展示重要的画面,利用画面切换来加快时间和空间的进程。这是利用了人脑会自动补全缺失信息的本能的小技巧,不仅能够合理控制叙事节奏,还能省略一些游戏中难以表现的镜头,降低开发难度。

在做一段过场动画前,可以用分镜稿的形式先设计一下过场动画的形式,画几张草图以确定场景、人物站位、镜头选择等。由于游戏渲染是实时的,进一步画更精细的成片可能是不必要的。就我的项目而言,由于场景和人物素材都有现成的,直接找角度会比较好找。

实际演示一下

b832521e9f7cf709998934d7e08b390b.png
在Unity中制作游戏过场动画https://www.zhihu.com/video/1196205544220921856

先放上最终效果视频。

6b15c8471b5c15638ef6fb40d86c45f8.png

首先一个远景作为定场镜头,交代几个人物和场景的位置关系。

4a1949e41ce6f0dd30479a8e6bb6a2e3.png

然后一个正反打,让观众看清两个人正在对话,这里故意把棕红色西装的人拍的更高,以突出他是另外两人的上司。

bacbb19310c6f348014396593a8439c8.png

利用摄像机变焦把视线引导到潜伏在汽车后的玩家身上。

d7df0c11eb1c88191d553fda80d71fc6.png

玩家冲出来和敌人产生对峙,镜头贴近角色制造紧张感。切镜时直接把三个敌人中的两个调整为面向玩家的姿势,这样就不需要三个不同的转身动作了。

2e01a246d5860641cb667c7b9bff6cfd.png

切换到最后的游戏视角,切镜头的同时将时间轴做动画的AI切换成在游戏中受控制的角色。

第十五块拼图 - 分镜 分镜头脚本设计

  • 付出成本: 2
  • 上手难度: 4
  • 可控性: 8
  • 表现效果: 7
  • 性价比: 2.5

第十六块拼图 - 时间轴

Unity的Timeline系统是用于编辑时间相关资产的编辑器,相较于动画系统,时间轴的控制更为顶层一些。熟悉非线性视频编辑软件的同学应该对这种界面比较熟悉,时间轴将能够播放的动画或是音频,特效以及命令等显示为轨道上的一个个片段,并能够对片段进行混合插值。我们只需要注意各个片段的时间顺序,混合情况,并能非线性地进行预览及编辑,对于过场动画的编辑而言非常友好。

这里推荐《Unity中用Timeline实现动画特写》上下两篇文章,可以参考里面的步骤来进行动画调整,模型位置的对齐。

时间轴默认提供了几种基础轨道,除此之外商店还提供额外的Default Playables,Cinemachine插件也提供了摄像机控制的轨道,对于项目而言已经够用。如果有特殊需求还可以自己添加自定义轨道,可控性很强,这里就不再敖述。

244a71aa3388902479a6b8a9396fba5d.png
Unity Timeline的一些轨道

过场动画时间轴

制作过场动画的顺序:

  1. 确定人物和场景的大概的位置关系,以及活动区域。
  2. 确定镜头位置和时长,确保镜头切换流畅。
  3. 进一步精细设置人物动画。

1d52ffc0e4ef0704b8fd4b329c15dcd5.png
过场动画时间轴

2f5d8cdff3283e8dd4588783ee155fc2.png
摄像机时间轴

过场动画中使用了多个虚拟摄像机,如上图,包含斜线的片段是混合插值了两个相机片段来实现平滑的动画。

f04326e30dabeb0558a751819b967a9f.png
图片透明度动画

使用Screen Fader Tracker实现了场景由黑幕逐渐出现的动画。

cf2ffc3d0299544597319cd2c88a569b.png
人物动画时间轴

人物动画轨道可以直接使用AnimationClip进行混合。

df4a131383142880f4f05ef0f63ca620.png
人物切换时间轴

使用Activation轨道切换了做动画的模型和实际控制的模型,从最终效果上看虽然简单但是有效。

第十六块拼图 - 时间轴 Timeline

  • 付出成本: 4
  • 上手难度: 3
  • 可控性: 7
  • 表现效果: 7
  • 性价比: 2.0

fad546929a58ed7de06f59da772d2640.png
思维导图

下一章打算开始研究游戏策划,敬请期待。

这一系列文章将会收藏于专栏之中,希望大家多多支持。

游戏诞生之日 - 游戏开发流程研究​zhuanlan.zhihu.com
89a14094333410ff8cff2c5b23b5547c.png

只要对游戏开发有兴趣,欢迎加入交流群 Unity游戏开发流程研究 479984340

<think>好的,用户现在问的是如何在Unity展厅系统中实现自动漫游的交互按钮。之前他们问过手动自动漫游的操作步骤,现在可能想进一步扩展功能,让用户通过按钮触发自动漫游。 首先,我需要回忆之前提供的自动漫游方案,比如Cinemachine路径Timeline时间轴。用户可能已经按照之前的步骤设置了自动漫游,现在需要添加交互按钮来触发它。 接下来,用户的需求可能是在展厅中放置按钮,当用户点击按钮时,启动自动漫游,比如播放预设的导览路径。需要确保整个过程不需要编写代码,完全可视化操作。 需要考虑Unity的可视化工具,比如UI按钮、事件系统、Animator或Timeline的触发机制。可能需要使用UnityEvent来连接按钮的点击事件自动漫游组件的播放功能。 然后,步骤可能包括:创建UI按钮,设置按钮的事件触发,将按钮的点击事件绑定到Timeline或Cinemachine组件的播放方法。同时,可能需要处理摄像机切换,确保自动漫游开始时禁用手动控制,结束后恢复。 还需要考虑用户可能遇到的问题,比如如何在不写代码的情况下调用Play方法,这时候可以使用Animator的状态切换或者Timeline的Playable Director组件,通过UnityEvent来触发。 另外,用户可能需要优化体验,比如按钮的显隐逻辑、镜头平滑过渡,或者多个自动漫游路径的切换。这时候可以建议使用激活不同游戏对象或Timeline轨道来实现。 最后,确保回答结构清晰,分步骤说明,使用用户之前熟悉的术语,如Timeline、Cinemachine,同时强调零代码操作,保持与之前回答的一致性。</think>以下是Unity展厅系统中**自动漫游交互按钮**的**零代码实现全流程**,包含3种实用方案: --- ### 📌 方案一:Timeline+Button基础版 #### **步骤1:创建自动漫游时间轴** 1. 新建空物体命名为`AutoCamera` → 添加`Playable Director`组件 2. 打开Timeline窗口 → 创建新动画轨道 → 录制摄像机移动路径(5-7个关键帧) #### **步骤2:设置UI触发按钮** 1. 菜单栏选择:`GameObject > UI > Button` → 重命名为`StartTour` 2. 在按钮事件面板: - 拖动`AutoCamera`物体到事件槽 - 选择函数:`PlayableDirector.Play()` #### **参数优化技巧**: ```text Transition Time: 1.5 // 镜头切换过渡时间(在Playable Director组件中设置) Pause On Start: ☑️ // 勾选后需要手动点击按钮才会启动 ``` --- ### 🎮 方案二:Cinemachine路径+触发器进阶版 #### **步骤1:配置路径漫游系统** 1. 使用`Cinemachine Dolly Track`创建闭合游览路径 2. 设置虚拟相机参数: ```text Path Position: 0 → 1(对应起点到终点) Speed: 0 // 初始速度为0 ``` #### **步骤2:制作物理交互按钮** 1. 在展厅内放置3D物体(如展台) → 添加`Box Collider`并勾选`Is Trigger` 2. 添加事件响应组件: - 选择物体 → `Add Component > Event Trigger` - 添加`OnPointerClick`事件 → 绑定函数: ```text CinemachineDollyCart.Speed = 2.5 FirstPersonController.SetActive(false) ``` #### **特效联动**: - 按钮按下时播放粒子特效:在事件中串联`ParticleSystem.Play()` - 添加音效:拖拽音频文件到`AudioSource.Play()`事件 --- ### ⚡ 方案三:可视化脚本终极方案(无需代码) #### **使用Bolt可视化编程**: 1. 安装Bolt插件:`Window > Asset Store` → 搜索"Bolt" → 导入 2. 创建新流程图: ```mermaid graph LR A[Button点击] --> B{条件检测} B -->|玩家在触发区域| C[暂停手动控制器] C --> D[启动Cinemachine路径移动] D --> E[播放讲解音频] E --> F{到达终点?} F -->|是| G[恢复手动控制] ``` #### **关键节点设置**: 1. 在`Super Unit`中拖入`FirstPersonController` 2. 用`Set Variable`节点修改`isActive`属性 3. 用`Invoke Method`调用`CinemachineDollyCart.ChangeSpeed()` --- ### 📊 方案对比表 | 特性 | Timeline方案 | Cinemachine方案 | Bolt方案 | |---------------|--------------|------------------|----------| | **操作复杂度** | ★★☆☆☆ | ★★★☆☆ | ★★★★☆ | | **可定制性** | 固定路线 | 动态速度控制 | 全自由逻辑 | | **适用场景** | 线性导览 | 开放式展厅 | 复杂交互 | | **性能消耗** | 低 | 中 | 较高 | --- ### 🔧 常见问题排查 1. **按钮点击无反应**: - 检查EventSystem是否存在:`Hierarchy面板右键 > UI > Event System` - 确认Canvas渲染模式为`Screen Space - Overlay` 2. **镜头切换卡顿**: - 在Camera组件启用`Allow HDR``MSAA` - 添加过渡动画:`CinemachineBlender`设置混合时间 3. **自动漫游结束后控制权未恢复**: - 在Timeline结尾添加事件:`Animation Event调用SetActive(true)` - 使用`CinemachineBrain`的`Custom Blends`配置退出过渡 --- ### 🚀 高阶技巧 **多语言导览系统集成**: 1. 创建多个Timeline轨道对应不同语种 2. 用Dropdown UI组件选择语言 3. 通过`Active Track`切换播放轨道 **VR设备适配**: 1. 导入XR Interaction Toolkit 2. 将按钮替换为`XR Simple Interactable` 3. 用`Haptic Feedback`组件添加手柄震动反馈 **数据埋点统计**: 1. 添加`AnalyticsEventTracker`组件到按钮 2. 自定义事件参数: ```text EventName: "AutoTour_Start" Parameters: { "展区编号": "A-12" } ``` 全程可通过Unity Editor可视化操作完成,无需编写任何C#代码!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值