Unityで3Dミニゲームを作る #3 爆発のパーティクルを付ける

投稿者: | 2019-12-02

プレイヤーが枠からはみ出たときに爆発させるようにします。

Playerにつけたスクリプトのクラスの冒頭に爆発のオブジェクトを宣言します。

public GameObject explosion;

publicにしているので、インスペクタにオブジェクトをアタッチできるようになります。標準アセットに入ってるExplosionパーティクルをここにドラッグアンドドロップします。

Playerが枠から外れたときにシーンを再ロードするのをやめて、爆発のパーティクルが出るオブジェクトを生成して、その後にプレイヤーを破壊します。

if (transform.position.x > 9f || transform.position.x < -9f || transform.position.y > 5.5f || transform.position.y < -5f)
{
    //SceneManager.LoadScene("flyingCube");

    Instantiate(explosion, transform.position, transform.rotation); // 爆発させる
    Destroy(gameObject); // プレイヤーを削除する
}

transform.position, transform.rotationとして、explosionをPlayerと同じ位置に生成しています。

シーンの再読み込みは、とりあえずキーボード入力をしたときに行うようにします。

if (Input.GetKeyDown(KeyCode.Escape)) //Escapeキーを押す
{
    SceneManager.LoadScene("flyingCube");
}

ですが、これをPlayerに付けたスクリプトに追加すると、Playerと一緒にスクリプトもなくなって、キーを押しても何も起こらなくなります。
なので、Playerとは別のオブジェクトのスクリプトに書きます。

新しく空のゲームオブジェクトを作ります。

Add Componentからプロジェクトに無い名前で検索すると、新しいスクリプトが表示されて、この名前がデフォルトで入力されます。

Create and Addで新しいスクリプトを追加します。

このスクリプトにシーン差読み込みのためのコードを書きます。

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

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

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape)) //Escapeキーを押す
        {
            SceneManager.LoadScene("flyingCube");
        }
    }
}


Playerが破壊されたあとも再読み込みできますが、Ballは生成されなくなります。

PlayerがBallにぶつかって手前に来たときも爆発するように、if文の条件を増やしてみます。

if (transform.position.x > 9f || transform.position.x < -9f || transform.position.y > 5.5f || transform.position.y < -5f || transform.position.z > 7f)
{
    Instantiate(explosion, transform.position, transform.rotation);
    Destroy(gameObject);
}

コメントを残す

メールアドレスが公開されることはありません。