Unity|3Dゲームでボールを投げる、弾を発射する。Part1.UIと視線変更(カメラ移動)

当ページのリンクには広告が含まれています。

Unity3Dで「ボールを投げる(弾を発射する)」を作成してみます。一人称視点(FPS視点)で視線のみを動かして、基本的なオブジェクトを飛ばす仕組みを作成していきます。

はじめに

一人称視点の簡易的なゲームを作成していきます。撃ち合うFPSゲームではなく、イメージとしては「ボーリング」や「マト当て」に近いです。シンプルな仕組みなので初心者でも作成しやすいです。Part1では簡単なUI作成と視線変更(カメラ移動)を作成します。

Unityのバージョン

今回は「Unity 6000.4.2f1」バージョンで作成していきます。UnityHubから「新しいプロジェクト」を選択、テンプレートは「Universal 3D」を選択します。

作成開始

まずは簡単なUIを作成していきます。

UI作成

「3DObject」→「Plane」を追加。

名前を「floor」に変更してScaleを変更しておきます。

「CreateEmpty」で空オブジェクトを追加して名前を「boxes」に変更。

配下に「3DObject」→「Cube」を追加、「AddComponent」から「Rigidbody」を追加します。

「Cube」を複製して下記の様に適当に並べます。マトになります。

「CreateEmpty」で空オブジェクトを追加して名前を「Player」に変更。

「MainCamera」を「Player」の配下に移動します。

ゲーム画面が下記の様な感じに表示されていたらOKです。

視線変更(カメラ移動)

マウスを動かすと連動してカメラが動くようにしていきます(FPS視点)。Playerに「AddComponent」から「PlayerInput」を追加。Behaviorを「InvokeUnityEvents」に変更します。

Projectの「+」から「Scripting」→「MonoBehaviourScript」を選択して、新規スクリプトを作成。名前は「PlayerLook」に変更します。

スクリプトの中身を下記に変更します。マウスの動きに合わせて回転させます。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerLook : MonoBehaviour
{
    [SerializeField] private float rotateSpeed;

    private Vector2 m_Rotation;
    private Vector2 m_Look;

    public void OnLook(InputAction.CallbackContext context)
    {
        m_Look = context.ReadValue<Vector2>();
    }
    public void Update()
    {
        Look(m_Look);
    }
    private void Look(Vector2 rotate)
    {
        if (rotate.sqrMagnitude < 0.01)
            return;

        var scaledRotateSpeed = rotateSpeed * Time.deltaTime;

        m_Rotation.y += rotate.x * scaledRotateSpeed;
        m_Rotation.x = Mathf.Clamp(m_Rotation.x - rotate.y * scaledRotateSpeed, -89, 89);
        transform.localEulerAngles = m_Rotation;
    }
}

スクリプトを「Player」にアタッチします。

PlayerInputの「Events」→「Player」→「Look」に作成したスクリプト、関数を指定します。

実行してみて下記の様にマウスを動かした時にカメラが動けばOKです。

スクリプトは「InputSystem」の「Samples」にある「SimpleDemo」のスクリプトから必要個所を抜き出して使用しています。

タイトルとURLをコピーしました