SlideShare a Scribd company logo
1 of 20
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 は何が便利なのか

Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 

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

Unity/CSharp 1 - pptx
Unity/CSharp 1 - pptxUnity/CSharp 1 - pptx
Unity/CSharp 1 - pptx
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
Unity/CSharp 2
Unity/CSharp 2Unity/CSharp 2
Unity/CSharp 2
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem 猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
Unity/CSharp 3
Unity/CSharp 3Unity/CSharp 3
Unity/CSharp 3
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
 
Unity ゲーム開発
Unity ゲーム開発Unity ゲーム開発
Unity ゲーム開発
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
 
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Visual Studio OnlineとUnityを使ったバージョン管理と継続的インテグレーションVisual Studio OnlineとUnityを使ったバージョン管理と継続的インテグレーション
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
 
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーションVisual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
 
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話
 
UnityによるHoloLensアプリケーション入門
UnityによるHoloLensアプリケーション入門UnityによるHoloLensアプリケーション入門
UnityによるHoloLensアプリケーション入門
 
Code ignitertalk 01
Code ignitertalk 01Code ignitertalk 01
Code ignitertalk 01
 

Unity の Coroutine は何が便利なのか