Unity公式チュートリアルを紐解く

# 補足 - 2021/12/11
現在では、Tutorial Authoring Toolsというパッケージが出ていて、ユーザーによるチュートリアル作成もサポートされています。
https://blog.unity.com/ja/technology/in-editor-tutorials-available-to-try-in-unity-20211
https://docs.unity3d.com/Packages/com.unity.learn.iet-framework.authoring@1.0/manual/index.html

以下は参考程度に。

# 概要
Unityには公式で用意されている[Unity Learn](https://learn.unity.com/)というものがあります。
これはUnityを学ぶ人向けにエディタ上での次に行うべき操作をハイライトなどで教えてくれるようになっており、
Unityエディタ上で動くチュートリアル機能によって実装されています。

今回はこちらの仕組みを見ていき、このチュートリアルの自作ができないか？
という試みです。

よって、今回の対象読者としては、上のUnity Learnを使う初学者、ではなく、すでにUnityを使っている中級者以上(？)となります。

# 環境
* MacBook Pro (Retina, 13-inch, Late 2013)
* macOS Catalina 10.15.6
* Unity 2019.4.13
* Unity Hub 2.4.2
* Interactive Tutorial Core 0.3.0-preview.5 (Platformer Microgameに入っているもの)

今回、プロジェクトはPlatformer Microgameを使用します。
Interactive Tutorial CoreはUnity上のPackageManagerでダウンロードできますが、
1.0.0の直前のpreviewバージョンでTutorial Frameworkと名前が変わっているようです。(LEGO®︎ Microgameではそちらの1.1.0が使用されている。)

Unity Hubからダウンロードし、開くことができます。
![スクリーンショット 2020-10-31 21.33.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/d9ca143c-0612-fe85-be41-d57fe860f337.png)

# チュートリアルのデータを見る
プロジェクトを開くと、Assets/Tutorialsフォルダ内にチュートリアルのデータが入っているので、とりあえずこちらを見ていきます。
![スクリーンショット 2020-11-01 14.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/361d0542-ab5d-994d-2058-d134c11fdcda.png)

## TutorialContainerクラス
Assets/Tutorials/Tutorials.assetを見てみます。
インスペクタでは「Show Tutorial」ボタンしか表示されないので、インスペクタをデバッグ表示にして見ていきます。

![スクリーンショット 2020-11-01 14.10.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/82574a4a-faaf-2ee5-b8f1-fc0f0c29a105.png)

Scriptの欄を見ると、Tutorial CoreのTutorialContainerというScriptableObjectであることが分かります。
ヘッダー画像、タイトル、プロジェクト名、説明、レイアウト、セクションが含まれており、セクションはさらに別のScriptableObjectを参照しているようです。
これが最も親となる、メインのファイルのようです。

## Tutorialクラス
次にAssets/Tutorials/Tutorial1/Walkthrough1.assetを見てみます。
このプロジェクトではTutorial1~5があり、それらが実際にインタラクティブなチュートリアルを実現しているらしいです。
とりあえずこちらのファイルもインスペクタで見ていきます。
![スクリーンショット 2020-11-01 14.17.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/f3aadc22-2b1c-813d-1913-26b4ba39fcda.png)

見ると、こちらのPagesにさらに子となるScriptableObjectへの参照があります。
これらがウインドウやボタンにハイライトしたり、個別の機能を提供しており、それを順に再生していくという仕組みに見えます。

## TutorialPageクラス
それではAssets/Tutorials/Tutorial1/Walkthrough1-01-Introduction.assetを見てみます。
![スクリーンショット 2020-11-01 14.21.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/8b13943c-cf03-6710-f82d-4e5d108c7d06.png)

このScriptableObjectはTutorialPageというものらしいです。
Paragraphsはチュートリアルウインドウの中身や進行条件を記述しているようです。

分かりにくいので、Assets/Tutorials/Tutorial1/Walkthrough1-02-First-Play.assetをインスペクタ表示で見てみます。
このアセットが担っている部分は、エディタ上部の再生ボタンを押させる。というものです。
今度はデバッグ表示ではなく、普通のインスペクタで表示してみます。
![スクリーンショット 2020-11-01 14.44.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/d71f504f-305b-2041-d82d-d26a4514efb9.png)

Paragraphs内のType Instructionになっている部分を見ると、Criteriaというところにどうやらそれっぽい記述があります。

そのほかにCamera Settingsでシーンビューのカメラ位置などを変えたり、音を鳴らしたりできるようです。

### Instruction
Instructionに関して深く掘ってみます。

#### Criteria Completion
ここには

* Completed When All Are True (全て完了)
* Completed When Any Is True (どれか一つ完了)

の二つで終了条件を記述できるようになっています。

#### Criteria
Criteriaとは、判定基準、評価基準という意味らしいです。
ここのTypeには以下の種類があるようです。
![スクリーンショット 2020-11-01 14.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46278/e202fb27-b232-48ad-d385-b7c460650c80.png)
ここは深くは掘りませんが、名前からなんとなく想像できるかと思います。

# まとめ
チュートリアルのアセットについてまとめます。
階層としては

* TutorialContainer
    * Tutorial
        * TutorialPage

という風になっており、それぞれが複数個の子を持つようになっています。
TutorialPage内のParagraphs内にチュートリアルウインドウ内の表示と実際の挙動を記述していく。という形です。
これがわかれば、とりあえずエディタ上でのインタラクティブなチュートリアルの自作や改変ができそうです。

# P.S.
実は今回はゲーム内でのチュートリアル実装や、エディタ拡張の実装に役立てる。
というのが本題のつもりだったのですが、長くなりそうだったので、今回はチュートリアルのデータの作りだけとしました。
途中で力尽きているので、おかしな記述があるかもしれません。
年末辺りにInstruction周りなどをもう少し深く掘り下げて書けたらと思います。