知識ゼロで Unity をはじめてみた【その4 -キー入力-】

ボタンを押したら前回作成した Cube が出てくるようなものを作りたいと思います!

なんと今回はキーの処理部分にプログラム要素も出てくるので、今までとは若干毛色が変わってきます!

Prefab の作成

前回作成した Cube をテンプレートにするのが良さそうですね。
Unity ではこういうのを「テンプレート」でなく「Prefab」って言うらしいです。

とりあえず [Assets] の中に [Prefabs] フォルダを作成します。

[ヒエラルキー] の [Cube] を、作成した [Prefabs] フォルダにドラッグします。

そうすると [Prefabs] の中に Cube が作成されて、[ヒエラルキー] の [Cube] が青い状態になりました!
これで Prefab 作成は完了っぽいです。

キー入力処理の作成

今度はとうとう本命のキー入力を作っていきます!
まず [ヒエラルキー] を右クリックして [空のオブジェクトを作成] して、
作成された [GameObject] を [CreateObject] にリネームしておきます。

この [CreateObject] を選択してみると、座標がおかしな位置になっていたので一応リセットしておきます。

ではいよいよキー入力の処理を作成します!
まずは [CreateObject] を選択して、[コンポーネントを追加] 。

[新しいスクリプト] を選択して “GameScript” と入力して作成。

すると、[Assets] の中に [GameScript] が追加されました!

スクリプトも一応フォルダを作って整理しておきたいと思います。
[Scripts] フォルダを作成してドラッグして中に [GameScript] を入れちゃいます。

ではでは、[Scripts] フォルダの中の [GameScript] をダブルクリックで開いてみます。
インスペクターにもソースが表示されますが、ここでは編集はできずにただ表示されるだけっぽいです。

ダブルクリックすると、デフォルトの設定ではその PC で C# に紐づけられているアプリケーションで開かれるっぽいです。

開くエディタを変更したい場合は [メニューの編集] → [環境設定] → [外部ツール] → [外部のスクリプトエディター] で任意のアプリケーションに変更可能みたいなので、
さくっと開ける Visual Studio Code で開くように設定してみました。

ファイルを開くと既にテンプレートが作成された状態の C# のソースの編集が出てきます。
早速編集してみます!

public class GameScript : MonoBehaviour
{
	public GameObject Cube ;

	// Start is called before the first frame update
	void Start()
	{
		
	}

	// Update is called once per frame
	void Update()
	{
		if (Input.GetMouseButtonDown(0)) {
			Instantiate(Cube, transform.position, transform.rotation) ;
		}
	}
}

とりあえずこんな感じにしてみました。

  • GameObject 型で Cube を作成
  • マウスクリック処理用の Input.GetMouseButtonDown(0) 判定を追加
  • Cube のインスタンスを作成する Instantiate(Cube, transform.position, transform.rotation)  を追加

Instantiate で使用している transform.position と transform.rotation はこのスクリプトを実行しているオブジェクトの Transform の設定値の事だそうなので、今回の場合は [ヒエラルキー] にさっき追加した [CreateObject] の座標と回転の設定値が入る感じみたいです。
さっきリセットしたので全部 0 が入ってるはず。

では保存して Unity に戻ります。

オブジェクトの設定

Unity に戻って [CreateObject] を選択すると、[GameScript] に新しく [キューブ] という項目が追加されていました!

ここに表示されている [キューブ] というのはさっきスクリプト内で作成した「public GameObject Cube」の事らしいんですが
Unity を日本語設定にしているせいで [Cube] が [キューブ] と表示されているっぽいです。
翻訳対象外の英語だとそのまま英語表示されるみたいで、なんか紛らわしい。。

まぁさておき、この [キューブ] の [ゲームオブジェクト] が未設定状態なので、ここにさっき Prefab 化した Cube を設定してみます。
[キューブ] の歯車をクリック → [アセット] → [Cube] を選択

[キューブ] のところに [Cube] と表示されれば完了です!

もう [ヒエラルキー] の [Cube] は不要なので削除しちゃいます。

実行

