ファイブボックスベジタブルゲームの作り方のサムネイル画像

スイカゲーム風「ベジタブルゲーム」の作り、2回目の今回は、InputSystemを使って、野菜を左右に運ぶクレーンの動きを作成します。

ユニティルーム サンプルの投稿ゲーム

ファイブボックス作成 スイカゲーム風、ベジタブルゲームイメージ画像

その他のベジタブルゲームの作り方の記事

クレーンの作成

オブジェクトの作成

Vol.01 の最後に取得した素材から「クレーン(閉)」を選択し、Hierarchy上にドラッグ&ドロップしオブジェクトを作成します。

スイカゲーム風ベジタブルゲームの作り方 クレーンの作成1

Inspector から以下のように指定します。

  1. 名前Crane (クレーン)
  2. Position(座標):x座標を 0、y座標を 4.5
  3. Scale (大きさ):X Y ともに 0.2
スイカゲーム風ベジタブルゲームの作り方 クレーンの作成2

この段階では以下のような状態になっていると思います。

スイカゲーム風ベジタブルゲームの作り方 クレーンの完成図

InputSystemキー設定

「06_Other」フォルダの InputAction を立ち上げます。

ここに新たなActionを追加します。

  1. Acton Maps に Player を選択
  2. Action の右側のプラスボタンをおしてActionを追加、「Horizontal」という名前に変更
  3. Action Type に「Value」に指定
     表示された Control Type を「Axis」に指定
スイカゲーム風ベジタブルゲームの作り方 InputSystemの設定1

作成したAction「Horizontal」を編集

  1. 右側のプラスボタンを押して「Add Positive¥Negative Binding」を選択
     ⇒ [1D Axis] が作成されます。
  2. 右側のメニュー「Binding」
    ・Path に「RightArrow[KeyBord&Mouse]」を選択
    ・Positive を指定 
    ・Keybord&Mouse にチェック
スイカゲーム風ベジタブルゲームの作り方 InputSystemの設定2

同様に上の図の様に Keybord、Gamepad、それぞれのPositive、Negative の値を追加します。お好みのボタンを指定してください。

最後は右上の「×」ボタンを押して編集メニューを閉じます。

「Save」を押して保存します。

スイカゲーム風ベジタブルゲームの作り方 InputSystemの設定3

Craneのプログラム

続いて Clane のプログラムを作成します。

「02_Scripts」フォルダに CraneController というスクリプトファイルを作成します。

CraneController.cs を立ち上げて、NameSpace に InputSystem を使用するためのコードを入力します。

CraneController.csusing UnityEngine.InputSystem;

ここでは、InputSystem から Positive、Negative の信号を受け取るための変数と移動速度を管理する変数を用意します。

変数名アクセス説明
stepXfloatprivateInputSystemから受け取る値を管理
speedfloatprivate移動速度を管理する変数

変数の宣言と初期値の代入、及び Start()関数 でCraneの初期位置を指定します。

float stepX; //nputSystemから受け取る値を管理
float speed; //移動速度を管理する変数 

void Start()
 {
     transform.position = new Vector2(0, 4.5f); //Craneの初期位置
     speed = 0.05f; //移動速度に0.05を代入
 }

続いて InputSystem から情報を入力する関数を用意します。

public void Move(InputAction.CallbackContext context)
{
   //InputSystemからfloat型の値を取得、変数:stepXに代入
   stepX = context.ReadValue<float>();
}

今回は context.ReadValue() で folat型 のデータを取得しています。

このことにより Positive に指定したキーが押されたときは +1 が渡され、Negative に指定したキーが押されたときに -1 が渡され、それぞれ 変数:stepX に代入されます。

最後は取得した値を使って FixedUpdate()関数 でCraneを左右に移動させます。FixedUpdate() を使うことで、どのデバイスでも均等の移動速度を維持することが出来ます。

void FixedUpdate() 
{
   //水平方向の移動
   transform.position += transform.right * stepX * speed; 
}

作成した「CraneController」は Crane にアタッチしておきます。

