- Animation の AnimationEvent 機能から呼び出し可能な汎用 Dispatcher
- エンジニアとデザイナー (アニメーター) とのコミュニケーションコストを下げたかった
- 先に Script 側にメソッド定義していないと AnimationEvent で呼び出しできない
- しかし Script が先行して実装されているケースが少ない
- そのため、コミュニケーションの往復回数が多くなる
upm add package dev.upm-packages.animationevent-dispatcher
Note: upm
command is provided by this repository.
You can also edit Packages/manifest.json
directly.
{
"dependencies": {
// (snip)
"dev.upm-packages.animationevent-dispatcher": "[latest version]",
// (snip)
},
"scopedRegistries": [
{
"name": "Unofficial Unity Package Manager Registry",
"url": "https://upm-packages.dev",
"scopes": [
"dev.upm-packages"
]
}
]
}
$ npm install github:umm/animationevent_dispatcher.git
- AnimatorController がアタッチされている GameObject に
GeneralDispatcher
をアタッチします - Animation の AnimationEvent の設定として
GeneralDispatcher.Dispatch()
を呼び出します- その際、1つ以上の
int
,float
,string
,object
をパラメータとして渡せます string
を用いて「何の AnimationEvent なのか?」を渡すと見通しが良くなりそうです
- その際、1つ以上の
GeneralDispatcher.OnDispatchAsObservable()
が返すIObservable<AnimationEvent>
を Subscribe しますOnDispatchAsObservable()
引数: なし は全てのAnimationEvent
を流します.Where()
などでフィルタリングすることをオススメします
OnDispatchAsObservable()
引数: int, float, string, object は引数に渡した値にマッチするAnimationEvent
を流します- 複合条件には対応していないので、複雑な条件を付ける場合は 引数なし を呼んで、自分でストリームをフィルタしてください
- AnimatorController がアタッチされている GameObject に
AudioDispatcher
をアタッチします - Animation の AnimationEvent の設定として
AudioDispatcher.Play()
を呼び出します- その際、 AudioClip をパラメータとして渡します
- これで、当該 AnimationEvent を通過した瞬間にパラメータに渡した AudioClip が再生されます
- 「発音が始まった瞬間」を検知することができます
- 検知する場合は
AudioDispatcher.OnDispatchAsObservable()
が返すIObservable<AnimationEvent>
を Subscribe します
Copyright (c) 2017 Tetsuya Mori
Released under the MIT license, see LICENSE.txt
- テスト用の音声ファイル (
Assets/Tests/Sounds/Audio.mp3
) は 無料効果音素材 からダウンロードしております