ではでは、さっそく実行してみます!!
左クリックすると Cube が出てくるはず。

おおおいっぱいでる!!!

テンション上がってきたので、調子にのってついでに右クリックで球体もでるようにしちゃいますか!!

Sphere の追加

[ヒエラルキー] で右クリック → [3Dオブジェクト] → [スフィア]

一応座標リセットして

[Sphere] のコンポーネントに [リジッドボディ] を追加して、
[SphereCollider] のマテリアルに [New Physic Material] を設定。

[ヒエラルキー] の [Sphere] を [Assets] の [Prefabs] にドラッグ
[ヒエラルキー] の [Sphere] は削除

これで Sphere の追加はできたので、また [GameScript] を編集しましょう!

public class GameScript : MonoBehaviour
{
	public GameObject Cube ;
	public GameObject Sphere ;

	// Start is called before the first frame update
	void Start()
	{
		
	}

	// Update is called once per frame
	void Update()
	{
		if (Input.GetMouseButtonDown(1)) {
			Instantiate(Sphere, transform.position, transform.rotation) ;
		}
		else if (Input.GetMouseButtonDown(0)) {
			Instantiate(Cube, transform.position, transform.rotation) ;
		}
	}
}

さっきの Cube と同じ要領で

  • GameObject の Sphere を追加
  • マウスクリック処理用の Input.GetMouseButtonDown(1) 判定を追加
  • Sphere のインスタンスを作成する Instantiate(Sphere, transform.position, transform.rotation) を追加

今回は Input.GetMouseButtonDown の引数で1を渡しているのがキモですかね。
0を渡すと左クリックで、1を渡すと右クリックの判定になるみたいです。

保存して [CreateObject] を見てみると今度は [スフィア] が増えてました!

さっきと同じ要領で [Prefabs] の [Sphere] を設定します。

再び実行

さてさて、もう一度実行してみます!
右クリックで Sphere が出てくるはず。。

おおお!だいぶ良い感じ!!

ただ、実行中に [ヒエラルキー] を見てみると画面に表示されていない [Cube] や [Sphere] がずっと残ったままになっているのがすごい気になりますね。。

落っこちたら消えるようにしてみたいと思います。

削除用スクリプトの追加

[Assets] の [Scripts] フォルダを開いて右クリック → [作成] → [C#スクリプト]

作成されたファイルを “FallScript” にリネーム。

ダブルクリックで開いてこんな感じにします。

public class FallScript : MonoBehaviour
{
	// Start is called before the first frame update
	void Start()
	{

	}

	// Update is called once per frame
	void Update()
	{
		if( this.transform.position.y < -10){
			Destroy(gameObject) ;
		}
	}
}

床の y座標が -10 なので、y座標が -10 より下になったら削除するという感じです。
Destroy に gameObject という変数を指定すると自分が削除できるみたいです。

Prefab にスクリプトを設定

保存したらUnityにもどって、
[Assets] の [Prefabs] の [Cube] を選択。[コンポーネントを追加] → [スクリプト] → [FallScript]

同じように [Sphere] にも [FallScript] を設定します。

再び実行

ではでは、もう一回実行してみます!

おお、消えてる!!OKっぽそうですね。

といったところで今回はここまで。

<次の記事>
知識ゼロで Unity をはじめてみた【その5 -Android 端末で動かす-】

<これまでの記事>
知識ゼロで Unity をはじめてみた【その1 -環境作成-】
知識ゼロで Unity をはじめてみた【その2 -キューブを配置-】
知識ゼロで Unity をはじめてみた【その3 -キューブの落下とバウンド-】

関連記事

  1. 「そもそもBLEって何?」Bluetoothの技術概要

  2. Elastic Stack を使った予兆検知結果の可視化 〜検知した異…

  3. コミュニティ勉強会「PWAに備える3ヶ月」vol.2に参加してきました…

  4. 電波の届く範囲内だけコンテンツの閲覧を可能に

  5. 【家庭で使える!? Beaconアプリづくりにチャレンジ】BLEAD-…

  6. Elastic Stack を使った予兆検知結果の可視化 〜異常検知の…