はじめに
この記事はUnityの有料アセット「GameCreator」について紹介する記事です。
GameCreatorはUnityのAssetStoreにて65ドル(2019年10月)で購入することができます。
※一応公式フォーラムで記事を書いていいかどうか相談してみた結果OKでした。(コアな部分のソースコードなどは無理ですが)
GameCreatorのアセットのリンクはこちら
GameCreatorの概要
GameCreatorは何かということですが、簡潔にまとめると
- ビジュアルスクリプティング&UnityEditorの拡張アセット
- UnityのInspectorに命令処理を追加していき、上から順番に処理が実行される
- 基本ロジックはActions, Triggers, Conditionsの3つからなり、これらを組み合わせてゲームを構築していく
- ActionsはGameObjectなどに動作を与える
- Triggersは動作などのイベントを発火する
- Conditionsは条件分岐などの制御処理を行う
- 上記以外にプレイヤーを操作するためのPlayer、変数の管理などをするVariables, カメラ操作を制御するCamera Motor などが内包されている
- 自前のActions,Triggers,Conditionsを追加可能(エンジニア向け)
- 追加の拡張モジュールがいくつか販売されており、これらを追加して様々なゲーム機能を追加できる
より詳しい内容について知りたい方は下記の公式ドキュメント(英語)があります
https://docs.gamecreator.io/game-creator/game-creator
デモ
- 公式からWebGLサンプルが公開されているので、こちらを最初に触ってみるのがよいかなと思います。
- https://demos.gamecreator.io/
- デモページの上部に、Inventory,Dialog,Quests,Stats,Behaviorがありますが、これらは追加販売の拡張モジュールのデモになります。これらはGameCreatorのみのアセットには付随していません。またこれらはGame Creatorを購入して追加しないと動きません。ご注意下さい。
実際に使ってみる
実際にUnity上でどう作っていくのかをお見せしていきます。
簡単な例として、「プレイヤーがドアを開ける」サンプルを作ります。
- WASDで操作可能なプレイヤー
- ドアに近づくとメッセージが出る
- Eキーを押すとキャラクターがアクションを行いドアが開く
- ドアが開いている最中に別視点のカメラに切り替える
環境
- Unityのバージョン
- 2018.4.8f
- GameCreatorのバージョン
- 1.0.4
GameCreatorのインストール
UnityAssetStoreでGameCreatorを購入し、プロジェクトにインポートします。
インストールが完了すると、Unityのエディタメニュー部分にGame Creatorが追加されます。
ちなみにメニューの内容は下記の通りです。
メニュー名 | 説明 |
---|---|
Check for Update | 最新バージョンの確認とアップデート |
Reinstall Game Creator | GameCreatorの再インストール |
Module Manager | 拡張モジュールの管理 |
Preference | GameCreatorや拡張モジュールの設定 |
Tools | ドキュメントやツールバー表示 |
Playerをシーンに配置する
まずは操作できるプレイヤーをシーンに配置してみます。
Unityの上部メニューのGameObject または HierarchyのCreateなどから[GameCreator]->[Characters]->[Player]を選択します。
すると、シーン上にPlayerオブジェクトが配置されます。
このままUnityEditorで再生するとそのまま落下していくので、適当な土台をプレイヤーの下に配置しておきます。
この状態で実行するとプレイヤーを動かせます。
[WASD]または[↑→↓←]で移動、[スペース]でジャンプできます。
Camera Motorを追加する
このままだとカメラ(Main Camera)がプレイヤーに追従しないので、追従するようにしたいと思います。
GameCreatorでは、Camera Motorでこれを実現します。
Unityの上部メニューのGameObject または HierarchyのCreateなどから[GameCreator]->[Other]->[Camera Motor]を選択します。
この状態で実行するとマウスの動きとPlayerの動きに合わせてカメラが移動します。
CameraMotorのオブジェクトのInspectorからChangeを選択すると幾つかリストが出てきます。FollowCameraにして実行してみてください。先ほどの実行結果と異なり、カメラがマウスの動きに反応しなくなり、Playerの動きに追従するようになります。
※Camera Motorにはいくつかパラメータや機能がありますがここでは詳しく説明をしません。別の機会に取り上げたいと思います。
Triggersを追加する
プレイヤーが動くようになったところで、イベントを発火するためのTriggerをシーンに配置してみましょう。
[GameCreator]->[Triggers]を選択してください。
Unityのシーンに次のようなTriggerゲームオブジェクトが追加されます。
デフォルトのトリガーはOnStartになっています。これはシーンが開始されたときに実行されるTriggerになっています。これをChangeTriggersを押して、OnPlayerEnterKeyと入力して選択して下さい。OnPlayerEnterKeyはプレイヤーがコライダーに入っているかつ指定したキーが入力されたときにActionを実行するトリガーになります。また、ここではKeyCodeを「E」にしています。
Triggersの設定は以上です。ちなみにこの段階で実行してももちろん何も起こりません。何を行うかはActionsに定義します。
※ちなみにOnPlayerEnterKeyなどコライダーに入ってからActionなどを実行するTriggersは、必ずCollider系のコンポーネントとIsTriggerの有効が必要です。
Actionsを追加する
Actionsはゲームオブジェクトなどに動作を与える処理になります。アクションの追加の仕方は数種類あります。
ここでは、前項「Triggersを追加する」で追加したTriggerのInspectorから、Actionアイコンが表示されているところを押します。
そうすると、Triggerゲームオブジェクトの下にActionsという名前の子ゲームオブジェクトが追加されます。
追加されたActionsを見ると、次のようになっていると思います。ここにアクションを追加していきます。
メッセージログを出してみる
味気ないですが、UnityのDebug.Logと同じようにコンソールに文字列を出すアクションを追加してみます。
ActionsのAdd ActionからDebug Messageと入力し、Debug Messageアクションを追加してみてください。次のようになると思います。
ログがちゃんと出るのか確認してみます。以下の画像ではtriggerゲームオブジェクトの位置がわかりやすいように、Triggerの下にPrimitiveなCubeオブジェクト(BoxColliderなし)を追加して位置を調整してます。
TriggerのSphereColliderに入っている状態でEキーを押すと、コンソールにMessageの内容がログに出ます。
いろいろなアクションを追加してみる
さすがにログだけを出すのはつまらないので、いくつかアクションを追加してみます。
Add Actionを選択して、Transform Moveと入力してアクションを追加してみてください。新しいアクションがDebug Messageアクションの下に追加されたと思います。
Transform Moveアクションはゲームオブジェクトを移動するアクションです。Durationのパラメータを設定することでイーズイン・アウトのようなアニメーションつきで移動してくれたりします。
適当な位置に、Cubeオブジェクトを配置して、ドアとするゲームオブジェクトをシーンに追加しておきます。(ここではDoorというゲームオブジェクトで配置しました)
次に、追加したActionsゲームオブジェクトを選択して、先ほど追加したTransform Moveアクションで、このDoorを上部に移動するようにしたいと思います。今、アクションの名前がMove Playerという名前で表示されていると思いますが、これを以下のように変更してみてください。
項目名 | 設定値 |
---|---|
Target | GameObject, Door |
MoveTo | Transform, Door, Offset(0,10,0) |
Rotate | false |
この状態で実行してみます。TriggerのSphereColliderに入っている状態でEキーを押すと、Doorが上のほうにスーっという感じで移動していきます。
ちなみに、実行中にAdd Actionの右端のボタンが押せる状態になっており、このボタンを押すとTriggerに入らなくてもActionを実行することができます。
さらに色々アクションを追加してみます。各Actionの詳細な説明は今回は行いませんが、他のActionが知りたい方は公式のドキュメントをご覧下さい。
Action名 | 説明 |
---|---|
Play Sound | 音を鳴らす |
Change Property | playerまたはcharacterの設定値を変更する(例えばジャンプ禁止にする) |
Change Camera | Cameraを別のCameraに切り替える |
例として、今回作る「ドアを開ける」Actionsは次の通りです。
- [Change Property]:プレイヤーを操作不可の状態にする
- [Change Camera]:カメラを別の位置にあるカメラ(FixedCamera)に切り替える
- [Transform Move]:ドアを開ける
- [Play Sound]:音を鳴らす
- [Change Camera]:カメラを最初に使っていたメインカメラのほうに切り替える(切り替えるときに1.7秒でスムーズに戻す)
- [Change Property]:プレイヤーを操作可能状態に戻す
Conditionsについて
Conditionsは条件分岐で、If ~ Else と同じ意味です。今回は詳しく扱いませんがとりあえず触れておきたいと思います。
Conditionsを追加するには、[GameCreator]->[Conditions]を選択してください。
Conditionsには条件にマッチすると、Thenに指定したActionが実行されていきます。Add Clauseボタンを押すと、Conditionsの内容を変更できるようになります。また、条件にマッチしなかった場合はElseに指定したActionが実行されます
プレイヤーの3Dモデルを変更したい
今は白い人の3Dモデルですが、別の3Dモデルに変更することもできます。ちなみに、Game Creatorのアニメーションシステムを利用するには、インポートしたアニメーションがHumanoidである必要があります。
UnityのHierarchyのPlayerゲームオブジェクトから Character Annimatorのコンポーネントに、Drop Your 3D Modelという部分があるので、そこに適用したい3Dモデルをドロップします。
UnityChanの3Dモデルを使ってみます。Unity Asset StoreからUnityChanの3Dモデルをプロジェクトにインポートしてモデルをドラッグ&ドロップしてください。プレイヤーがUnityChanの3Dモデルに替わったと思います。ジャンプなどのアニメーションも一応適用されてます。
※環境によっては、UnityChanのパッケージをインポートすると、[using System.Security.Policy]でコンパイルエラーが出ると思います。AutoBlink.csのusing System.Security.Policy部分をコメントアウトしてください。
アニメーションステートを変更したい
3Dモデルは変わりましたが、実行してみると待機状態や走ったときのアニメーションがデフォルトのアニメーションになっていて、これを変更したいと思います。(画像からだとわかりずらいですが…)
GameCreatorの場合、専用のアニメーションステートというものを作ってプレイヤーに反映することでアニメーションが変更できます。
Unityの下のプロジェクトフォルダから、[Create]->[Game Creator]->[Characters]->[Locomotion State]を選択してください。
こんな感じのアイコンのアセットができると思います。
StateUnityChanという名前にしておきます。
作成したアニメーションステートを、PlayerのCharacter Animationに設定します。
作ったアニメーションステートを見ると、長いリストが表示されていると思います。
Character@idleをUnityChanのアニメーションである「WAIT00」、Character@runFowardを同じくUnityChanのアニメーションの「RUN00_F」に設定します。
実行するとアニメーションがいい感じに適用されてます。
まとめ
Game CreatorはUnityの有料アセットになります。Visual Scriptingでロジックを組み込むことが可能です。Triggers/Actions/Conditionsを組み合わせて様々な処理を追加していくことが出来ます。今回は触れませんでしたが、これら3つの基本ロジックは自分で作ることも可能です。次回があればこの3つの機能について深堀りしていきたいと思います。