インストール
FlowTask を .NET、Unity、Godot のプロジェクトに入れる手順を説明します。本体のほかに、テスト、UniTask、R3 のための任意のパッケージがあります。
パッケージの一覧
Section titled “パッケージの一覧”| パッケージ | 配布 | 内容 |
|---|---|---|
| FlowTask | NuGet FlowTask、UPM com.katout.flowtask |
本体(FlowTask、スコープ、World、Clock、シグナル、Task のブリッジ)とアナライザ |
| FlowTask.Unity | UPM com.katout.flowtask.unity |
PlayerLoop への組み込み、Unity のブリッジ、GameObject の寿命、Scope Tree ウィンドウ |
| FlowTask.Godot | NuGet FlowTask.Godot |
_Process への組み込み、Godot のシグナルのブリッジ、ノードの寿命 |
| FlowTask.Testing | NuGet FlowTask.Testing、UPM com.katout.flowtask.testing |
エンジンなしのテスト(TestWorld、仮想時間、スコープの木のアサーション) |
| FlowTask.Testing.NUnit | NuGet FlowTask.Testing.NUnit、UPM com.katout.flowtask.testing.nunit |
未処理の例外を NUnit のテストの失敗にする |
| FlowTask.UniTask | NuGet FlowTask.UniTask、UPM com.katout.flowtask.unitask |
UniTask と FlowTask を互いに待つ |
| FlowTask.R3 | NuGet FlowTask.R3 |
R3 の Observable と Signal をつなぐ |
依存はすべて本体へ向かい、本体はどのパッケージにも依存しません。名前空間は Katout.FlowTask です(エンジンの統合とテストのパッケージは、その下の名前空間を持ちます)。
dotnet add package FlowTask --version 0.1.0-preview.1- 対象は netstandard2.1 と net10.0 です。net8.0 などのプロジェクトでは netstandard2.1 版が使われます。NativeAOT でも動きます。
- アナライザとコード修正はパッケージに入っていて、参照するだけで効きます。メッセージは、IDE と
dotnet buildの表示言語(OS の表示言語かDOTNET_CLI_UI_LANGUAGE)に従って日本語か英語で出ます(アナライザのルール)。
任意のパッケージも同じように足します。
dotnet add package FlowTask.Testing --version 0.1.0-preview.1dotnet add package FlowTask.Testing.NUnit --version 0.1.0-preview.1dotnet add package FlowTask.UniTask --version 0.1.0-preview.1dotnet add package FlowTask.R3 --version 0.1.0-preview.1| パッケージ | 依存として入るもの |
|---|---|
| FlowTask.Testing.NUnit | NUnit 3.14 以上 |
| FlowTask.UniTask | NuGet の UniTask 2.5.10 以上 |
| FlowTask.R3 | R3 1.3.1 以上 |
入れたら、最初のフロー で World を動かしてみてください。
Unity 2023.1 以降で使えます。Packages/manifest.json に、本体と Unity の統合を git URL で書きます。
{ "dependencies": { "com.katout.flowtask": "https://github.com/katout/FlowTask.git?path=src/FlowTask", "com.katout.flowtask.unity": "https://github.com/katout/FlowTask.git?path=src/FlowTask.Unity" }}Package Manager の「Add package from git URL…」に 1 つずつ入れてもかまいません。
注意:統合のパッケージは本体に依存しますが、UPM は git URL の依存を自動では取ってきません。本体の
com.katout.flowtaskも必ず書いてください。任意のパッケージを足すときも、それが依存する FlowTask のパッケージをすべて書きます。
版を固定する
Section titled “版を固定する”URL の末尾に # とタグ(かコミット)を付けると、その版に固定できます。FlowTask のパッケージには、すべて同じタグを付けます。
{ "dependencies": { "com.katout.flowtask": "https://github.com/katout/FlowTask.git?path=src/FlowTask#v0.1.0-preview.1", "com.katout.flowtask.unity": "https://github.com/katout/FlowTask.git?path=src/FlowTask.Unity#v0.1.0-preview.1" }}テストのパッケージ
Section titled “テストのパッケージ”テストのパッケージは dependencies に足し、testables にも書きます。
{ "dependencies": { "com.katout.flowtask": "https://github.com/katout/FlowTask.git?path=src/FlowTask", "com.katout.flowtask.testing": "https://github.com/katout/FlowTask.git?path=src/FlowTask.Testing", "com.katout.flowtask.testing.nunit": "https://github.com/katout/FlowTask.git?path=src/FlowTask.Testing.NUnit" }, "testables": ["com.katout.flowtask.testing", "com.katout.flowtask.testing.nunit"]}- この 2 つのアセンブリは、通常のプレイヤーに入らないように、エディタとテストプレイヤーでだけコンパイルされます。Unity はそうしたアセンブリを
testablesに書いたパッケージでしかコンパイルしないので、書かないと、参照するテストがCS0246で止まります。2 つのパッケージ自体はテストを持たないので、Test Runner の一覧は増えません。 com.katout.flowtask.testing.nunitはcom.unity.test-framework1.1.33 以上に依存します。- テストの asmdef の書き方は エンジンなしのテスト にあります。
UniTask のブリッジ
Section titled “UniTask のブリッジ”com.katout.flowtask.unitask を足し、UniTask 自体は git URL か OpenUPM で別に入れます。Unity では UPM の com.cysharp.unitask 2.0.0 以上でブリッジがコンパイルされます(2.5.10 以上という下限は NuGet のパッケージの依存です)。
"com.katout.flowtask.unitask": "https://github.com/katout/FlowTask.git?path=src/FlowTask.UniTask","com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.5.10"- UniTask がプロジェクトにないと、ブリッジは黙ってコンパイルされません(エラーにもなりません)。
- UniTask を
.unitypackageでAssets/Plugins/UniTaskに入れた場合は、パッケージとして見えないので、ブリッジはやはりコンパイルされず、FlowUniTaskを使うコードがCS0246になります。Player Settings > Other Settings > Scripting Define Symbols にFLOWTASK_UNITASKを、プラットフォームごとに足してください。 - 使い方は UniTask にあります。
FlowTask.R3 には UPM のパッケージがありません。
Unity で知っておくこと
Section titled “Unity で知っておくこと”- 統合は起動時に World を作り、PlayerLoop から毎フレーム Tick します。自分では Tick しません。フローは
FlowTaskUnity.World.Run(...)で始めます。 - パッケージのソースは C# 10 です。Unity の既定は C# 9 ですが、各アセンブリの隣の
csc.rspがそのアセンブリだけの言語バージョンを上げます。あなたのコードは既定のままで使えます。 - アナライザの DLL は本体のパッケージに入っています。エラーのルール(FLOW001、FLOW002、FLOW005)は Unity のコンパイルも止めます。
- コードを asmdef に置いているなら、
FlowTaskとFlowTask.Unityを参照に足します。
アセンブリの構成、PlayerLoop との関係、設定は Unity のセットアップ にあります。
Godot 4.4.1 以降の .NET 版で使えます。ゲームの .csproj に FlowTask.Godot を足します。本体の FlowTask とアナライザは依存として入ります。
<ItemGroup> <PackageReference Include="FlowTask.Godot" Version="0.1.0-preview.1" /></ItemGroup>dotnet add package FlowTask.Godot --version 0.1.0-preview.1 でも同じです。
| 対応 | |
|---|---|
| Godot | 4.4.1 以降の .NET 版(パッケージは GodotSharp 4.4.1 以上に依存する) |
| ゲームのプロジェクト | Godot.NET.Sdk/4.4.1、net8.0 |
| .NET SDK | Godot 4.4 の要件(.NET 8 以上) |
- FlowTask.Godot は net8.0 を対象にし、本体は netstandard2.1 版が使われます。機能と公開 API は同じです。
- エンジンと
Godot.NET.Sdkのバージョンは一致させてください。 - 任意のパッケージ(テスト、UniTask、R3)は、上の .NET の節と同じく NuGet で足します。
入れたら、FlowWorldNode のサブクラスを 1 行で書いて autoload に登録します。
// res://FlowAutoload.cs (the class name must match the file name)public partial class FlowAutoload : Katout.FlowTask.Godot.FlowWorldNode { }autoload の登録とフローの起動は Godot のセットアップ にあります。
対応バージョン
Section titled “対応バージョン”| 環境 | バージョン |
|---|---|
| .NET | netstandard2.1 / net10.0(NativeAOT を含む) |
| Unity | 2023.1 以降(Mono、IL2CPP) |
| Godot | 4.4.1 以降の .NET 版(net8.0) |
| ブリッジ | UniTask 2.x(NuGet は 2.5.10 以上、Unity は 2.0.0 以上)、R3 1.3.1 以上 |
動作を確かめている環境は次のとおりです。
- Unity 6(6000.3)の Editor(EditMode、PlayMode)
- Windows の Unity のプレイヤー(Mono、IL2CPP)
- Android の IL2CPP のビルド(ビルドだけで、端末では実行していません)
- Godot 4.4.1(.NET SDK 10 でビルド)
- .NET の NativeAOT
Android と iOS の端末、WebGL、6000.3 より前の Unity(2023.1 と 2023.2 そのものを含む)、4.4.1 以外の Godot では確かめていません。
次に読むページ
Section titled “次に読むページ”- 最初のフロー:コンソールのプログラムで、World を動かしてみる
- Unity のセットアップ、Godot のセットアップ
- サンプル:Unity(Package Manager から取り込む)、Godot(
samples/godotを開く)