Unityで3Dミニゲームを作る #1

投稿者: | 2019-11-30

Create からプレイヤーにするCubeを作ります。

インスペクタでCubeのPositionをすべて0にします。

Cubeがワールドの中央に移動します。

メインカメラの位置を調節します。シーンビューを使って、カメラから見るのにちょうどよいところへ視点を移動します。

シーンビューで右クリックしながら、W,A,S,Dキーを使って視点を移動できます。

ヒエラルキーウィンドウでカメラを選択して、GameObject -> Align With View をクリックすると、シーンビューの視点と同じところにカメラが移動して、同じ方向を向いてくれます。

物理演算で動かすので、CubeにAdd ComponentからRigidbodyを付けます。

重力を使うのでUse Gravityがオンになっていることを確認します。

is Kinematicはオフにします。

さらにスクリプトを付けます。プロジェクト内に存在しない名前で検索すると、新規スクリプトを作成するボタンが出るのでクリックします。

Create and Addでこの名前の新規スクリプトが作成されます。

インスペクタで、追加されたスクリプトをダブルクリックするとVisual Studioが開きます。

マウスで左クリックをしたときに、AddForce でCubeに上方向の力を加えます。

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

public class playerScript : MonoBehaviour
{
    Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            rb.AddForce(transform.up * 5f, ForceMode.Impulse);
        }
    }
}

transform.up はデフォルトのRotationでのCubeの真上(Y軸)方向を指します。
ForceMode.Impulse に設定すると、AddForceが呼ばれたときに一度だけ瞬間的な力を加えます。

Cubeを左右に動かす

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        float turn = Input.GetAxis("Horizontal");
        rb.AddForce(new Vector3(-turn, 1f, 0) * 5f, ForceMode.Impulse);
    }
}

Input.GetAxis(“Horizontal”); で左右方向の入力を得ます。PCのキーボードだとA,Dや←,→キーです。右入力で1、左入力で-1、入力が無いと0の値がturnに代入されます。キーの押し具合によって、その中間の値になります。
transform.up を new Vector3(0, 1f, 0)に変えて、左右(X軸)方向にturnの値を入れています。

カメラが近いので、シーンビューで視点を後ろに下げて、Align With Viewをします。

また、左右へ行き過ぎるので、力を半分にします。

rb.AddForce(new Vector3(-turn/2, 1f, 0) * 5f, ForceMode.Impulse);

Cubeが移動できる範囲を限定する

Cubeが画面の外へ出そうになるとゲームオーバーになるようにします。

ゲームオーバーにする代わりに、とりあえず現在のシーンを再読み込みするようにしてみます。スクリプトでシーンを切り替えるには、File -> Build Settings… のScenes In Buildに現在のシーンをドラッグアンドドロップします。

何も押さずに閉じます。

Cubeの移動範囲を設定します。
ゲーム画面を見ながら、シーンビューでCubeを左に目一杯移動させます。

このときのX座標を確認します。

void Update(){} の中に、CubeのX座標が9f以上になると、シーンを読み込むコードを追加します。

if (transform.position.x > 9f)
{
    SceneManager.LoadScene("flyingCube");
}

さらに冒頭にusingを追加します。

using UnityEngine.SceneManagement;

左に行くとシーンが再開するようになりました。

これを他の3方向でもやります。

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

コメントを残す

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