大多数浏览器和
Developer App 均支持流媒体播放。
-
实践音频触感设计
敬请探索如何在 iPhone 上提供丰富的 app 体验,如动画、声音和触感等。学习在 Core Haptics 框架内设计多模式体验的关键概念。我们将带您了解我们的示例应用 HapticRicochet,探索如何将触感和声音反馈的设计与关键互动时刻协调起来,并展示如何创造令人愉悦的神奇体验。为了充分了解本节内容,我们建议先观看 WWDC19 的“通过 Core Haptics 扩展感官体验”,并查看 HapticBounce 示例项目 (需要 Xcode、iPhone 8 或更新版本,并需要了解 Swift 的基本信息)。熟悉 Core Haptics 会有帮助,但并非强制要求。
资源
- Core Haptics
- Delivering Rich App Experiences with Haptics
- Human Interface Guidelines: Playing haptics
相关视频
WWDC22
WWDC21
WWDC19
-
下载
嗨 我是卡米尔穆塞特 我是Apple设计团队的设计师 这一节 我会向你示范 一些实际步骤和设计考量 让你在App添加音频和触觉反馈 一直以来 对于设计师或工程师来说 为用户提供丰富的App体验 都是一项相当大的挑战 当中包括动画、声音和触觉 利用iPhone上的Core Haptics 我们现在更容易创建 视觉、声音和触感像真的神奇时刻 为了解释和练习这些技能 我会使用一个iOS App 这个App源自之前 一个名为“触觉回弹”的 代码示例项目 这个App添加了一些功能 让它更像一个迷你游戏 并提供一个画布 让你设计图像 声音和触觉 带给你全面的体验 新的示例项目称为“触觉跳弹”
这个项目关于一个像真的球 在iPhone画面上来回滚动 这取决于iPhone倾侧的方向 球在手机画面之内滚动和弹跳 并产生音频和触觉反馈 就像现实世界中那样 当你轻点这个球… 它便会变大 当你再次轻点 球的外层会添加一个防护罩 随着每次撞击 防护罩会受到破坏和耗损 最终球会爆裂和消失
我们还在背景添加了纹理 让你通过轻点背景上任何一点 启用或关闭纹理 这一节 我会集中讨论两个机制: 添加保护罩和启用滚动纹理 在进一步讲解之前 让我们回顾一下议程 我会先讲解一下 主要的音频和触觉设计原则 这些原则适用于Apple 接下来 我会简单介绍Core Haptics 这是一个支持多模式反馈的框架
这一节主要的部分会探讨 使用Xcode的“触觉跳弹”项目 看看我们如何添加、设计和改善 保护罩和滚动纹理的回馈体验 设计多模式体验具有相当挑战性 但如果做得好 我们的用户体验也会大大提升 这是个神奇、令人愉快 和恰到好处的体验 其中一个例子是 iOS 中的“手电筒”按钮 它结合了视觉动画、声音和触觉反馈 提供清晰、精准和简洁的完整体验 这是一个迭代和创造性的过程 当中涉及设计和工程成果 通常这是触觉体验 而不是听觉感受 但为了在这里向你示范 我们将这些触觉体验转化为声效 让你在这段视频中通过声音去感受 为了让你得到神奇 和令人愉悦的App体验 以下是指导项目的三个原则 我们团队觉得很有效 希望对你也有帮助 当中包括因果关系 和谐和实用
有用的反馈 可以让我们清楚看见原因 关键在于让反馈的来源或原因 显得清晰和明显 最简单的获取反馈方式便是 让球撞击手机的边框 每次撞击会产生相应的 声音和触觉效果 类似地 触觉滚动纹理 只会出现于背景图像显示的时候 这种感官体验由网格产生 我们的第二个原则是和谐 若要提升我们的感官体验 连贯性和一致性很重要 结合起来才可以创建一种特定的体验 这种体验应该与外观和声音保持一致 一个小的球 无论感觉起来或听起来都比较轻 而一个大的球 听起来或感觉起来也比较重 好像它有真实的重量 我们的第三个原则是实用 这关于为你的App体验 提供明确的价值 添加反馈需要言之有物 否则便会变得过度和令人不快 因应重要时刻 为你的App设定触觉和音频反馈 例如球的体积增长 接下来 让我们重温一下Core Haptics Core Haptics是在 iPhone和iOS应用的科技 让你设计App内的定制触觉 和音频反馈 这是一个功能强大的 API 围绕四个基本元素:引擎、播放器 模式和事件 让我们简要地重温一下 引擎是最高级别的元素 那是我们与手机连接的实体执行器 然后是播放器 用于回放控制 如开始、停止和暂停 还有模式和事件 模式是指一段时间内事件的集合 事件是用于特定体验的构建基块 事件有许多类型 最常见的是短暂和连续的事件 以下是一个具体示例 示范何为由事件组成的模式 我正在使用快速浏览可视化器 以便在MacOS上查看触觉模式 这详列于“an.ahap”档案 “AHAP”代表Apple触觉音频模式 让我们再看一遍 在Finder中选取“an.ahap”档案 然后按下键盘上的空格键
让我们详细看看模式包含的项目 显示为蓝色的第一个事件是 瞬态事件 显示为橙色的第二个事件是连续事件
该模式使用JSON语法 瞬态事件由此代码创建
这总结了我们对Core Haptics的概述 如果你想认识多一点 可以查看在线文档 这一节的实际例子 会集中探讨加载、更改和播放模式 以下将会讨论Xcode和触觉跳弹 从触觉跳弹启动文件夹打开项目 确保你可以在iPhone上 编译和运行该项目 模拟器不适用于触觉反馈 你需要一部实体iPhone 8 或更新机型才得到触感体验 确认电话没有调至静音 并且调高音量 我们会使用观看控制器档案 以及.ahap、.wav 和 .png 涵盖数据文件 确保你熟悉 这个游戏和它所有的互动功能 你可以轻点球 轻点背景 并随意倾侧手机 再来让我们看看 保护罩是怎样变出来的 我会使用和谐原理来解释 保护罩时刻 并看看设计细节 在图像方面 我们有一个动画 持续时间为五百毫秒 在右上角看起来像这样
在触觉方面 我们要突出 状态的更新变化 在音频方面 我们想要传达 能量的增强 以及具有强大保护力的结束状态
在这个例子 我们创建了两个不同的涵盖数据 传达不同的品质 我们会看看哪个更有效 用于保护罩体验 但首先 让我们看看如何加载 和播放保护罩的反馈
以功能而言 代码分为两部分 我们首先初始化构建基块 然后是播放和执行保护罩变换的函数
在“initializeShieldHaptics”这个函数 我首先会从“ShieldTransient”档案 创建一个模式 然后使用该模式 创建一个保护罩播放器
此时反馈已准备就绪
这个保护罩函数会被调用 当变换功能准备执行 触觉和音频反馈的播放 是通过在保护罩播放器上 调用“startPlayer” 这个函数很好用 我们在项目中会经常用到 然后 播放视觉动画
现在让我们看看 “ShieldTransient”涵盖数据 它定义了我们对于 触觉和音频反馈的体验 触觉体验应该是这样的 而音频听起来像这样 我喜欢这个声音 让这个球更有活力 也增加了保护性 让我们再听一遍 问题是触觉和声音 两者并不协调 触觉体验由三个短暂元素组成… 而音频是连续的和渐进的 两种感觉并不协调 让我们看看另一个涵盖数据 这称为“ShieldContinuous” 它会产生一个连续增强的触觉体验 以及摇摆不定和渐弱的音频 这次我也感觉到和听到 触觉和音频不太配合 但我喜欢这种触觉体验 感觉这是个不错的变换 表达出添加了一个保护罩 让我们再听听这个触觉反馈 我打算使用连续的触觉模式 配合第一个涵盖数据的声音
我会使用这两个涵盖数据 并从第一个模式选取我喜欢的音频 并在第二个连续的触觉模式中使用它
看看我在这个例子如何做
首先 我在文本编辑器 打开“ShieldContinuous.ahap”档案 然后滚动到档案末端 在这个事件中 你会看到我们指定的音频档 与触觉体验一起播放
它使用的是 “EventType AudioCustom” 加上文件名 作为音频档案 你可以指定和调整音量 通过使用参数值
要使用所选音频 我将档案参考从“ShieldB.wav” 改为“ShieldA.wav”
经修改后 涵盖数据会如下所示 触觉... 和音频是连贯的 两者互相支持和加强 让我们来听听综合音频和触觉的反馈 最后要修改的是 使用我刚刚创建的最后涵盖数据 回到“InitializeShieldHaptics”函数 这次我们不使用“ShieldTransient” 而是指定和加载 “ShieldContinuous”档案
现在 大功告成了 现在便可以在设备上编译和运行 我们得到一个感觉和谐的保护罩变换 感觉真不错 触觉、音频和视觉体验都互相配合 为这个球添加了一个保护罩 接下来 我会重温一下如何 在App上添加滚动纹理
开始时 “触觉跳弹”没有滚动纹理 只是与墙壁碰撞 当我轻点背景 就会出现圆点纹理 我得到了额外的触觉反馈 感觉到球滚来滚去 接下来 我们会遇到两个问题 让我们一起解决 其中一个是技术问题 另一个关于体验设计
在“initializeTextureHaptics”函数中 首先 我从纹理ahap文件中 创建一个图案 之后 我使用该模式 创建一个保护罩播放器 函数“updateTexturePlayer” 会出现在所有执行纹理的视频帧 我们用它来更新触觉的强度 根据球的速度 让我们看看结果 我留意到一个问题 就是纹理在几秒后消失了 我知道为什么会这样 有一个简单的方法可以解决这个问题 问题是“.ahap”档案中的纹理 只有两秒的触觉内容 有个方法可以改善这个问题 可以让它持续地播放 模式播放器的进阶变量 提供了额外的功能 例如暂停、恢复和其他回调函数 在“触觉跳弹”中 我会用高级的 模式播放器来执行循环功能 让我们来看看这个变化 我首先改变纹理播放器的宣告 修改为 “CHHapticAdvancedPatternPlayer!” 类型 然后我会使用相同的纹理档案 但这次会创建一个高级播放器 我现在可以在上面启动循环播放 而其余代码保持不变 让我们看看结果 这次滚动纹理循环播放 没有明显的停顿或跳接 我要解决的第二个问题 是关于纹理的外观和感觉 我们看到这里的触觉模式 涵盖数据非常密集 在两秒内有近一百项条目 这里的图像背景纹理非常粗糙 只有几个圆点 我想改善这个体验 如果圆点图案更密集 感觉会更真实
我会更改源档案 背景图像会用这个档案的完善版本 如果我运行这个App 将会使用更密集的新纹理 让我们来看看
如果你遇到任何问题 我们已将这个项目的最终版本 放在“HapticRicochet-Final”文件夹 以供浏览 当中包含我们这一节作出的所有改动 现在你可以在iPhone上 编译和感受以上体验 由你自由发挥 设计自己的触觉体验 我邀请你探索一下游戏中 其他变换体验 并尝试设计你自己的 全新的触觉和声音反馈 回顾一下 我介绍了音频和触觉体验 的设计原则 让你可以在App上 设计出色的多模式体验 我们重温了Core Haptics的基础知识 如何在iOS添加定制反馈的API 我示范了如何在“触觉跳弹”项目 应用以上原则 并集中讨论保护罩和滚动纹理机制 如果你想获得更多信息和资源 可参阅Human Interface Guidelines 开发者指南 最后 你可以重温 WWDC 2019视频 当中包括Core Haptics的发布信息 谢谢观看 [打击乐]
-
-
8:05 - Shield
// Initialize shield. func initializeShieldHaptics() { // Create a pattern from the shield asset. let pattern = createPatternFromAHAP("ShieldTransient")! // Create a player from the shield pattern. shieldPlayer = try? engine.makePlayer(with: pattern) } / Play shield transformation. func shield() { // … // start player for haptics and audio. startPlayer(shieldPlayer) // Play shield animation isAnimating = true sphereView.layer.add(shieldAnimation, forKey: "Width") // … }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。