Unityで2DのシンプルゲームをVS(Visual Scripting)で作ってみる

Visual Scriptingは旧Boltと言われたものを、正式にUnityに取り込んだもののようですが、ゲームエンジンでこのようなスクリプティングを使うのはUnityだけではないですが、おそらく最もポピュラーなのがUnityのVSではないかと思うので、Scratchで最初に作ってみるような2Dゲームを作ってみます。

全体の画面はこんな感じで、右からTreeが移動してきてPlayerはジャンプしてそれを避ける、プレイ開始からの時間表示を行い、PlayerがFloorから落下してしまったらタイマー停止というもの。猫スプライトとサウンド(Coin)はScratchからインポートしています。

オブジェクトを動かすまでは、

https://qiita.com/K3nsuke/items/a1946fe4dac3513f012b

をそのまま使っています。

実際の動作は、

以下から、オブジェクトごとに割り付けられたスクリプト他を記載します。

<Treeの移動を操作するScript machine>

Treeがあるところまで移動(左側の見えなくなる位置)したら、乱数でスタート位置を右側に設定してやります。

 

<Playerの状態チェンジ>

state machineでFloorに設置状態とJumping状態を識別して遷移条件を記述します。

 

<遷移条件 -> Jumping, -> Grounded>

Spaceキー押されたらジャンプ状態に移行

Floorに接地したらGrounded 状態に移行

 

<Jumpingに対応するスクリプト>

Jumpingステートに入ったら、上方向に力を加えてジャンプ、同時に音を出します。

 

<時間表示のためのcanvas設定>

ElapsedTimeCtlにはElapsed変数を追加して、時間更新と停止のスクリプトをアタッチします、Elapsedは単なるラベルです。

 

 

<ElapsedTimeCtlへのScript machine>

Elapsedタイムの更新と停止、停止はPlayerがFloorから押し出されたことをカスタムイベントとして受け取って対処。

 

<scene変数の追加>

sceneの中の共通変数(GameEnd)を定義します。

 

<ゲーム終了判定するScript machine>

Playerにアタッチされて、自分自身がFloorの外に出たことを判定してカスタムイベントを発行します。

この例からもわかるように、裏側ではC#のスクリプトが動いているので、C#から独立したスクリプトブロックにはなっていなくて、多分にC#のコードブロックを意識したものとなっています。したがってVSに慣れればC#でコード書くのも実はそれほど障壁があるものではないと思います。

 

admin

 

 

Visual Scripting(Unity)

Visual Scriptingは最近のゲームエンジンではかなり標準のようで、Unityのtutorialにも紹介されています。

https://learn.unity.com/project/roll-a-ball-visual-scripting-jp?uv=2021.2

Mx MacでもUnityはサポートされているので、動かしてみましたが、ゲーム版のノーコード作成ツールですねこれは。

<環境>

・M1 Mac Air : メモリ16GB

おそらくメモリ8GBだと辛いと思う、16GBでもメモリは12GB程度消費して、CPUリソースは30%ぐらい消費してパームレストは熱くなっていたから。ちなみにintel MacのVMware上のUbuntuではメモリ不足(8GB割り当て)のせいか途中でノーレンスポンス状態、

・Unity version : 2022.3.32f1

tutorialに物理条件(Physic Material)追加して、落下して粘土のようにプレートに付着するのでボールのように自然に跳ね返りするようにしましたがこれもノーコードで実現可能。

 

<Visual Scriptingのサンプル>

Itemの消滅対応のスクリプトですが、On Trigger Enterでcollisionを検出して、collision先がPlayerであればIfブロックでTrue出力してThis(自分自身)をDestroyするという流れになっているのが分かります。この程度だと分かりやすいけれども、ロジックが複雑化すると画面に納まりきらなそうなのは、たとえばScratchのようなブロック言語でも同じ。

Visual Scriptingで検索すると、Unityに限らず他のゲームエンジンでも実装されているようなので、ゲームは開発を役割分担しているはずなのでプログラマー以外のたとえばデザイナーにはこのようなツールは必需品とも言えるのではないかと思います。

 

admin

Unity PlayGround tutorialをゲームらしくしてみる

Tutorialのままだと、らしくないからいくつか機能追加。

① 効果音とBGM追加

② 経過時間追加

③ スタート画面追加

他もあるけど、要はゲームらしくすることで、その過程でUnityつまりゲームエンジンの構造が理解できるようになる。

C#のコードはたくさん書かなくともweb上のコードを流用できるけれども、コードは読めないと変更もできないからある程度の解読能力は前提。C#はJavaの兄弟みたいな言語だからJavaの知識がある程度あれば問題はない。

 

admin

ArgumentException: Input Button Cancel is not setup.To change the input settings use: Edit-Progect Settings-Input.

Unityの画面遷移でボタンをクリックして、タイトルのようなエラーが出る時の対処は、EDIT -> Project Settings -> InputManagerで新たなInput Managerを追加して、Nameに”Cancel”、Positive Buttonに”escape”設定で実行エラーは消えた。

結構前のUnity QA https://answers.unity.com/questions/1381319/argumentexception-input-button-cancel-is-not-setup.html

から検索。

あと書き出すときに、一番最初に出したいシーンを最初に配置しないと思ったような画面遷移になりません。以下はStartSceneを初期画面にしたい場合。

 

admin

Unity Playgroundのコンパイルエラー

Playgroundをasset storeからimportするとコンパイルエラーが出ます。おそらく頻繁にupdateされるUnityとのマッチング問題なんだろうけど。

エラーメッセージ見ると、

AssemblyInfo.csファイルの22行目

—>  [assembly: AssemblyVersion(“1.0.*”)]

の”wild card表記部分を削除”とあったので、

–>  [assembly: AssemblyVersion(“1.0”)]

と変更したら、再コンパイル始まって問題なくコンパイル完了できました。

 

admin

Unity Playground

Uniyでコード書くことなく、既存のassetだけで2Dゲームを組み立てる学習用のキットというところ。

始めるのは、ここからやったほうが良さそうだ。

 

admin

Unityの動作原理

コード無しでも作れるらしいけれども、現実にはオブジェクトにC#で書かれたスクリプトをアタッチして振る舞いを記述するというのが基本なのだ。C#のライブラリはもちろんUnity専用で、それを継承して実装する形。

そこが単純な動きしかしない3Dアニメーション(Blender)などとの違い。

 

admin

Unityゲームエンジン

というのをCoderDojoで初めて見た。見かけは普通のIDE、多分ゲームの開発環境もコード書くのと似てるんだろうと思う。

無償版でも使えそうだからインストールだけはやってみた。

 

admin