最後は InputSystem オブジェクトの PlayerInput コンポーネントの Events ⇒ Player を展開し、作成したAction「Horizontal」に CreanCreanController Move() 関数を指定します。

スイカゲーム風ベジタブルゲームの作り方 InputSystemの設定4

フレームの作成

落下する野菜を受け止める左右と下の壁を作成します。尚、この作品は野菜がテーマとなっているので、受け止める壁はお鍋をイメージして作成します。

まずは全体をまとめるオブジェクトを作成します。Hierarchy上で右クリック、または左上のプラスボタンから Create Empty で空のオブジェクトを作成します。

名前を「Wall」に変更し、座標を全て 0 にしておきましょう。

スイカゲーム風ベジタブルゲームの作り方 Wall作成1

作成したWallの上で右クリック、2D Object ⇒ Sprites ⇒ Square から四角形のオブジェクトを作成します。

スイカゲーム風ベジタブルゲームの作り方 Wall作成2

作成したオブジェクトを以下のように修正します。

  1. 名前:BottomWall  
    Tag:Wall タグを作成しセット
  2. Transfomコンポーネント
     Position:x:0、y:-4、z:0
     Scale:x:10、y:1、z:1
  3. SpriteRendererコンポーネント
     Collor:グレー系の色 任意です
  4. BoxColliderコンポーネント 新たに追加
     各プロパティは初期値のままで結構です
スイカゲーム風ベジタブルゲームの作り方 Wall作成3

作成した「BottomWall」を複製し、「RightWall」「LeftWall」 をそれぞれ作成します。

名前と座標、大きさのみ下の図のように変更します。 他のプロパティ値はそのままでOKです。

スイカゲーム風ベジタブルゲームの作り方 Wall作成4

次の野菜の場所

次の野菜が表示されることにより、どこに野菜を落とすのか戦略を立てることができるようになります。その次の野菜が配置さる場所を作成しておきます。

取得済みの素材から[tray]を選択し、Hierarchyにドラッグ&ドロップ、Inspectorで次のように修正します。

  1. 名前Tray
  2. 座標x座標 6.8、y座標 3.5

スイカゲーム風ベジタブルゲームの作り方 トレイ作成1

ここまでで、以下のような配置になっていると思います。

スイカゲーム風ベジタブルゲームの作り方 トレイ作成2

クレーンの移動制限

上のフェーズで左右の枠を作成しましたが、野菜が枠の外や枠の上に落下しないように、クレーンの移動範囲を制限します。

上のフェーズで作成した枠の幅は 2、横位置(x座標)は左右それぞれ -6 , 6 となっています。従って枠の内側の座標は -5 , 5 となっているはずです。

今回はクレーンの水平方向の移動領域を -4.7 から 4.7 にしてみたいと思います。

作成済みの CraneControllerクラスの FixedUpdate()関数 を以下のように修正します。

void FixedUpdate()
{
   transform.position += transform.right * stepX * speed; //記述済み
   float posX = transform.position.x;     //Craneのx座標
   posX = Mathf.Clamp(posX,-4.7f,4.7f);   //posXを-4.7~4.7の範囲におさめる
   transform.position = new Vector3(posX, 4.5f, 0); //座標を再調整 
}

ここで使用した Mathf.Clamp() メソッドは、第一引数で指定した値を、第二引数(最小値)、第三引数(最大値)の範囲に収める関数です。

Mathf.Clamp(float value, float min, float max)

float型の変数:value に対し、最小値(min)、最大値(max)の間の制限を付ける

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

無料体験授業 いつでも受け付けています!

体験授業を受ける子供

スクラッチ、Unityでちょっとしたゲームを作ってみる

HTMLやCSSでWebサイト作成体験

初めてパソコンやタブレットに触れてみる

エクセルやワード、パワーポイントの学習をちょっと体験

まずは1時間程度の無料体験授業を受けて、教室の雰囲気や講師の人柄に触れて頂き、ご自身、お子様に合うのかどうかご確認ください!