【Unity6】FPSっぽい挙動の作成覚書

この記事は約4分で読めます。
スポンサーリンク

やりたいこと

Unityでマウスで操作するFPSっぽい挙動を作成します。

作成方法というか注意点などを挙げていきます。

また作成中なので間違いがあるかもしれませんので参考程度に見てください。

仕様:

マウスの左右移動 → 視点移動

左クリック → 前進

壁にぶつかったら止まる

スポンサーリンク

環境

Unity:6000.0.23f1.7976.6000.0/Staging4246

スポンサーリンク

実装

Playerとカメラの用意

Playerの作成

Hierarchyの+からPlayerとなる3Dオブジェクトを作成します。

FPSで見えないのでなんでもいいのですがCubeにしました。今後の当たり判定などを考えるとCubeが無難だと思います。

Cameraの移動

HierarchyビューのMainCameraをPlayerにドラッグアンドドロップしてPlayerの子供にします。

以下のように階層構造になります。

MainCameraをPlayerの子供にすることでPlayerを移動したときに自動的にCameraが追尾するようになります。

上記の通りカメラはPlayerを追尾するので、カメラをPlayerと同じX,Zに移動します。YはPlayerの少し上にします。

下のCubeがPlayerで矢印があるところがカメラです。

PlayerにScriptの追加

Playerには以下のようにしました。

using UnityEngine;

public class player : MonoBehaviour
{
    private float speed = 5.0f;

    void Update()
    {
        float mx = Input.GetAxis("Mouse X");////マウスの移動量の取得
        if (Mathf.Abs(mx) > 0.001f) 
        {
            transform.RotateAround(transform.position, Vector3.up, mx); ////視点の更新
        }

        if (Input.GetMouseButton(0))//////////マウス左ボタンが押されている間繰り返し呼ばれる
        {
            float zMovement = speed * Time.deltaTime;
            transform.Translate(0, 0, zMovement);/////前進
        }
    }
}

物理演算の追加

Playerの設定

PlayerのAddComponentからRigidBodyを追加して以下のように設定を変更します。

Freeze PositionのYにチェックを入れることで物体に衝突したときの跳ねるような挙動を止めます。(必須ではないです。)

Freeze RotationのX,Y,Zにチェックを入れることで物体に衝突したときの回転の挙動を止めます。このチェックを入れないと衝突したときにカメラも一緒に回転するので入れたほうがいいです。

壁、障害物の設定

ここでは以下の記事で行ったBlenderで作成したオブジェクトを壁として使用します。

ただし物理演算を単純にするため”Generate Collider”にチェックは外しました。

追加したオブジェクトをHieralchyビューで選択し、Box Colliderを追加します。

EditCollierをクリックします。

Sceneビューに以下のように緑の枠が表示されるのでオブジェクトに合わせます。

(オブジェクトを選択したときに青枠が表示されますが、それとは別の範囲なので注意)

続いてRigidbodyを追加し以下のようにFreeze PositionおよびFreeze Rotationのすべてのチェックを入れます。

これで衝突しても壁は動いたりしません。

スポンサーリンク

参考にさせていただいたサイト

【Unity】マウスカーソルを使った視点の移動とカメラ追従の実装のメモ(FPS風) - Qiita
はじめに 今回はUnityでFPS風の視点移動を実装する方法を説明したいと思います。以下が最終的にイメージしているものです。マウス操作で視点移動とPlayerの向きを変更させ、wasdで移動です。準備するも…

コメント

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