見出し画像

(Unity初心者向け)ブロック崩しの作り方  #3 ラケットを動かす

では、早速やっていきます。

前回でボールに動きをつけました。

では、ラケットにも動きをつけていきます。

ラケットがゲームをしている人の入力にしたがって動くように命令する

スクリプトを書きます。

今回はPCの左右の矢印キーを使いたいと思います。


では、スクリプトを用意します。

いつも通り

Projectウィンドの中で、

右クリック > Create > C#script を選択します。

スクリプト名は Racket にします。

画像1

では早速記述していきます。

右矢印を押したら、右にラケットが動く

左矢印を押したら、左にラケットが動く

これらの処理を if構文を使っていきます。

・if構文を簡単に説明すると

if(条件){ 処理の中身 }

 になっています。

今回は

if(右のキーを押したら){ラケットは右に動く}

ということになります。

これをコードにすると以下のようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Racket : MonoBehaviour
{


   // Update is called once per frame
   void Update()
   {
       //右のキーを入力すると右にracketが動く
       if (Input.GetKey(KeyCode.RightArrow))
       {
           this.transform.Translate(0.5f,0f,0f);
       }

       //左にキーを入力すると左にracketが動く
       if (Input.GetKey(KeyCode.LeftArrow))
       {
           this.transform.Translate(-0.5f,0f,0f);
       }
   }
}

今回はupdateの中に処理を書きます。

なぜなら、前回説明したとおり

updateは毎フレーム呼ばれる処理なので、

入力に対して、何度のリアルタイムで反応する必要があるからです。


処理の中身ですが、

transformはオブジェクトの座標(配置)のことを指します。

一つ一つ分解して、理解していくと

このオブジェクトのtransform(座標)をTranslate(変換します)

(x座標について、y座標について、z座標について)

というふうに理解できます。

よって、この処理の意味は

this.transform.Translate( 0.5f, 0f, 0f);

現在地点よりx座標を0.5プラスするということになります。

左も同様にして理解できます。

スクリプトを保存して、ラケットにドラッグ&ドロップで貼り付けます。

では、実際にゲームを実行してみましょう。

画像2

実はラケットがどこまで、左右に動いてしまいます。

動く範囲を制限する必要があります。

スクリプトを修正します。

今回は、Racketの座標を取得して、その座標が壁の中にあるときにだけ動くようにします。

if (右矢印を押す)

{

if(ラケットが壁の中にある)

{ラケットを動かす処理}

}

構造はこのような感じにしていきたいと思います。

では、記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Racket : MonoBehaviour
{


   // Update is called once per frame
   void Update()
   {
       //Racketの座標を取得する
       Transform BarTrans = GameObject.Find("Racket").transform;
       Vector3 pos = BarTrans.position;

       //右のキーを入力すると右にracketが動く
       if (Input.GetKey(KeyCode.RightArrow))
       {
           //Racketの座標が20以下(壁より内側)である場合には移動を実施します。
           if (pos.x < 20)
      {
               this.transform.Translate(0.5f, 0f, 0f);
           }
       }

       //左にキーを入力すると左にracketが動く
       if (Input.GetKey(KeyCode.LeftArrow))
       {
           //Racketの座標が-20以上(壁より内側)である場合には移動を実施します。
           if (pos.x >-20)
      {
               this.transform.Translate(-0.5f, 0f, 0f);
           }
       }
   }
}


20という座標については、本来ならゲームを実行しながら調整する値です。

考え方としては

・右の壁はx=26にあること

・ラケットの大きさは10であること

これらを考慮して、26だと確実に壁を越えるから、26よりは小さいはず

というような感じでゲームを実行しながら調整します。


とりあえずこれでラケットに動きを作ることができました。


次回は、

ブロックを設置して、ボールに当たったら消えるようにしていきます。

次で一応完成になります。














この記事が気に入ったらサポートをしてみませんか?