LemonteaのUnity部屋

LemonteaのUnity部屋

Unityの使い方とかです~

初めてのUnity(5) ゲームオーバーとジャンプ

youtu.be


こんにちは。レモンティーです。
今回も前回↓の続きです。

sawalemounity.hatenablog.com


それでは予告通り、ゲームオーバーとジャンプを作りましょう。

ざっくり説明すると
①足場とかのタグ付け
②Cubeの下面だけアウトにする
③GameOverシーンの実装
スクリプトの作成とアタッチ

となります。
ぱっと見、長い気がしますが実質そうでもないです。
さっそくやっていきましょう!


ところでタグの説明はまだでしたね。
これは、Inspectorの↓赤丸部分に表示されているやつです。

f:id:sawalemontea:20170731233452p:plain

主に、オブジェクトをまとめて、"●●な人たち"として扱う時に使います。
今回は、
ジャンプの時着地できる"足場になれる人たち"として「footing」タグ
Playerが当たるとゲームオーバーになる"コロシヤな人たち"として「GameOver」タグ

の2種類を使っていきます。

と言っても、そんなタグは当然デフォルトではありません。
なので、

f:id:sawalemontea:20170731233508p:plain

のようにAdd Tagを選択してタグを追加します。

f:id:sawalemontea:20170731233522p:plain

するとこんな画面がでるので
+マークをクリックし…

f:id:sawalemontea:20170731233534p:plain

footingと入力してSaveを押します。

f:id:sawalemontea:20170731233547p:plain

するとこんな風に保存されました。
さっそくFloorのInspectorから
footingタグに変更します。

f:id:sawalemontea:20170731233559p:plain

これでFloorのタグがfootingになりました。
Cubeのタグもfootingに変えておきましょう。

また、同じ手順でGameOverタグも追加してください。


次に、Cubeの下敷きになった場合のみGameOverになる下準備をします。
単純な接触判定だと上にも乗れませんからね。

まずは
Create>3D Object>Cube でCube(1)をつくります。

できたらTransformを↓のように変えて、
Cubeの下面に張り付かせます。
そして、Cube(1)にRigidBodyをつけ、Dragを10にしておきましょう。

f:id:sawalemontea:20170731233741p:plain

次にCube(1)のタグをGameOverに変えます。

f:id:sawalemontea:20170731233720p:plain



ここで、後々便利なので、
CubeとCube(1)の二つをまとめて扱えるようにします。

Create>Create Empty でgameobjectを作り、
名前をBlockに変えます。

そして、CubeとCube(1)をBlockの子オブジェクトにしましょう。
Blockの上にドロップすればいいんでしたね。

↓のようになっていればOKです。

f:id:sawalemontea:20170731233804p:plain


これで下面のみ判定の下準備はOKです。


GameOver時に飛ばされるシーンを作ります。

まずは今のシーンの変更を保存しましょう。

できたら、セーブと同じFileメニューの一番上
New Sceneを選びましょう。

あっけないですが、新しいシーンに切り替わります。
このシーンにGameOverという名前をつけてセーブしましょう。

やり方はいつものセーブと同じです。
場所もTestSceneと同じでいいです。

次に、他のシーンからとんでくるために、
BuildSettingに登録します

File>BuildSettings で↓の画面がでます。

f:id:sawalemontea:20170731233819p:plain

赤丸の所をクリックすれば登録されます。

f:id:sawalemontea:20170731233831p:plain

これでOKです。
右上の×をクリックして閉じましょう。

まだGameOverシーンは後回しです。
とりあえず作ったのでTestSceneに戻りましょう。
↓をダブルクリックすれば戻れます。

f:id:sawalemontea:20170731233848p:plain

④さあ、準備は整いました。
あとは、この前作ったPlayerMoovスクリプト
↓に書き換えてください。今は全部消してコピペでいいです。

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

public class PlayerMoov : MonoBehaviour {
    int OnFooting = 0;
	// Update is called once per frame
	void Update () {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if(OnFooting == 1)
            {
                GetComponent<Rigidbody>().AddForce(Vector3.up*5,ForceMode.Impulse);
                OnFooting = 0;
            }
        }
        Vector3 Direction = new Vector3(x, 0, z)*0.15f;
        GetComponent<Rigidbody>().AddForce(Direction, ForceMode.VelocityChange);
        Direction = Vector3.zero;
    if(transform.position.y <= -10)
         {
            SceneManager.LoadScene("GameOver");
         }
	}

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "GameOver")
        {
            SceneManager.LoadScene("GameOver");
        }

        if(collision.gameObject.tag == "footing")
        {
            OnFooting = 1;
        }
    }
}


お疲れさまでした。
これでゲームオーバーとジャンプの完成です!
あ、今回は落下もゲームオーバーです。
それはスクリプトで書いてあります。

ブロックに関しては、
乗れるし押せるけど、下敷きにされるとぺしゃんこ…
ゲームオーバーと言うわけです。

次回は、ブロックの量産をやります。
その次にゴールを作れば、骨組みは完成です。
その後の飾り付けは超・奥が深いですよ!

ちなみにCube(1)がぴらぴらして気に入らない人は
↓を見てCube(1)を透明にすればいいです。

sawalemounity.hatenablog.com


それではまた次回お会いしませう~


Next

sawalemounity.hatenablog.com

関連
今回使用したスクリプト
sawalemounity.hatenablog.com

sawalemounity.hatenablog.com

sawalemounity.hatenablog.com