Unity TCCのサンプルを写経してみた
はじめに
- Unity-Chan! Teamの方達によってリリースされたUnity用のゲーム開発ツールで、キャラクター制御やゲーム開発に役立つ機能やサンプルがたくさん含まれています。TCCとは、Tiny Character Controllerの略。TCCプロジェクトデータは、Gitで配布されています。https://github.com/unity3d-jp/Project_TCC
- 用意されているサンプルを見てみると、「こんなゲームつくりたかった!」と思える機能が満載で、TCC学ばねば!というモチベーションが湧いたことで、この記事を書くに至りました。
- この記事では、シーンの新規作成からサンプルの写経をすることで、TCCを理解する一歩としたいと思います。まずは、TCC機能の範囲とそうじゃない範囲を把握することを目指します。
準備
- Unity 2023.2.15f1(自分が試した環境)
- Unity TCC : GitからダウンロードしてUnityのプロジェクトを作成します
- 今回参考にするサンプルは、UC-01-01_Walk とします。(Assets/TCC/Scenes/01_Move/UC-01-01_Walk)。今回のゴール設定として、アニメーションは無視して、移動だけをできるよう目指します。
やったこと(たぶん30分もかからないと思う)
-
まずは、サンプルシーンを実行して動きを確認しておきます。
-
新規シーンを作成。シーン名は適当につけて保存する。
-
新規シーンと同列に、参考用のサンプルシーンをドラッグ&ドロップでロードする。サンプルのオブジェクトは全てSetActiveをOffにして非表示にする。
-
サンプルシーンのオブジェクトを参考に、オブジェクトを配置する。ここでは最低限のオブジェクトとして以下のオブジェクトだけ再現した。UnitychanRFN_STDの設定内容は、何も変更しなくて良さそうだった。その親要素のPlayerは、Create Emptyから作成。
オブジェクト 補足 SbS_Level_00 地面オブジェクト。ただのCubeでもOK Player Unityちゃんモデルの親要素。今回はこの編集がメイン! UnitychanRFN_STD Unityちゃんモデル。Prefabをそのまま流用 -
Inspectorウィンドウを2つ表示させ、編集用とサンプル表示用にします。まず、右のInspectorウィンドウは、サンプルのPlayerオブジェクトを選択し、南京錠アイコンをクリックしてロックしてます。次に、編集用のPlayerオブジェクトを選択すると、左側に表示が反映されます。
-
コンポーネントを1つ1つ確認し、左側の方へ設定を反映していく。AnimatorやPlayerInputは、サンプルと同じファイルを参照させること。
-
Script MachineのSourceには2種類のタイプがあり、GraphとEmbedがある。Graphにするとファイルとして分離できるんだと思う。Embedは、ゲームオブジェクトに組み込まれるみたい。サンプルがEmbedになっているので、それにならう。
-
コンポーネントをほぼ反映できた。しかしまだ動きません。今回の要である、Script Machineの編集が必要です。ぱっと見では違いがわからないので、Script Graph画面を確認する必要があります。まずはサンプル側のEdit Graph のボタンを押して、中身を確認する。
-
Playerの下には、MoveとAnimation Updateという2つのサブグラフがあるようだ。ちなみにAnimationの方は今回無視する。入力側のMoveサブグラフをダブルクリックして、さらに中身を確認する。
-
Moveサブクラスが表示された。このMove処理を理解することが今回の山場だ。ウィンドウを2つ並べたかったが、Script Graphウィンドウは複数表示させることができないみたいだ。Inspectorウィンドウならできるのに残念。スクリーンショットを撮り、それを見ながら作業を進めた。
-
まだ処理が入ってない方のPlayerオブジェクトのScript Graphを編集していく。初期状態では、On Start, On Updateの2つのノードが表示されているが、今回は使わないので、右クリックからdeleteする。次に、右クリックからSub Graphを選び、サンプルと同じ構成を作る。
-
Script Graph を反映したのち、キャラクターが移動するか確認。動いた! 実行中はScript Graphも表示させておくと、反応がわかりやすい。
把握できたこと・気づき
- New Input Systemが使われていた。New Input System自体を掘り下げて理解するのは別途時間がかかりそうなので、サンプルのActionファイルをそのまま流用するのが楽だと思う。
- 制御は、Script Graphだった。C#スクリプトを開く場面は一回もなかった!
- MoveControlコンポーネントがTCCの一部でキャラクターが動かせるようだ。他にも、Character Settings、CharacterBrain がTCCの機能のようだが、何も考えずサンプルの通りに設置したので、難しくはなかった。
- Script Machineコンポーネントは、Inspector画面では中身があるかどうかがわかりにくいと感じた。制御の要が入っているので、「この中に大事なScript Graph入ってるぜ!」とアピールしてくれてもいい気もする。
- Script Graph上で、Moveノードにたくさん種類があり戸惑った。正解は Move Control: Move(Left Stick)だった。それと、最初の実行時にキャクターが移動しなかったので、原因がわからなかったが、ノードに2本目の線を繋ぐのを忘れていた。VisualScriptに慣れないと・・・
- CharacterController(Unity標準機能)コンポーネントのSetActiveを試しにOffにして実行してみたところ、キャラクターが問題なく動いた。なら必要ないのかなと思い削除しようとしたところ、"CharacterBrain depend on it" と表示され、削除できなかった。TCCではCharacterControllerコンポーネントも必要みたいだ。
動作のしくみのイメージはこんな感じでしょうか
疑問点・理解しきれてない点
- VisualScripting SceneVariables というゲームオブジェクトが自動で生成される。生成タイミングがよく分かってないのと、必要性あるかどうかもいまいちよくわかっていない。
- Unityエディター上では、Script Graphと表記されていたが、他のサイトの記事等ではVisual Scriptingと表現されていたりして、微妙にニュアンスの違いがあるのかも。
まとめ
- キャラクターの移動等は従来の場合、C#スクリプトをゴリゴリ書く必要があったが、TCCを利用したことで、プログラムを一切書かずに動かすことができた!
- Script Graphを触るのは初めてだったので、少し苦戦した。TCCを扱う上で、Script Graphの練度も上げたいと思った。
- TCCサンプルの写経によって、TCCとそうじゃない範囲を把握することができた。また、写経の過程で細かいところまで見ることによって、さまざまな気づきが得られたのでやって良かった。写経おすすめ!
- TCCには、キャラクターの歩行&ダッシュ、ジャンプ&2段ジャンプ、カメラ制御、セーブ・ロード機能など、サンプルが豊富に用意されているため、「自分が作りたいゲームがある & ゲーム開発にUnityを使う」人におすすめしたいです。
Discussion