大多数浏览器和
Developer App 均支持流媒体播放。
-
通过 Core Haptics 扩展感知体验
借助 Core Haptics,您可以设计属于自己的附带同步音频的 iPhone 触感体验。在这个包含两个部分的讲座中,了解基本的声音与触感设计原则和概念,从而打造调动更多人类感官的、有意义且令人愉悦的体验。探索如何在您的 app 或游戏中通过触感引擎结合视觉、听觉和触感,来增添更胜以往的逼真感并改进反馈。了解如何创建和播放内容,以及 Core Haptics 如何与其他音频和触感 API 搭配使用。
资源
- Apple Design Site
- Core Haptics
- Human Interface Guidelines: Playing haptics
- Playing a Custom Haptic Pattern from a File
- Playing Collision-Based Haptic Patterns
- SwiftShot: Creating a Game for Augmented Reality
- Updating Continuous and Transient Haptic Parameters in Real Time
- 演示幻灯片 (PDF)
相关视频
WWDC20
WWDC19
WWDC17
-
下载
(设计音频力触觉体验) 欢迎大家参加我们的演讲
声音一直以来都是创建真正优秀的 app的一个非常重要的部分 无论是给游戏创建 空气声床 还是把用户的注意力吸引到 重要的警告或通知上 力触觉的出现 给这种体验添加了一种 全新的维度——触摸 今天的演讲分为两个部分 设计和开发 首先我要向大家介绍 Hugo和Camille 他们会上台来跟大家讲关于 给app设计优秀的力触觉体验的 深刻见解和指导
我相信你们一定很熟悉那个声音 多年来它一直是我们生活的一部分 但在2019年 我认为我们可以做得更好 我是Camille Moussette Apple设计团队的交互设计师 我是Hugo Verweij 是设计团队的声音设计师
这场演讲是关于 设计优秀的音频力触觉体验 我们的目标是激发你的灵感 并让你们了解一些实用的想法 关于如何设计很棒的声音和力触觉 当声音和力触觉同时使用时 如果用的合适的话 可以把你的app带到一个新的维度
在接下来的30分钟内 我们要讲三件事 第一件 我们将介绍什么是 音频-力触觉体验
然后我们要了解三个指导原则 用于帮助你设计那些优秀的体验 最后我们要了解 不同的技术和实用技巧 让那些体验变得既优秀又引人注目
那么什么是音频-力触觉体验? 嗯 让我们先听一个声音
好的 让我们把音量调低点
如果我再把音量调低点会怎么样呢?
哇哦 音量太低了 我听不见它了 你知道的 我们的耳朵再也不能识别 这个声音了 但如果你把手指放在音响上 你会感觉到它在前后移动
我们设计了一个触觉引擎 专门播放这些低频率的声音 你只能感觉到它们 这是iPhone 它旁边是音响模块
来自触觉引擎的力触觉感觉 与来自音响的声音同步
结果就是我们称之为 音频-力触觉体验的体验 但力触觉感觉是要被感觉到的 因为我们要在舞台上、在屏幕上呈现 我们需要你们的帮助 想象一下感觉起来是什么样的 我们会尽我们所能像这样帮助你们 可视化力触觉
或像这样播放一个代表力触觉的声音
我们还将可视化时间线上的这些体验 Camille将在 快速力触觉设计入门中 告诉你们关于它们是如何实现的 更多信息
iOS 13引入了一个新API 用于设计你自己的自定义力触觉 它叫做Core Hapitcs
这个新API可以让你们开发人员们 在iPhone上完全使用触觉引擎
触觉引擎可以渲染许多不同的体验 并可以生成像这样的自定义震动 跟这个类似 它听起来和感觉起来就像这样:
那么正如你所看到的 我们使用了波形和声音来表达力触觉 正如Hugo所说的 你需要自己在脑海中 把这个想象成一种沉默体验 这应该被感觉到 而不是听到
我们可以播放这些连续的体验 我们还有更短、更紧凑的声音
是单一循环 我们把这种体验叫做 瞬时体验 非常短暂 感觉像是一个撞击声、一个打击声 或一个轻轻的敲打声
非常短暂 然后我们实际上可以进一步改善它 接着我们将使用基本形状 来代表不同模式的力触觉 我们的瞬时体验是一个简单的矩形 因为我们的触觉引擎 是专门用于力触觉的 我们可以用不同方式调整体验 首先我们可以调整强度或振幅
我们还可以让它感觉更圆润或柔和
在另一个极端 我们可以让它更精确和更利落 使用触觉引擎可以实现这种体验
最后 这就结束了我们对于力触觉设计 以及什么是Core Haptics API的 快速介绍 我们有一个你可以调节的强度 和另一个设计维度 力触觉锐度 你可以控制两种类型的事件 连续事件和瞬时事件
现在让我们看一下 我们今天要分享给你们的 三个指导准则
第一个是因果关系 然后是协调 最后是效用 这些概念或方法
我们在Apple的 所有工作中都用到了 我们认为它们也可以给你自己的 app体验提供帮助 对于其中每一个 我们都先了解概念 然后再通过例子解释 让我们开始吧
因果关系 因果关系是有用的反馈 必须明确表明是谁导致了因果关系
假如你是一名足球运动员正在踢球 踢球的体验是什么样的呢?
有一个明确的关系 在起因之间有个明确的关系 脚碰撞球 而结果是 冲击的声音和冲击的感觉 这种体验听起来和感觉到的感觉 由相交互的对象的品质决定 即鞋的材料和球的材料
然后是动作的力度 是狠狠的一脚还是温柔的一脚? 而环境 是体育场或足球场的声学效果 因为我们熟悉这些东西 如果我们使用一种完全不同的声音 是毫无意义的 让我们尝试一下 把它推到顶部
很奇怪 这样不行 当为你的体验设计声音时 考虑一下当你与一个物理对象 相交互时的 感觉和声音效果
举个例子 让我们看一下 Apple Pay确认功能 我们希望声音和力触觉能完美匹配 屏幕上的动画 即挑钩
我们从哪开始呢? 嗯 付款时你会想到哪种声音? 钱听起来是什么样的? 使用Apple Pay 付款时会发生哪些交互? 当然了 我们要看一下屏幕上的 挑钩动画
应该产生积极的感觉 就像确认交易成功一样
这里有一些声音的示例 可以用作这种确认的声音
这是第一个
这个声音令人愉悦 但听起来有点太欢快、太轻佻了 下一个声音与挑钩动画很相配
但我们感觉它的特征不太合适 有点太刺耳了 然后还有这个声音 这是我们最后选择的声音 你们都知道的 这个声音不是特别严肃 很明显是个确认的声音
好的 我们已经选好声音了 现在看看力触觉
我们的第一个想法是模拟声音的波形 因为它可以完美地匹配声音 但在做了一些试验之后 我们发现两次简单的轻触实际上 效果更好 我喜欢把这些看作是小作曲 我们有两种乐器 一种是你可以听到的 一种是你可以感觉到的 力触觉 它们不必总是播放同样的东西 但它们必须以同样的节奏播放 这是同时播放的效果 请注意较低的声音是力触觉
好的 然后这就是动画的最后体验 再一次 自己想象一下当你付款时 轻触的声音
接下来 让我们看第二个指导准则 协调 协调是关于看起来的感觉 听起来的感觉
在现实世界中
音频力触觉和视觉很自然地相协调 因为起因和结果有明确的关系
然而在数字世界中 我们必须手动完成这个工作 新体验是在加工处理过程中 创造出来的
输入和输出需要由你 开发者 进行特别设计 让我们从创建一个简单的可视化界面 开始
我们让一个简单的球体 下落并碰撞屏幕底部
接下来让我们添加音频反馈
现在我们选择了一个声音 响应物理影响或球体的跳动 这个声音要简短、精确和清晰 但我们还要根据撞击的速度调整振幅 现在让我们做一项额外的工作 引入第三种感觉 力触觉反馈
你们自己想象一下那种感觉 再一次 我们尝试 让球体撞击屏幕底部的声音 听起来和谐 因此我们选择了一个锐度很高的 瞬时事件 我们还调整了声音强度 以匹配弹起的速度 我们还没有完成
因为考虑三种感觉之间的同步性 非常重要
这就是产生魔力的地方 在这里你要想象一个真正的球与墙壁 发生了碰撞 这有一个例子 我们打破了这个规则 我们在视觉和其余的反馈之间 引入了延迟
很明显打破了协调 完全想象不到是一个真正弹跳的球 因此协调需要非常的谨慎和小心 但如果做得好的话 可以打造令人非常愉悦和神奇的体验
让我们从 交互、视觉、音频 和力触觉之间的概念 来看不同的协调 从品质和整体行为方面来看 不同的协调 看一下屏幕上的小绿点 我们会让它动起来 想象一下哪种音频 哪种力触觉可以与那个绿点相匹配
如果我们添加一种轻快的弹动 或不同的跳动
哪种音频 哪种力触觉 可以与这些视觉相匹配? 如果屏幕上有一个大对象呢? 听起来是不是不一样? 感觉起来是不是与一个小点不一样?
如果我们添加不同的动态行为 不同的能量级 一个紧迫的、跳动的点 确实能吸引注意力 可能需要一种不同的声音 不同的力触觉 最后是一种感觉平静 或像是心跳一样的声音 代表一种不同的反馈类型 考虑一下你尝试在你的app中 传达的速度、能量级 以及不同的品质 设计反馈是关于一致性和统一性
我要举例说明协调准则如何帮助我们 针对Apple Watch 设计声音和力触觉 我们都习惯用手机 并习惯手机的保守氛围 当Apple Watch 横空出世时 作为第一种使用触觉引擎的设备 它是第一种可以精确地同步 声音和力触觉的设备
现在对于Series 4 给表冠的旋转添加了力触觉 和一种非常微妙的声音
还记得Camille刚才描述过的 尖锐并精确的力触觉吗? 我们就给表冠使用了那种力触觉 但我们对它进行了调整 从而匹配表冠的小尺寸 因此力触觉感觉像是手指在触摸表冠 而不是手腕
对于声音 我们参观了传统的手表制作 从中获得灵感 我们听了并记录了 各种各样不同的手表的声音 其中有一些听起来非常引人注意 比如这个声音
然后现实世界中还有一些 其它的物理机械对象 拥有类似的声音 比如自行车轮毂
我们想找到一种声音 听起来自然就感觉 来自这样一台设备
我们在开始制作我们自己的声音之前 聆听了这些声音作为灵感来源
然后就有了这个结果 在你的手腕上 听起来很安静 就像是你所期待的手表 发出的声音一样
声音和力触觉之间的完美协调 打造了对机械表冠的想象
然后与这种机械的感觉相匹配 我们的动作团队修改了动画 从而当使用表冠时 能捕捉到它的声音和力触觉 让我们看一下
我要再播放一遍 请看表冠把力触觉可视化了
结果是一种精确的机械感觉 你所看到的与你所听到的完美协调
接下来我们看第三个指导准则效用 效用是仅当你可以提供明确的值 并有利于你的app体验时添加 音频和力触觉反馈 使用适度 不要仅仅因为你可以添加声音 和力触觉就进行添加 让我们看简单的ARKit app 我们做了该app用于阐述这个观点 在这个app中 我们在环境中 添加了一个虚拟计时器 交互依赖于那个虚拟计时器的距离 让我们先看一下视频
在这个app中 我们有目的地设计了音频 和力触觉反馈 用于补充AR交互 和用户体验的最重要的部分 这是指靠近计时器 或远离计时器 从而调整音频力触觉体验 三种感觉是连贯和统一的 我们避免其它声音效果或力触觉反馈 与app中的不同元素进行交互 或其它的次要交互
不添加声音和力触觉通常个好主意 因此 从识别你的app中 用于音频-力触觉反馈的可能的 位置开始 然后仅注意那些 能改善体验或表达重要信息的元素 然后 你是否尝试添加更多? 但也许不要这样做 那会让人感觉应接不暇 并减少非常重要的元素的分量
总结一下 这还是指导准则 我们讲了因果关系 讲了它如何帮助我们思考 是什么发出了声音 以及是什么导致了力触觉 关于协调 我们讲了声音、力触觉 和视觉 如何共同打造优秀的用户体验 以及效用 讲了如何从使用 你的app的人的视角 来看使用体验
接下来让我们看一些技术和使用技巧 我们可以和这三个指导准则一起使用 打造优秀的音频-力触觉体验
首先简单回顾一下 Core Haptics中可用的基元
我们有两个创建代码块供你使用 第一个叫做瞬时 它是尖锐、紧凑的力触觉体验 感觉像是轻触或轻击 第二个是连续的力触觉体验 随时间延伸 你可以指定持续时间 它可以持续多久
对于瞬时 有两个可用的设计层面 你可以自己控制 分别是力触觉强度和力触觉锐度 从而在较低的值时 创建一些更圆润或柔和的声音 在较高的值时创建一种更精确、 更机械化和更清脆的声音 强度会如预期的那样 改变体验的幅度
对于连续性 有两种类似的设计层面 分别是锐度和强度 我们可以创建更有机的 或像是隆隆声一样的体验 随时间延伸 或一种更精确、更机械化的声音 当锐度的值较高时
在Core Haptics API中 还有更多细节和功能 请一定查看在线文档
当设计声音时 请记住哪些可以最好地体现 这些力触觉 对于尖锐的瞬时 很可能一声尖锐的钟声就很好
但如果我们有一个更平滑的声音 使用那些同样的力触觉 很可能不是个好主意
对于类似这样的东西来说 一种连续的上下起伏的力触觉 很可能效果更好
但这些不是硬性规定 还有许多试验空间 有时候 你可能会发现 与你所认为的效果相反的效果 其实效果更好 Apple Watch 警告就是这种情况 听起来是这样的
对于这样一个声音 你可能想添加一个这样的力触觉 因为它们是完美搭配
但我们是否可以做的更好? 我们可以一直试验吗? 也许把它反过来并修改时间?
这创建了预期 通过增加力触觉 然后快速切断它并播放声音实现 有一个清晰的动作反应 声音的播放作为力触觉的答案
这对于Apple Watch 警告来说很不错
接下来有一系列连续事件是很常见的 用于表达体验的不同类型 在这个例子中 我们有四种瞬时事件 我们注意到 当我们把这个呈现给不同的人时 他们不一定感觉到第一个 第一个是幽灵力触觉
四次轻触的序列实际上仅报告为 三次轻触 这可能是一个问题或一个机会 我们可以使用这种幽灵效果 或完全无察觉的第一个声音 作为准备效应
让我们看一个例子 是watchOS上的 一个第三方警告 这是那些第三方通知的声音和力触觉
这是一个非常重要的通知 我们想确保用户明确地感知到了 并确认了 在这个例子中 我们使用了幽灵效果或准备效应 用于唤醒皮肤 并确保它已经完全准备好 感觉即将到来的力触觉 让我们听一下和感觉一下
在这个例子中 我们有明确地呈现和识别 我们的主要通知体验
接下来我们还可以在非常类似的 体验之间创建明显的差异
这是watchOS上 左侧导航提示的声音 听起来是这样的
通过我们的协调指导准则 我们最终得到了一个非常好的力触觉 与那个声音完美配对 我们有一系列的双击 听起来和感觉起来是这样的
如果我们看右侧导航提示 声音类似 但稍微有些不同
我们可以注意到左右导航之间 在音频上的些微不同 如果我们继续并遵守我们的协调准则 通过力触觉 我们最终将得到 模式完全相同的左右导航体验
在这个例子中 我们想添加力触觉 我们加倍了双击的力触觉 然后我们在左右导航之间创建了 真正的差异 让我们听一下并感觉一下这种体验
再一次 左右导航之间形成了差异 是一种非常类似的音频体验
目前为止 有许多工具可以用于 创建你自己的体验 我们想再给你们展示一个例子 来阐述我们的观点 这是Messages的 一个全屏效果
声音和力触觉 与动画完美同步 这是一个特别场合的一个 令人愉悦的时刻 让我们再看一次
如果你还没有尝试过 我鼓励你们在你自己的 iPhone上尝试一下 自己体验一下力触觉
除了我们分享的指导准则外 还有几点要考虑
当声音、力触觉和视觉相协调时 效果最好 你是动画设计师吗? 与声音或交互设计师一起合作 反之亦然 这是打造统一体验的最佳方式
想象一下第一次使用自己的app时
你希望它听起来或感觉起来怎么样? 然后想象又使用了许多许多次 你听到或感觉到这些东西是否仍然 对你有帮助? 或者你觉得不堪重负了?
请体验它 并剔除所有感觉不强烈的东西 或没用的东西
并且不要害怕试验 请试一试 原型 我们已经看到你们通过尝试新东西 而偶然得到的一些很棒的东西
我们期待看到、听到和感觉到 你在自己的app中所实现的效果
请参看这个URL获取更多信息 非常感谢
好的 谢谢Hugo和Camille 现在关于如何给app设计 力触觉体验 我们有个更好的想法 现在让我们了解一下如何使用 这些准则 以及如何在代码中实现它们 为此 Michael和Doug 将为我们介绍 如何利用新的 Core Haptic API 开始 我要介绍Michael上台来
晚上好 我是Michael Diu 我来自交互性力触觉团队 我很期待与你们分享 iOS 13中 关于力触觉的一些改进 让我们看一下进度安排
首先我们要了解可以在哪里使用 Core Haptics 它如何与其它音频和力触觉API 相适应
我们要讲API中的两组类 以及我们用于描述力触觉 和音频内容的 基本层面和描述符
我们要讲 开始播放那些内容的基本知识
然后我们要介绍动态参数 动态参数 是你在播放时间自定义力触觉模式的 一种方式 从而响应你的用户或app的行为
我们要探索一种表达、存储和共享 你的音频-力触觉内容的新方式 一种新的文件格式 我们把它叫做 Apple力触觉音频模式或AHAP 让我们开始吧
首先什么是 Core Haptics? 我们可以把它看作是 基于事件的音频和力触觉渲染API 或iPhone的 合成器
我们可以继续使用其它音频和力触觉 和反馈API 比如 AV Audio Player 和UIKit的UIFeedbackGenerator 可以与Core Haptics同时使用
你可能在想 我可以在哪些 iPhone上使用这些呢?
仅使用一个API和一种文件格式 我们就可以访问 许许多多配备触觉引擎的 iPhone 从iPhone 8开始 我们会替你实现 让你的力触觉模式 在所有这些产品上拥有相同的感觉 到这样的程度以至于你只需要使用 一种产品 就可以建立app原型并发布app
并且这些iPhone没有配备任何 旧的产品控制器 它们都配备了 Apple设计的触觉引擎 为你提供独一无二的能量组合 表达范围很广 无与伦比的精确度以及控制和细节
接下来我要讲你们可能已经开始使用 UIKit的FeedbackGenerated API 在iPhone上采用力触觉
Core Haptics 并不会替代这个API
在绝大多数情况下 你都希望继续使用 FeedbackGenerator 特别是用于UIKit控制 并希望给它添加力触觉 通过那个API 你可以表明你的事件的设计意图 无论是选择、影响或通知 你可以让其他人 让Apple 来开发一个用于表达它的词汇 混合正确的形态 比如音频、力触觉、动画 从而表达那个信息 我们也在iOS 13中 改进了这个API 请查看相关文档获取更多详情
相对而言 当你想设计自己的 声音和力触觉时 Core Haptics 是个不错的选择 通过它 你可以开发你自己的模式 并且你可以更准确地控制播放时间 从而可以与其它API同步 比如来自Core Animation的动画 或来自 AV Audio Engine的音效 你还拥有一组更丰富的 播放和调整控制 UIKit是建立在 Core Haptics之上的 因此两组API 共享同样的低延迟性能 设计你自己的力触觉模式 可能要花一些时间 但它可以让你实现一些 你不能实现的效果 并可以让你的app与众不同 因此这是一件值得考虑的事 接下来我要稍微讲一下音频功能
Core Haptics 还是一个音频API 可以让你与力触觉同步 紧密同步 播放短的、合成的或自定义的 波形音频 这种音频力触觉的二重性 对于许多Apple自己的 力触觉体验来说至关重要 比如iPhone 7中的 力触觉主页按钮
Series 4 Watch中的 力触觉表冠 和UIDatePicker 你看到的那些 用于选择日期、时间、警告 和日历的滚动轮 你可能并没有意识到 你甚至可能都没有注意到 这些体验中包含音频 但如果你一旦把音频隐藏起来 你就会意识到 它是体验中不可分割的一部分 因此现在你可以使用Core Haptics 在你自己的app中实现同样的效果 我想讲一下app的一些分类 特别是其中有一大类 你可能会考虑使用 Core Haptics 即游戏
想象一下我们正在赛道上 我们即将进入加速模式 想象一下
当你提交那个暴力消息时 考虑一下在你的app中使用同步的 力触觉和音频 从而产生那些震撼心灵的 爆炸和隆隆声 另一种不错的方式是模拟物理接触 从而让你的app感觉更逼真 想象一下网球游戏 你可能会有音频和力触觉成分 音频的音高 力触觉的强度 都会潜在地表达挥球速度有多快 或表达球落在球拍上的位置 距离中心位置有多远 并且你甚至可以控制 在击中球之后 球拍上的弦能产生多长时间的共鸣
考虑使用Core Haptics 的另一个类别 是增强现实app
如果你正在开发这个空间 你已经很熟悉与3D音频相配对的 高保真视觉效果的好处了 它们共同发挥作用 我们可以达到复现的下一个层级 通过考虑自定义力触觉反馈会如何 匹配我们的用户手势
或如何响应app、设备 和AR对象事件 比如移动设备或移动用户群
作为启发 今年我们通过使用力触觉 改进了Swish示例代码 根据你向后拉动投石器的速度 以及向后拉动手机的速度 你会感觉到当你向后拉动它时 所产生的张力 以及当你释放它时所产生的 令人满足的形式转换 我想给你们展示一段相关视频 我要使用音频来表现 你感觉到的那个力触觉 听起来是这样的
现在我们要同时使用它们 视觉和力触觉 没有常规的音频
这是我们如何 同时同步使用力触觉、声音和视觉 来改善我们的AR体验的一个例子 还有一些类别的app、游戏和AR 已经准备好使用力触觉 及与之相对应的声音来进行 创新性探索了 我确定你一定会想到很多很多
现在让我们看一下如何使用 Core Haptics 表达我们的内容
在Core Haptics中 只有两组类 分别是表示内容的类 以及表示内容播放的类
让我们先看一下内容类
Core Haptics中 基本不可见的内容元素 叫做CHHapticEvent 每个事件都有类型和时间 视情况需要 参数可以自定义自己的感觉
这些事件可以相互覆盖 当相互覆盖时它们就融合在一起了 所有事件都属于一种模式
接下来我要讲一下 我们可以使用的事件的类型
第一种类型叫做 HapticTransient 我把HapticTransient 看作是一个小木槌 它是一个敲击动作 它是瞬时的和短暂的 然后我们有两个连续类型 分别是HapticContinuous 和AudioContinuous 我认为 比如说 就像是弹奏弦乐器 比瞬时要长一些 它可以是 比如说 用作背景纹理 你可以使用许多调节旋钮 比如调节它的共振 最后我们有 AudioCustom类型 AudioCustom 正如我之前提到过的那样 你可以在这里提供你自己的音频 用于与力触觉同步播放 接下来让我们讲几个可选参数
第一个EventParameter 叫做HapticIntensity 它有一个音频模拟 音频音量 你很可能已经很熟悉它了 通过这个参数 从没有输出开始 随着你把旋钮从零一直调到一 你将得到系统的最大输出
我们的下一个参数叫做 HapticSharpness HapticSharpness 是一个新概念 没有相对应的物理模拟 也没有相对应的音频模拟
在这个世界中 我希望你 不要想象是在有感知的空间中前进 从值为零时的一种 非常圆润和有机的感觉 一直到值为一时的 更清脆和更精确的感觉 为了更进一步 我要使用来自 iOS 12的一些例子 锁屏上的手电筒按钮 是一个锐度很高的力触觉
而app切换器 那个向上滑动 是一个更圆润、锐度较低的力触觉
至于原因 为什么这两种体验是尖锐和不尖锐的 我推荐你参加我们的 音频-力触觉设计演讲
EventParameters 还有更多类型 比如应用到音频上的类型 比如捏合和拖拽 对于力触觉 我们还可以让你修改共振等等 但这两个:强度和锐度就足够 我们使用了
要开发那个动态范围 和精确的强度和锐度的感觉 我们有一段示例代码Palette 可以让你自己尝试一下这些体验 随着你的移动 随着你轻触或拖动手指 你可以访问锐度轴以及强度轴 随着你的操作 将实施相应的持续 或瞬时的力触觉 这将帮助你获得那种直观体验
这是对于我们可以在哪里使用 Core Haptics 以及如何指定我们的内容的介绍 现在我要邀请Doug Scott上台来 他是我们的Core Haptics架构师 他会帮助我们了解 Core Haptics 了解那些模式 并把Core Haptics 集成到我们的app中 请大家欢迎Doug
谢谢Michael 大家晚上好 今天能来到这里 我感到非常激动 我要与大家分享如何把 Core Haptics API整合到你的app中
在演示和深入查看代码之前 让我们了解一下 当你想播放力触觉模式时 你的app要遵循的基本步骤
第一个步骤是创建内容 因为这可以在任何时候实现 在你需要使用它之前实现 在这个例子中 我们在一个力触觉模式中加载了一个 NS字典 字典可能是我们存储在app中 作为资源的一部分 我们之后将了解到 我们也可以在播放模式之前 创建模式 如果它们需要发生交互变化 以响应app中的变化的话
下一个步骤是 创建力触觉引擎的一个实例 这应该是只要你的app 一知道它将使用力触觉时 就应该创建力触觉引擎的实例
接下来你要为力触觉模式创建一个 力触觉播放器 每个播放器都关联一个模式 和一个特定的力触觉引擎
启动力触觉引擎 告诉系统初始化音频和力触觉硬件 准备请求播放模式
当你的app想要播放模式时 就启动播放器 这可以通过两种方式实现 第一种 我们可以叫做立即方式 在最快的时刻 以最小的延迟 告诉系统你希望播放这个模式 第二种是预定方式 你上交一个绝对时间戳 告诉系统你想让这个事件 与某些其它系统同步 比如另一个音频播放器或游戏事件 或图形事件
如果你想了解模式何时完成播放 你可以在播放器完成时 让力触觉引擎通过回调通知你
在这里 引擎回调app 而app现在可以选择 停止力触觉引擎 或你可以打开下一个力触觉模式
这就是基本步骤 现在让我们看一个例子 是一个使用这种系统的一个app
在此之前 我们要告诉你一个秘密 演示API的使用会生成触觉反馈 呈现一个独特的问题 你们在观众席中感觉不到 我们的处理方式是给输出中的每一个 力触觉事件 都添加一个音频当量 那会让你听到力触觉的效果
这个app使用了 一个简单的物理引擎 在屏幕上移动球以响应加速度计
当球撞击屏幕边缘时 生成力触觉和音频反馈 用户有一种感觉到球撞击墙壁的感觉 并且也能听到撞击的声音 球撞击边缘的力度越大 力触觉的强度越大 音频的音量越大
好的 让我们看一下这个示例的代码 看看如何把 Core Haptics API 集成到你的app中 我们要了解如何使用EventParameters 来修改力触觉和音频 这个例子 所有代码都是从网站上的示例代码中 拿过来的 但我们稍微修改了一下 用于突出显示重点
首先我们导入了 Core Haptics模块 以及我们需要在app中使用的 其它模块
已声明 CHHapticEngine 是视图控制器的一个成员变量 因为我们希望能完全控制它 让它存在于在app的 整个生命周期中
正如在之前的流程图中所讨论的那样 在我们使用力触觉引擎之前 我们提前把它设置好 在这里 当视图加载完成后 我们调用helper方法
在helper方法中 我们先创建力触觉引擎的实例 并检查可能会发生的错误 引擎被分配给我们的成员变量 从而我们可以随时使用它
这是可选的 但非常有用 可以给引擎的已停止处理器属性 分配一个闭包 如果引擎由于某些操作而停止 而不是app要求引擎停止的话 将调用这个闭包 有些原因可能会导致这种情况 比如音频会话中断或app被挂起
我们通过启动力触觉引擎 并检查可能发生的错误 来完成这个方法 引擎将继续运行直到app 或某个可能的外在动作停止它
请注意 app追踪 引擎是否需要被重启 一般来说 当屏幕上有任意可见视图 且视图包含力触觉交互时 你可能会一直保持引擎运行
这是app中简单物理引擎 告诉我们球与墙壁发生碰撞的地方 在这个例子中 我们想生成我们的 力触觉和音频模式 用于交互性地追踪球的速度 因此在需要模式播放器及其模式时 就创建它们
这个方法用于创建要播放的模式 响应球的碰撞 在这里我们要创建两个事件的模式 一个是力触觉 一个是音频
我们创建HapticTransient 类型的力触觉事件 用于生成有效的感觉
我们要赋予它两个 EventParameters 这将根据球的速度配置事件的 锐度和强度 你已经听到过了
然后我们创建音频事件 音频类型是连续音频 使用一组EventParameters 用于音量和包络衰减 也根据球的速度进行计算 这里的持续参数 可以保证事件的强度 将一直缩减到零 而不是在整个事件长度中一直持续
我们创建一个包含这两个事件的模式 并在时间上同步
最后我们创建这个模式的模式播放器 并把它返回到这个层中 返回到响应碰撞的方法中 最后一步是 当CHHapticTimeImmediate时 启动模式播放器 那表明以最小延迟 尽快播放它
请注意app并没有一直持有 这个播放器的实例 它的模式保证了连续播放 直到完成 因此app可以轻松地启动它 然后就不需要再关注它了
这是使用在app的代码内 以编程方式创建的模式 播放内容的基本步骤 因为这个app是持续交互的 我们不会停止力触觉引擎 除非游戏屏幕已经不再可见了
现在让我们花点时间谈一谈 Core Haptics的 其中一个最强大的功能 动态参数
动态参数 可以让你增加或减少现有的 EventParameters值 对于它所播放的模式中 全部活跃的和即将到来的事件
动态参数按照你所提供的时间戳 起作用 你可以同时调整多个不同的参数 或使用任意的时间关系
当你创建你自己的模式时 你可以包含动态参数 或在播放时把动态参数实时 发送给播放器
这就可以让你使用单一模式 来产生无限数量的力触觉和音频变量 通过动态地调整模式实现
让我们看一个例子 在底部的这个图表中 我们有一个力触觉模式 使用了全部力触觉 EventIntensities 并都设置为它们的最大值 上半部分是 HapticTransients 下半部分是 HapticContinuous
我们想暂时缩减所有游戏的 力触觉强度 比如 如果某个角色在游戏中说话了
我要发送一个强度的动态参数 值为0.3 需要0.5秒生效 你可以看到它在那时 把事件的强度减少到了 未修改之前的三分之一
最后让我们看看创建模式的 另一种方式
即AHAP
Apple力触觉音频模式 是以基于文本的格式 描述Core Haptics Pattern 的一种规范 它是从嵌套的键值对中创建的 一旦你开始处理 构成Core Haptics API的类时 你一定会对它非常熟悉
它是广泛建立的 JSON文件格式的模式 意思是你已经有大量不同的框架 可以读写并编辑这些AHAP了 包括比如 Swift Codable Framework
AHAP使共享和编辑力触觉模式 变得很简单 因为它是一种所有开发人员 都能认同的格式
从外部AHAP文件中 加载力触觉模式 可以让你把内容与app代码分离开
使用滑动平台的魔力 我们可以在这里创建一个简单的 AHAP文件
从版本号字符串开始 那表明了这个模式 可以在哪个版本的系统上使用
接下来我们给模式添加键 那是一个字典数组
我们向模式数组中添加第一个 事件字典 这个事件有两个必需键值对 以秒为单位的时间表明相对于 模式的开始时间和事件类型 事件应该何时发生 这是一个HapticTransient事件 只要模式开启就开始
对于这个事件 我们要添加事件参数 仅会影响这一个事件 这些存储在它们自己的字典数组中
我们要添加一个EventParameter 控制事件的强度 并添加另一个EventParameter 控制它的锐度
我们可以以同样的方式添加 第二个事件 第二个事件的开始时间比第一个事件 推后0.5秒 并且是 HapticContinuous类型 对于 EventParameters 我们使用我们在第一个事件中 所使用的同一个EventParameters
HapticContinuous类型 和AudioContinuous类型的事件 除时间和事件类型外 还需要事件持续时间 这个持续时间值总是以秒为单位
这是我们刚刚所创建的模式的 可视化呈现 你可以看到两种时间类型 最开始的 HapticTransient 以及稍后的Continuous 以及它们相对的时间和持续时间 以及它们的强度和锐度参数值
这是对AHAP的快速介绍 这个图表是AHAP文件结构的概述 一个模式包含一个事件字典的数组 可选的动态参数 以及对参数曲线的选择性使用 参数曲线是动态参数的一个扩展 你可以从网站上获得更多信息 你可以在我们的演讲页面上 找到AHAP规范的完整链接
同时 在我们的演讲页面上 你可以找到一段代码示例 用于展示如何创建、加载和播放 由AHAP文件描述的模式 这个力触觉示例app 包含一系列模式 特别使用Core Haptics API 所可能拥有的 敏锐度、动态范围和音频力触觉同步
非常感谢大家 现在我要把舞台 交还给我的同事Michael
谢谢Doug 虽然我们今天讲了许多内容 但还有更多关于 Core Haptics的内容要了解 请查看在线引用文档获取更多详情
一旦你准备好并开始尝试 指定内容并播放内容 你很可能会思考 这些相连接的力触觉音频模式的 设计准则
你会思考 这些准则 这些用于声音设计的准则 是否能迁到力触觉设计中? 我应该注意哪些常见的陷阱? 好消息是我们的音频和力触觉 设计团队 数年来一直在做这项工作 他们已经在最新的人机界面指南 或叫做HIG中 提供了一些关于力触觉的建议和指导 并在今年的WWDC的这场演讲中 也给出了一些建议和指导 请参看
让我们快速回顾一下 今天我们讲了力触觉可以从哪些方面 帮助你 达到复现的下一层级 并让你的app在更轻松地进行交互 同时具有同步的和互补的 音频和力触觉 是一种特别有效的组合 但还没有API可以让你这样做 通过iOS 13 我们现在有必要的API 可以创建这些丰富的多模式的体验 我们有用于描述力触觉和音频事件的 词汇了 还有一个文件格式AHAP 我们有一种新的平台 API Core Haptics 用于低延迟和实时调整
我们结合了示例代码、示例模式、 设计指南和Apple的支持 最后你得到了非常好的观众 非常好的硬件 你可以感觉到你想要的那种力触觉 安装巨大的触觉引擎 可以给你提供最强大、 最有表现力的、最精准的力触觉硬件
请大家参加我们在周四和周五 举办的演讲 你可以在演讲上 查看我们今天所演示的这些 力触觉示例 并讨论你对于你的app的想法 你还可以从我们的演讲页面上 找到全部指导和引用
我知道你一定会通过在app中 创建和使用这些力触觉模式中 获得很多乐趣 我们几乎已经迫不及待地要看到 你们会做出什么样的成果 谢谢大家 晚安
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。