CrossRoadスマートフォン用の表示で見るCrossRoadAR、MR、VR、Babylon.jsを中心とした技術ブログ。2015の4日目の記事です。3日目は、geekdrumsさんの「Unityで音楽同期したアニメーションを作る」でした。本日は非同期処理向けのアセットを紹介します。前提:Unityのスレッドに関する考え方Unityはシングルスレッドで動作します。非同期っぽい処理を作るには、コルーチンと呼ばれる方法を使います。これはUnityがフレーム毎に処理を行うときに、そこに混ぜることで擬似的にマルチスレッドのような概念を実現しています。別スレッドで実行する処理が重いと、メインの処理速度にも影響が出てしまいます。Kitというアセットです。詳しい原理については理解できてませんが、この仕組みを使うと、マルチスレッドのような非同期処理が実現できます。Kitの使い方まずはAssetStoreより入手し、Importします。代表的な処理例をc#で書いてみます。ここではdelegateを使って非同期処理を実現しています。多くの場合は、MonoBehaviourですが、このアセットを使うとき、非同期処理したいクラスは、これをくっつけて宣言します。Kitにとって必須ではありませんが、非同期処理実行のために使いました。Threadクラスを呼ぶ方法でも大丈夫です。非同期処理の開始delegateを使うと、BeginInvokeメソッドの引数で宣言した関数が非同期で実行されます。本稿のメインはこれですね。非同期処理の中でUnityAPIを含んだ関数を呼ぶとき、taskFactory.Startnewメソッドの引数とします。非同期処理が終わった時に呼ばれる関数です。この中に処理を書いておけば非同期処理の終了をきっかけに処理を続けることができます。追記しました)シンプルな使い方を書けていなかったので、参考までに記載しました。WWWクラスを複数回呼び出したい、とします。gistd830337b1932c5d3860b755065533119ここのgetImage()ではyieldで戻り値を得るまで処理が止まります(同期のような挙動を示す)。そのため、getImage()を複数回呼び出す、すなわちWWWクラスを複数回呼ばれるとUnityのシーン実行が著しく遅くなります。Kitを使うと、非同期的に処理を実行することができます。このように、taskFactory.StartNewというメソッドの中に非同期にしたいメソッドを書くだけです。終わりにここで紹介したのは使い方の一例です。他にも色々ありますので、ご興味ある方は本家サイトのLearnをご参照ください。明日はYOSHIOKA-Koさんによる、「uGUIのAnchorを使ったアニメーションの演出」です。»ProfileAR、MR、VR、Babylon.jsを中心とした技術ブログです。広く色々な技術を勉強するのが好きで、あれこれ書いています。詳細なプロフィールはこちらをご確認ください。2020)■プライバシーポリシー■こちらに記載しておりますのでご確認ください。■お問い合わせ■こちらよりお願いいたします。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。