SlideShare a Scribd company logo
UnityのCoroutine
は何が便利なのか
注意事項
● ここで扱う”Coroutine”はUnityのコルーチンのことを指します。
● 学習しながら作った資料の為、不正確な記述があるかもしれません。指摘・
議論などのご協力をお願いします。
この発表のターゲット
● Unity のコルーチンを普段から使っている人
● C#の標準的な機能を理解している人
Unity をこれから学習する人には厳しい内容かも…
Coroutineってどんなもの?
Coroutineの実装
Corutine がやってることは C# の IEnumerator
● Unityの独自実装ではない
● IEnumeratorを拡張したもの
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.ienumerator?view=netcore-3.1
では何が便利になったのか
IEnumeratorの定義
● 列挙子を段階的に進める
MSDNより抜粋
https://msdn.microsoft.com/ja-
jp/library/system.collections.ienumerator(v=vs.110).aspx
IEnumeratorだけで
Coroutineするとこうなる
● 呼び出し元が必要
● 適切なタイミングの呼び出しが必要
Coroutineすごい!
StartCoroutineすればUnityが管理してくれる!
・処理が終わるまで毎ループ回してくれる!
・処理の中断・続行をIEnumerator内
だけで実現できる!
Coroutineの仕様
CoroutineはMonoBehaviorによって実現している
● StartCoroutineもStopCoroutineもMonoBehaviorの関数
● StartCoroutineを介さなければ普通のC#のIEnumerator
● つまりMonoBehaviorのプリセットの関数からIEnumeratorにアクセスするこ
とによってCoroutineが実現する
参考:Unity公式ドキュメント
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html
意外と知らないコルーチンの動き
Q.コルーチンはマルチスレッドか?
● NO!
○ MonoBehaviorがシングルスレッドで実装されているため
Q.コルーチン動作中にDestroyしたらどうなる?
ObjectHoge
Destroy(ObjectHoge)
A.停止する
コルーチン中のMonoBehaviourが破壊されるため
Case1:
StartCoroutine(Coroutine)
?
自身でStartCoroutine コルーチン中にDestroy
Q.コルーチン動作中にDestroyしたらどうなる?
ObjectFuga
Case2:
ObjectHoge
Destroy(ObjectFuga)StartCoroutine(ObjectFuga.Corou
tine())
?
ObjectHoge
ObjectHogeからObjectFugaを
StartCoroutine
コルーチン中のオブジ
ェクトをDestroy ObjectHogeを残す
A.続行する!
StartCoroutineしたMonoBehaviourが
Q.コルーチン動作中にDestroyしたらどうなる?
ObjectFuga
Case3:
ObjectHoge
Destroy(ObjectHoge)StartCoroutine(ObjectFuga.Corou
tine)
?
ObjectFuga
ObjectHogeからObjectFugaを
StartCoroutine 呼び出し元をDestroy ObjectFugaを残す
A.停止する!
StartCoroutineしたMonoBehaviourが
破壊されたため
結論
● IEnumeratorそれ自体は列挙子をMoveNextするだけ
● StartCoroutineによって非同期っぽくIEnumeratorを扱うことができる
● コルーチンの挙動はStartCoroutineの呼び出し側が握っているので、呼び出し
たMonoBehaivourが破壊されるとコルーチンは停止する
参考
● Unityのコルーチンの分解、或いはUniRxのMainThreadDispatcherについて
(http://neue.cc/2014/12/18_499.html)
● G-MODE Engineers' Blog
(http://tech.gmodecorp.com/post/106028420751/startcoroutine%E3%81%A
F%E4%BD%95%E3%82%92%E3%81%97%E3%81%A6%E3%81%84%E3
%82%8B%E3%81%AE%E3%81%8B%E4%BD%9C%E3%81%A3%E3%81%
A6%E5%AD%A6%E3%81%B6%E3%82%B3%E3%83%AB%E3%83%BC%E
3%83%81%E3%83%B3%E3%81%AE%E4%BB%95%E7%B5%84%E3%81
%BF%E5%89%8D%E7%B7%A8)
ありがとうございました

More Related Content

Similar to Unity の Coroutine は何が便利なのか (20)

PPTX
Unity/CSharp 1 - pptx
tagawakiyoshi
 
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
 
PPTX
Unity/CSharp 2
tagawakiyoshi
 
PPTX
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
 
PDF
.NET Coreとツール類の今
Yuki Igarashi
 
PDF
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
 
PPTX
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
 
KEY
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 
KEY
Unityの夕べ in Fukuoka
Shinobu Izumi
 
PPTX
Unity/CSharp 3
tagawakiyoshi
 
PDF
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
 
PPTX
Unity ゲーム開発
Katsutoshi Makino
 
PPTX
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
NTT DATA Technology & Innovation
 
PDF
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Kaoru NAKAMURA
 
PDF
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Kaoru NAKAMURA
 
PPTX
20171206 Sony Neural Network Console 活用テクニック
Sony Network Communications Inc.
 
PDF
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
PDF
Dockerで.NET Core 3.0 GUIアプリを動かす話
You&I
 
PDF
UnityによるHoloLensアプリケーション入門
Yuichi Ishii
 
PDF
Code ignitertalk 01
Takako Miyagawa
 
Unity/CSharp 1 - pptx
tagawakiyoshi
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
 
Unity/CSharp 2
tagawakiyoshi
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
 
.NET Coreとツール類の今
Yuki Igarashi
 
猫でも分かるUE4.22から入ったSubsystem
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
 
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 
Unityの夕べ in Fukuoka
Shinobu Izumi
 
Unity/CSharp 3
tagawakiyoshi
 
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
 
Unity ゲーム開発
Katsutoshi Makino
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
NTT DATA Technology & Innovation
 
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Kaoru NAKAMURA
 
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Kaoru NAKAMURA
 
20171206 Sony Neural Network Console 活用テクニック
Sony Network Communications Inc.
 
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
You&I
 
UnityによるHoloLensアプリケーション入門
Yuichi Ishii
 
Code ignitertalk 01
Takako Miyagawa
 

Unity の Coroutine は何が便利なのか