未来を創る、テックコミュニティー

代表勉強通信~Unity Learnする③

草場代表
2020/10/18

こんばんは。代表の草場です。
今回は、Unity LearnのLesson 1.3 – High Speed Chaseです。

まず、前回作ったスクリプトをいじります。ハードコードよくないので、変数使います。
float speed = 5.0f;
が、、またしても、

No MonoBehaviour script in the file, or their names do not match the file name.

呪いか。気にせず進みます。Unity上でSpeedいじれるよう、以下に変更します。
public float speed = 5.0f;
これで車のInspectorにspeedが現れます(はず)。

さて、車と一緒にカメラも動くようにしたい。視点を車視点にするイメージですね。
新しく、スクリプトを準備。FollowPlayerと名付けています。それをカメラにアタッチ。
ゲームオブジェクトにダイレクトにアクセスするために、以下をコードに追加します。
public GameObject player;
そうすると、カメラのInspectorにPlayerが加わります。ここに参照したいゲームオブジェクトをアタッチ。今回は車です。
そして、カメラの位置と車の位置を一致させます。
transform.positionで、まずはカメラの位置を取得。そして
player.transform.positionで、車の位置を取得。以下で、カメラの位置と車の位置を一致させます。Update()の中に加える。
transform.position = player.transfrom.position;
カメラの位置をより適切にするために、オフセットします。
player.transform.position + (0, 5, -7);
としたいところですが、3次元ベクトルとして認識させたいので、
player.transform.position + new Vector3(0, 5, -7);
new、新しく作ったから。

ハードコードなので、コードをきれいにする。
private Vector offset = new Vector3(0, 5, -7);
を加えます。そして、player.transform.position + offsetにします。

OK。Play Mode時の色を変えます。今Play Modeにすると暗い色になります。
Edit > Preferenceクリック。Colorsのところに、Playmode tintがあるので、そこで色が変わります。

さて、車を動かして、障害物を避けます。車を動かしているスクリプトを開きます。変数は小文字で始めるらしいので、
public float turnSpeed;
を追加。そしてキーをUpdate()関数に設定します。
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed);
完了。

より動かしやすくします。
Unity画面で、Edit>Project SettingでInput Managerへ。Axesを展開します。例えばFire1を見ると、left ctrlを押すと、Fire1が発動。Jumpはスペースを打てばいいみたいです。いいね。
Horizontal とVerticalに注目。これでどうやって水平方向と垂直方向に車を動かすかがわかります。

horisontalInputという変数を追加します。これで、キーを押しながら左右に動くようにできます。
public float horizontalInput;
そして、Update()関数の中身でturnSpeedにhorizontalInputを乗算してあげます。これでキー左キーを動かすと左に、右キーを動かすと右に。ただし、horizontalInputが何者かを定義する必要あるので、
horizontalInput = Input.GetAxis("Horizontal");
を追加。InputはInput Managerにアクセス、そして軸をとってきて、”Horizontal”という文字列を代入です。
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed * horizontalInput);

今度はスピードもいじりたいということで、Vertical部分に注目。変数に、
public float forwardInput;
を追加。そして、
forwardInput = Input.GetAxis("Vertical");
で変数定義。これを前後に動かくスクリプトに追加します。
transform.Translate(Vector3.right * Time.deltaTime * speed * forwardInput);

OK。しかし、現状、見え方が変です。車がそのまま右に動いている。そのため、回転を表現したい。
transform.Rotate(Vector3.up, Time.deltaTime * turnSpeed * horizontalInput);
でOK。Vector3.up軸に沿って、フレームごとに Time.deltaTime * turnSpeed * horizontalInputで回転させます。
あとはヒエラルキーとスクリプトをきれいにします。障害物を6個、生成しましたが、空のオブジェクトを用意して、すべての省が偽物をその中に入れる。効用は別の機会に説明するとのことです。

完了。

明日はChallenge 1 – Plane Programmingをやります。

この記事を書いた人
草場代表
エディター