ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
オーディオハプティックデザインの実践
iPhoneでアニメーション、サウンド、ハプティクスを含むリッチなApp体験を提供する方法を紹介します。Core Hapticsフレームワークでマルチモーダルな体験をデザインするためのキーコンセプトをお伝えします。サンプルのHapticRicochet Appでは、ハプティックとサウンドのフィードバックが重要なインタラクティブモーメントと調和するようデザインされており、不思議で楽しい体験を生み出す方法を解説します。 このセッションを最大限活かしていただくためには、事前に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
-
ダウンロード
こんにちは Camille Moussetteです Apple Designチームの デザイナーです このセッションでは Appに音声や 触覚フィードバックを 追加する実際の手順と デザイン上の注意点について 説明します 歴史的にアニメーションや 音声 および触覚を含む リッチなApp体験の提供は デザインと エンジニアリングの両面から 非常に困難でした iPhoneのCore Hapticsを 使えば 見たり 聞いたり 感じることができる 魔法のような瞬間を作れます 今回は説明と練習用に 以前のコードサンプル プロジェクトから派生した HapticBounceという iOS Appを使ってみます ビジュアルや音声 触覚がうまく 機能するようにデザインし 追加要素を 加えることで ゲームのようにしてみました この新デモはHaptic Ricochetと呼びます
HapticRicochetは iPhoneの中で 生まれたボールが iPhoneの 向きに応じて動き回ります ボールは物理的世界と 同じように転がり 携帯の端に当たると 音声と 触覚フィードバックを返します ボールをタップすると… ボールはより大きく 成長します もう一度タップすると シールドが追加されます シールドは壁に 跳ね返るごとに減っていき 最終的には ボールが消滅します
また背景の 好きな場所をタップして テクスチャを有効 または無効にできます 本セッションではシールドの追加と ゴロゴロとしたテクスチャの 有効化という2つの仕組みを 中心に話します 先に進む前に 内容を確認しましょう 最初に Appleで よく使われるオーディオと ハプティックデザインの 基本を確認します 次に リッチなマルチモード フィードバックを可能にする Core Hapticsフレーム ワークを 簡単に紹介します
そしてXcodeの HapticRicochet プロジェクトを検証し シールドと ローリングテクスチャの フィードバックを 追加 設計 改良する方法を 見ていきます マルチモードな体験を デザインすることは 困難ですが うまくできれば ユーザー体験は向上します 魔法のように 楽しく すべてがうまく行く感覚です iOSの懐中電灯ボタンが その例です ビジュアルアニメーション 音声 触覚フィードバックが 明確かつ簡潔で 統一感のある 体験を提供します デザインと技術的な努力を必要とする 反復的で創造的なプロセスです 本来は音ではなく 触覚で感じるものですが このデモでは触覚を 音に変換していますので 音声でご確認ください App体験の魔法と楽しさを 実現するために 作業の指針となる 3つの原則を紹介します これは社内でも 重宝されており 皆さんの お役に立てば幸いです その3つとは 因果関係 調和性 そして有用性です
フィードバックが有用であるためには それを発生させる要素や原因の 明確さが大切になってきます ボールが画面の端や境界に 当たった時 フィードバックを 発生するのが簡単な例です 衝突によりハプティクスが 発生します 同様にローリングテクスチャ ハプティクスは 背景の表示時のみ発生します この模様により感覚が 発生したことが分かります 2番目の調和性とは 感覚に一貫性があることです 特定の体験を生み出すために 感覚が調和的に機能すれば 理解を助けます 見た目や音と 感覚が一致することです 小さなボールは小さく感じ 音も小さくなります 大きなボールは 大きな質量を反映して 重そうな音と 感覚がするはずです 3番目の有用性とは Appの体験に 明確な価値を提供することです 無意味なフィードバックを 追加しないようにしましょう すぐにジャマで不快な 感じがするでしょう ボールの成長など Appの重要な 要素のために 触覚や音声を使いましょう では Core Hapticsを 見てみましょう Core Hapticsは iPhoneと iOSのテクノロジーで Appのハプティクスと 音声の フィードバックを デザインできます これはエンジン プレーヤー パターン イベントの 4つの基本要素を中心とした 強力なAPIです これらを簡単に 確認しましょう 最高レベルの 要素はエンジンです 電話の物理アクチュエータに リンクしています 次にプレーヤーがあります 開始 停止 一時停止などの 再生制御に使用されます 次に パターンと イベントがあります パターンは時間の経過に伴う イベントの集合体です イベントはエクスペリエンス を構成する要素です イベントには 多くの種類があります 代表的なものとして一時的と 継続的なものがあります こちらが実際にイベントで 作られたパターンの具体例です MacOS 12のQuickLook Visualizerを使って .ahapファイルに指定された ハプティクスパターンを 見てみます AHAPはApple Haptic Audio Patternの略です もう一度見てみましょう Finderで .ahapファイルを選択し キーボードの スペースバーを押します
ではパターン内のアイテムの 詳細を見てみましょう 青の最初のイベントは 一時的イベントです 2番目のオレンジは 継続的なイベントです
パターンには JSON構文を使用します 一時的イベントは このコードで作成しました
Core Hapticsの概要は以上です 詳細についてはオンラインの ドキュメントを確認してください このセッションでは練習として パターンのロード 変更 再生に焦点を当てます 次はXcodeと HapticRicochetです HapticRicochet-Start フォルダから開きます iPhoneでプロジェクトのコンパイルと 実行ができることを確認してください シミュレーターでは ハプティクスは機能しません 触覚を感じるには 実物の iPhone 8以降が必要です iPhoneが無音設定でないこと 音量レベルが高いことを 確認しましょう ViewControllerファイルと .ahap .wav .pngの アセットファイルを使います ゲームとそのインタラクションを しっかりと理解しておきましょう ボールとタップと背景のタップ に加え スマートフォンを 傾けられます 準備ができたら シールドの作成に移ります 調和性の原則により シールドの作成を 分解して デザインの 詳細を確認しましょう ビジュアル的には 500ミリ秒の アニメーションがあり 右上にこのように表示されます
ハプティクスについては 新しい状態への変換を 強調したいと思います オーディオで エネルギーの増加と 強く保護された状態を表現します
この練習のために 異なる性質を持つ 2種類のアセットを作成しました 両方を見てシールド用に 最適なものを考えます まずはシールドのフィードバックの 読み込みと再生を見てみましょう
機能的に コードは 2つの部分に分かれています まずビルディングブロックを初期化し シールドの変化をレンダリングします
initializeShieldHaptics関数では ShieldTransientファイルの パターンを作成します 次に そのパターンで shieldPlayerを作成します
これでフィードバックを再生可能です
shield関数は変化するレンダリングの 準備が出来ると呼び出されます ハプティクスと音声フィードバックは shieldPlayerでstartPlayer を呼び出し再生します これは何度も利用する 便利な関数です 次に ビジュアルアニメーションが 再生されます
では ShieldTransient アセットを見てみましょう これはハプティクスと音声の フィードバックを定義します ハプティクスは このような感じです そして音声はこんな感じです いい音ですね ボールが強化され 保護されている感じがします もう一度聞いてみましょう 問題はハプティクスと音が あまり一致しないことです ハプティクスは3つの 断続的な感覚で 音声は連続した上昇音です 2つの感覚が調和していません ShieldContinuousという 代わりのアセットを見てみましょう ハプティクスは継続的に変化し… 音声は震えながら減衰します ここでもハプティクスと 音声があまりマッチしません ハプティクスは良い感じです シールドの発生として 良い感覚がします ハプティクスをもう一度 そこで この連続的な ハプティクスパターンを使い 音声は最初のアセットを使用します
2つのアセットから1つ目の 音声パターンを採用し 2つ目の連続した 触覚パターンを使用します
では実際にやってみましょう
まず ShieldContinuous .ahapファイルを テキストエディタで開き 最後までスクロールします ハプティクスで再生する 音声ファイルを イベントで指定する場所です
EventType AudioCustomで 使用する音声ファイルを指定します ParameterValueを使用して 音量の指定や調整が可能です
気に入った音声を使うために ShieldB.wavをShieldA.wavへ 変更します
見直し後のアセットは こうなります ハプティクスと… 音声はマッチしていますね お互いの効果を高め合っています 音声とハプティクスを 一緒に聞いてみましょう 最後に 作成したアセットを 使用するよう変更します InitializeShieldHaptics 関数に戻り ShieldTransientを 使う代わりに ShieldContinuousファイルを 指定してロードします
はい! 出来上がりです デバイス上で コンパイルして実行します シールドの発生する感覚が うまく調和しています ハプティクス 音声 ビジュアルによって シールドの保護が追加された 感じが良く出ています では ゴロゴロしたテクスチャの 追加方法を見てみましょう
HapticRicochetは 最初はテクスチャが無く 壁と衝突するだけです 背景をタップすると 水玉模様が表示され ボールが転がると追加の フィードバックを 感じられます ここでは2つの問題を 解決していきます 最初は技術的なもので 次はエクスペリエンスの 設計に関連しています
initializeTextureHaptics 関数では まずテクスチャのahapファイルから パターンを作成します 次に そのパターンで ShieldPlayerを作成します updateTexturePlayer関数は テクスチャがアクティブな 全フレームで呼び出されます ボールの速度に応じて ハプティクスの強さを 更新するために使います 結果を見てみましょう ここで気づいたのは テクスチャが 数秒後に消える問題です その理由は分かりました 修正する 簡単な方法があります 問題点は .ahapファイルの テクスチャの長さが 2秒しかないからです その動作を変更して 無制限に再生させる方法があります パターンプレーヤーの高機能版には 一時停止や再開 その他の コールバックなどの 機能が追加されています HapticRicochetでは ループ機能に限定して 高度なパターン プレーヤーを使用します では変更していきましょう まず texturePlayerの宣言を CHHapticAdvancedPatternPlayerの 宣言に変更します 次に同じテクスチャファイルを使い 今度は AdvancedPlayerを作成します AdvancedPlayerでは ループ動作を有効にできます 他の部分のコードは そのままなのが良い点です 結果を見てみましょう 今度はゴロゴロしたテクスチャが ループ再生され 停止や継ぎ目はありません 2つ目の問題は テクスチャの 見た目に関するものです 触覚パターンは非常に密集しており 2秒間で100近くのエントリがあります 一方 視覚的な背景のテクスチャは非常に粗く 一行に数ドットしかありません ドットパターンの密度が高くなれば よりリアルな感じになると思います
backgroundImageに使用した リソースファイルを 細かいバージョンにします Appでは 密度の高い テクスチャが使用されます 見てみましょう
お困りの場合に備えて HapticRicochet-Final フォルダに プロジェクトの 最終バージョンを入れてあります セッション中に行った すべての変更点が含まれ コンパイルしてiPhoneで 触れることができます ご自身でハプティクス体験を デザインして試すこともできます ゲーム内で他の変化も試して 新しいハプティクスや 音声のフィードバックを ぜひデザインしてみてください おさらいです Appで優れたマルチモード 体験をデザインする際の 指針となる 音声および触覚のデザインを 紹介しました iOSでカスタム フィードバックを追加する APIであるCoreHapticsの 基礎を確認しました HapticRicochet プロジェクトを使って シールドとテクスチャの 仕組みを実践してみました 追加情報やリソースは Human Interface Guidelines および デベロッパ向け ドキュメントをご覧ください Core Hapticsを発表した WWDC2019の セッションへもアクセスできます ご視聴ありがとうございました [軽快な音楽]
-
-
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") // … }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。