関連サイト
本書の関連ページが用意されています。
内容紹介
UniEx/UniTaskライブラリを学んで、つよつよプログラマになろう!
リアクティブプログラミング、非同期プログラミングをUnityで実現するUniRx/UniTaskライブラリの使い方を徹底的に解説する。Unity C#で高度な開発を行える知識を習得して一歩先を行くプログラマをめざそう。
UnityにおけるC#プログラミングをある程度習得している人を対象として、UniRx/UniTaskを活用方法を徹底的に解説する。UniRx,UniTaskはともにUnityによる高度な開発を行う場合に必須となるものだ。リアクティブプログラミングの概念をUnityで利用できるようにするライブラリがUniRx、C#の標準機能であるTaskおよびasync/awaitをUnity向けに最適化したライブラリがUniTaskである。本書は、UniRx/UniTaskに関する基礎的な用語、動作原理、各オブジェクトの振る舞いなどをきめ細かく紹介していく。それぞれの特徴を体系的に理解することで、一歩先をいくプログラマとしてのスキルを身につけることができるようになる。
書誌情報
- 著者: 打田恭平
- 発行日: 2020-11-06 (紙書籍版発行日: 2020-11-06)
- 最終更新日: 2020-11-06
- バージョン: 1.0.0
- ページ数: 502ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: アスキードワンゴ
対象読者
著者について
打田恭平
幼いころからゲーム開発者を夢見てC#を学習し、「とりすーぷ」名義で同人ゲーム制作活動を行う。Unityにおける効率的なプログラムの設計手法やライブラリの活用方法を研究中。ゲーム制作の経験を活かしてブログ執筆や勉強会主催・登壇を行い、その積極的なコミュニティ活動が評価され2018年にMicrosoft MVP for Developer Technologiesを受賞。以降、継続して受賞中。現在株式会社バーチャルキャスト所属。
目次
まえがき
導入
第I部 UniRx
第1章 概説
- 1.1 UniRxとは
- 1.2 UniRxの導入方法
- 1.2.1 Unity Asset Storeから導入する
- 1.2.2 GitHubから導入する
- 1.3 UniRxの用途
- 1.3.1 非同期処理への利用
- 1.3.2 イベント処理への利用
- 1.4 第1章まとめ
第2章 UniRxの動作原理
- 2.1 Observableとは何か
- 2.1.1 イベント駆動プログラミング
- 2.1.2 Observerパターン
- 2.1.3 Observerパターンから「Observable」の考え方へ
- 2.1.4 Observable
- 2.2 Observableの扱い方
- 2.2.1 Observableの生成方法
- 2.2.2 Observableで利用できるメッセージ
- 2.2.3 Observableを破棄する方法
- 2.2.4 Observableの破棄方法のまとめ
- 2.2.5 AddTo()メソッド
- 2.3 Observableの性質
- 2.3.1 Observableが動き出すタイミング
- 2.3.2 Operatorのインスタンス生成
- 2.3.3 Hot ObservableとCold Observable
- 2.4 Scheduler
- 2.4.1 Schedulerの種類
- 2.4.2 Schedulerの指定とデフォルトScheduler
- 2.4.3 ImmediateSchedulerとCurrentThreadSchedulerの違い
- 2.4.4 Schedulerの使い方
第3章 Observableの作り方
- 3.1 Subject系
- 3.1.1 Subject<T>
- 3.1.2 BehaviorSubject<T>
- 3.1.3 ReplaySubject<T>
- 3.1.4 AsyncSubject<T>
- 3.2 ReactiveProperty系
- 3.2.1 ReactiveProperty<T>
- 3.2.2 ReadOnlyReactiveProperty<T>
- 3.2.3 ReactiveCollection<T>
- 3.2.4 ReactiveDictionary<TKey,TValue>
- 3.3 ファクトリメソッド
- 3.3.1 Observable.Return<T>
- 3.3.2 Observable.Range<int>
- 3.3.3 Observable.Repeat<T>
- 3.3.4 Observable.Throw<T>
- 3.3.5 Observable.Empty<T>
- 3.3.6 Observable.Never<T>
- 3.3.7 Observable.Defer<T>
- 3.3.8 IEnumerable<T>.ToObservable<T>
- 3.3.9 Observable.Create<T>
- 3.3.10 Observable.CreateWithState<T,TState>
- 3.3.11 Observable.CreateSafe<T>
- 3.3.12 Observable.FromEvent/Observable.FromEventPattern
- 3.3.13 Observable.Timer
- 3.3.14 Observable.TimerFrame
- 3.3.15 Observable.Interval
- 3.3.16 Observable.IntervalFrame
- 3.3.17 Observable.FromAsyncPattern
- 3.3.18 Observable.ToAsync<T>
- 3.3.19 Observable.Start
- 3.3.20 ObservableWWW
- 3.4 Unityイベント関数からの変換
- 3.4.1 Observable.NextFrame
- 3.4.2 Observable.OnceApplicationQuit<Unit>
- 3.4.3 Observable.Every〜シリーズ
- 3.4.4 ObservableTriggers
- 3.4.5 ObserveEveryValueChanged<TSource,TProperty>
- 3.5 uGUIコンポーネントとObservable
- 3.5.1 uGUIイベントからObservableへ変換
- 3.5.2 特殊なSubscribe
- 3.6 コルーチンからの変換
- 3.6.1 コルーチンからObservableへの変換
- 3.6.2 Observableをコルーチンで待ち受ける
- 3.7 StateMachineBehaviourから変換
- 3.7.1 ObservableStateMachineTriggerの使い方
- 3.7.2 ObservableStateMachineTriggerから取得可能なObservable
- 3.8 Taskから変換
第4章 Operator
- 4.1 マーブルダイアグラムについて
- 4.1.1 各記号の意味
- 4.1.1 Operatorの表現
- 4.2 フィルタリング系Operator
- 4.2.1 Where
- 4.2.2 OfType
- 4.2.3 IgnoreElements
- 4.2.4 Distinct
- 4.2.5 DistinctUntilChanged
- 4.2.6 First
- 4.2.7 FirstOrDefault
- 4.2.8 Last
- 4.2.9 LastOrDefault
- 4.2.10 Single
- 4.2.11 SingleOrDefault
- 4.2.12 Skip
- 4.2.13 SkipWhile
- 4.2.14 SkipUntil
- 4.2.15 Take
- 4.2.16 TakeWhile
- 4.2.17 TakeUntil
- 4.2.18 TakeUntilDestroy
- 4.2.19 TakeUntilDisable
- 4.2.20 TakeLast
- 4.2.21 Throttle
- 4.2.22 ThrottleFrame
- 4.2.23 ThrottleFirst
- 4.2.24 ThrottleFirstFrame
- 4.3 メッセージ変換系Operator
- 4.3.1 Select
- 4.3.2 Cast
- 4.4 メッセージやストリームの合成系Operator
- 4.4.1 Merge
- 4.4.2 Concat
- 4.4.3 SelectMany
- 4.4.4 ContinueWith
- 4.4.5 Switch
- 4.4.6 Aggregate
- 4.4.7 Scan
- 4.4.8 Buffer
- 4.4.9 BatchFrame
- 4.4.10 PairWise
- 4.4.11 Zip
- 4.4.12 ZipLatest
- 4.4.13 CombineLatest
- 4.4.14 WithLatestFrom
- 4.4.15 Observable.WhenAll
- 4.4.16 Amb
- 4.5 ストリームの性質自体の変換系Operator
- 4.5.1 Delay
- 4.5.2 DelayFrame
- 4.5.3 DefaultIfEmpty
- 4.5.4 StartWith
- 4.5.5 GroupBy
- 4.5.6 Repeat
- 4.5.7 RepeatSafe
- 4.5.8 RepeatUntilDestroy
- 4.5.9 RepeatUntilDisable
- 4.5.10 Sample
- 4.5.11 SampleFrame
- 4.5.12 Timeout
- 4.5.13 TimeoutFrame
- 4.5.14 Timestamp
- 4.5.15 TimeInterval
- 4.5.16 FrameTimeInterval
- 4.5.17 FrameInterval
- 4.5.18 Synchronize
- 4.6 エラーハンドリング系Operator
- 4.6.1 Catch
- 4.6.2 CatchIgnore
- 4.6.3 Retry
- 4.6.4 OnErrorRetry
- 4.6.5 Finally
- 4.7 Hot変換用Operator
- 4.7.1 Multicast
- 4.7.2 Publish
- 4.7.3 PublishLast
- 4.7.4 Replay
- 4.7.5 RefCount
- 4.7.6 Share
- 4.8 Schedulerを切り替えるOperator
- 4.8.1 ObserveOn
- 4.8.2 ObserveOnMainThread
- 4.8.3 SubscribeOn
- 4.8.4 SubscribeOnMainThread
- 4.8.5 DelaySubscription
- 4.8.6 DelayFrameSubscription
- 4.3 その他のOperator
- 4.9.1 Do
- 4.9.2 DoOnError
- 4.9.3 DoOnCompleted
- 4.9.4 DoOnTerminate
- 4.9.5 DoOnSubscribe
- 4.9.6 DoOnCancel
- 4.9.7 ForEachAsync
- 4.9.8 Materialize
- 4.9.9 Dematerialize
- 4.9.10 AsObservable
- 4.9.11 AsUnitObservable
- 4.9.12 AsSingleUnitObservable
- 4.9.13 ToArray
- 4.9.14 ToList
- 4.9.15 Wait
- 4.9.16 ToYieldInstruction
- 4.9.17 ToAwaitableEnumerator
- 4.9.18 StartAsCoroutine
第5章 その他UniRxの便利な機能
- 5.1 ObservableLogger
- 5.1.1 使い方
- 5.2 MessageBroker
- 5.2.1 MessageBrokerのインタフェース
- 5.2.2 MessageBrokerを扱うコツ
- 5.3 AsyncMessageBroker
- 5.3.1 AsyncMessageBrokerのインタフェース
- 5.4 ReactiveCommand
- 5.4.1 実装例
- 5.4.2 ReactiveCommandのコンストラクタおよびメソッド一覧
- 5.4.3 uGUIへの応用
- 5.5 AsyncReactiveCommand<T>
- 5.5.1 AsyncReactiveCommand<T> とReactiveCommand<T> の違い
- 5.5.2 AsyncReactiveCommand<T> の挙動
- 5.5.3 使用例
- 5.6 ObjectPool
- 5.6.1 UniRx.Toolkit.ObjectPoolの使い方
- 5.6.2 UniRx.Toolkit.ObjectPoolの挙動
- 5.6.3 使用例
- 5.6.4 UniRx.Toolkit.ObjectPoolの機能一覧
- 5.6.5 ObjectPoolの挙動をカスタマイズしたい場合
- 5.6.6 AsyncObjectPool
- 5.7 Model-View-(Reactive)Presenterパターン
- 5.7.1 概要
- 5.7.2 MV(R)Pパターンの実装例
- 5.7.3 MV(R)Pパターンを利用する利点
- 5.7.4 MV(R)Pパターンまとめ
第6章 非同期処理とUniRx
- 6.1 はじめに
- 6.2 async/awaitとTask
- 6.2.1 Task/Task<T>
- 6.2.2 async/await
- 6.2.3 async/awaitと実行コンテキスト
- 6.3 Observable,async/await,Task
- 6.3.1 ObservableとTask
- 6.3.2 Observableとasync/await
- 6.4 UniRxが提供するAwaiter
- 6.4.1 IReadOnlyReactivePropertyのawait
- 6.4.2 IReactiveCommandのawait
- 6.5 まとめ
第II部 UniTask
第7章 UniTaskの機能紹介
- 7.1 UniTaskの導入方法
- 7.1.1 インストール
- 7.1.2 UniTaskが利用できる条件
- 7.2 UniTaskの機能一覧
- 7.2.1 BehaviorSubject<T>
- 7.2.2 UniTaskVoid
- 7.3 さまざまなオブジェクトのasync/await対応
- 7.3.1 コルーチンのawait
- 7.3.2 AsyncOperationのawait
- 7.3.3 JobHandleのawait
- 7.3.4 uGUIの各種イベントのawait
- 7.3.5 UnityEventのawait
- 7.3.6 MonoBehaviourの各種イベントのawait
- 7.3.7 AsyncGPUReadbackのawait
- 7.3.8 CancellationTokenのawait
- 7.3.9 DOTweenのawait
- 7.4 UniTaskを生成する方法
- 7.4.1 async/awaitの返り値として利用する
- 7.4.2 ファクトリメソッド
- 7.4.3 コンストラクタから生成する
- 7.4.4 Task/Observableより変換する
- 7.4.5 UniTaskCompletionSourceから生成する
- 7.4.6 Unityの各種機能から変換する
- 7.5 UniTaskTracker
- 7.6 UniTaskの用途
- 7.6.1 コルーチンの代替としてのasync/await
- 7.7 非同期処理のキャンセル
- 7.7.1 CancellationTokenの使い方
- 7.7.2 CancellationTokenの生成方法
- 7.7.3 OperationCanceledExceptionとUniTask
第8章 UniTaskライブラリの ファクトリメソッド/拡張メソッド紹介
- 8.1 ファクトリメソッド
- 8.1.1 UniTask.FromResult
- 8.1.2 UniTask.FromException
- 8.1.3 UniTask.FromCanceled
- 8.1.4 UniTask.Never
- 8.1.5 UniTask.Run
- 8.1.6 UniTask.Create
- 8.1.7 UniTask.Defer
- 8.1.8 UniTask.Lazy
- 8.1.9 UniTask.Void
- 8.1.10 UniTask.Action
- 8.1.11 UniTask.UnityAction
- 8.1.12 UniTask.Delay
- 8.1.13 UniTask.DelayFrame
- 8.1.14 UniTask.Yield
- 8.1.15 UniTask.NextFrame
- 8.1.16 UniTask.WaitForEndOfFrame
- 8.1.17 UniTask.WaitForFixedUpdate
- 8.1.18 UniTask.SwitchToThreadPool
- 8.1.19 UniTask.SwitchToTaskPool
- 8.1.20 UniTask.SwitchToMainThread
- 8.1.21 UniTask.SwitchToSynchronizationContext
- 8.1.22 UniTask.WaitUntil
- 8.1.23 UniTask.WaitWhile
- 8.1.24 UniTask.WaitUntilValueChanged
- 8.1.25 UniTask.WaitUntilCanceled
- 8.1.26 UniTask.WhenAll
- 8.1.27 UniTask.WhenAny
- 8.2 UniTaskで利用可能なメソッド/拡張メソッド紹介
- 8.2.1 ToCoroutine
- 8.2.2 Forget
- 8.2.3 ContinueWith
- 8.2.4 Timeout
- 8.2.5 TimeoutWithoutException
- 8.2.6 AsAsyncUnitUniTask
- 8.2.7 ToObservable
- 8.2.8 Unwrap
- 8.2.9 SuppressCancellationThrow
- 8.2.10 UniTask.ToCancellationToken
- 8.2.11 CancellationToken.ToUniTask
- 8.2.12 IDisposable.AddTo(CancellationToken)
- 8.2.13 UniTask.Post
- 8.2.14 CancellationTokenSource.CancelAfterSlim
- 8.2.15 CancellationTokenSource.RegisterRaiseCancelOnDestroy
第9章 UniTaskAsyncEnumerable
- 9.1 UniTaskAsyncEnumerableを利用するためには
- 9.1.1 C#8.0のIAsyncEnumerable<T>
- 9.1.2 IAsyncEnumerable<T> とIObservable<T>
- 9.1.3 IUniTaskAsyncEnumerable
- 9.2 UniTaskAsyncEnumerableの使い方
- 9.2.1 ForEachAsync
- 9.2.2 ForEachAwaitAsync
- 9.2.3 ForEachAwaitWithCancellationAsync
- 9.2.4 Subscribe
- 9.2.5 BindTo
- 9.3 UniTaskAsyncEnumerableの生成方法
- 9.3.1 ファクトリメソッド
- 9.3.2 他のデータ構造から変換
- 9.3.3 UnityEventおよびuGUIコンポーネントから生成
- 9.3.4 各種トリガ
- 9.4 LINQメソッド
- 9.4.1 特殊なLINQメソッド
- 9.4.2 Await版LINQメソッド
- 9.4.3 AwaitWithCancellation版LINQメソッド
- 9.5 Channel
- 9.6 AsyncReactiveProperty
- 9.6.1 AsyncReactivePropertyの使用例
- 9.6.2 AsyncReactivePropertyとAwaitAsync
- 9.6.3 UniRx.ReactivePropertyとの比較