Unity祭りに参加しました

おっすおっす

金曜日の夜にconnpassという勉強会支援プラットフォーム(って書いてた)が主催の勉強会に参加しました。
connpass.com

Unity祭という名前の勉強会で、僕のように基本さえ知らない人間には敷居が高いものだったがとりあえずは参加してみた。
「何言ってるか分からん」という焦りが自分にとってのハッパになると思ったから。
csharp-tokyo.connpass.com

というわけで、今回はこの勉強会の内容についてちょこっと書いてみたい。
下記スライドの抜粋になるので、興味がある人は全部読んでみてほしい。そしてとりすーぷさんに「マジぱねえっす」とお声掛けしてほしい。
speakerdeck.com

「Unitask」がすごいらしい

この内容について話してくださったのはとりすーぷさん

ぶっちゃけ基本さえ分かってない僕にはハードルが高すぎた。が、かいつまんで分かったことと「知らない言葉」について書いてみる。

簡単に言うとUnityでめちゃすごい非同期処理ができるようになる拡張ライブラリ

Unitaskは要するに「非同期処理がやりやすくなる(?)最新のライブラリ」のことらしい。およびその記法。
Unitaskの仕組みなど子細に解説があったが、僕には100年早かったので概要だけでも咀嚼しておこう。

とりあえず頭を整理しながら書いてみる。

非同期処理?

まず、同期処理・非同期処理についての説明があった。これは現職でも使う用語なので知っていた。…と思ったら盛大に勘違いしていたのでちょこっと調べてみた。
同期処理は「処理Aが処理Bを呼び出したとき、処理Bの完了を待ってから処理Aを再開する」処理の種類で、非同期処理は「処理Aは処理Bを呼び出すけど、処理Bの進行状況に関わらず処理Aも普通に進んでいく」処理だ。(と理解している)
「スーパーでの買い物」で考えてみる。「レジで商品を出し、支払額を計算してもらい、金額を聞いてから支払いをする」みたいなのは同期処理。計算途中に「はい!2000円払います!釣りは取っとけ!バイバイ!」だったら非同期処理だ。

Unityはゲームを作るときによく用いられるが、ゲーム内の処理は何かしらのきっかけ(イベント)によってスタートし、大元の処理では呼び出したらそれで終わり、待機しないことが多い。ダッシュ中にジャンプしたら、ジャンプ処理が独自に動いてダッシュ処理はダッシュ処理で動くみたいな。つまり、Unityを扱う上で「非同期処理」は必須の記法だ。※紛らわしいようだが、イベントによって処理が開始するならそれは「非同期処理」に分類されるらしい。

Unityでは「コルーチン」というものがある*1のだが、これも非同期処理に分類されるらしい。

非同期処理のスタンダードはasync/await

非同期処理を実装する上でスタンダードなのはasync/awaitを用いた書き方らしい。
これはC#5.0から実装された機能で、メソッドの頭に「async」と書くことでそのメソッドが非同期メソッドに変身できる。
これができると、上述の「コルーチン」のところにも記載した「処理を少しだけ待つ」ということができるようになったりする。コルーチンによく似ているが、とりすーぷさん曰く「強いコルーチン」だと思ってくれということだった。
強調していたのは、asyncは「待つ」ための機能だということだった。マルチスレッド処理*2とは違うんやで、ということだった。

Unitaskはasync/awaitの強化パーツみたいなもん

Unitaskはこのasync/awaitをUnity上で扱いやすく、より便利にするものらしい。アロケーションの削減によるパフォーマンス向上や、Unityに特化した機能の提供などが使用する上でのメリットらしい。
正直この後の話は一ミリも分からなかったので時間をかけて消化したいと思う。(これしないやつだな)

今更ながらここから入手できるので有識者の方はぜひチェックしてほしい。
github.com

学んだこと:「新しい技術をつかんで積極的に導入していいものを作ろう」

よく言われることだが、IT業界は新技術の新興とその衰退がものっすごい速い。集合知の恐るべきところである。こうしたものをしっかりキャッチアップしないと、古のツールを独自の技法で謎に使いこなしていくおじさんになってしまう。今回はエンジニアの友達に声をかけてもらってこれに参加したのだが、継続的にこうしたイベント(リモートのもの)には参加していきたいと思った。
なにより、いいものを作るために使えるものはしっかり使い、限られたリソースを有効に使って、表現に使えるバッファを増やしていきたいものだ。(なんも知らんけど)

以上、番外編でした。

*1:コルーチンについて軽く調べたら「関数の亜種」で処理の最中に中断、また中断したところから再開ができるような仕組みらしい。めっちゃ便利だね。 doruby.jp

*2:マルチスレッド処理というのは簡単に言うと「二つのものを同時に動かすぞ」みたいな処理。効率厨?e-words.jp