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」のスクリプトから必要個所を抜き出して使用しています。
