0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityでFPSゲームな操作

Last updated at Posted at 2025-06-25

こいつをMainCameraにアタッチして使う。
探せばこんな記事いくらでもありそう。車輪の再^n発明
僕は賢くないのでperplexityに8割くらい手伝ってもらった
操作方法はMを押したらマウスがロックされて視点移動ができるようになる。ESCで解除。

camera_WASD.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class camera_WASD : MonoBehaviour
{
    //移動速度
    private float _speed = 3.0f;

    //x軸方向の入力を保存
    private float _input_x;
    //z軸方向の入力を保存
    private float _input_z;

    //FPSモード。マウスをロック。
    private bool isMouseLocked = false;

    void Update()
    {
        //鉛直方向
        float input_Y=0;
        //FPSモード
        // Mキーでロック
        if (Input.GetKeyDown(KeyCode.M))
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;
            isMouseLocked = true;
        }
        // ESCキーで解除
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible = true;
            isMouseLocked = false;
        }
        if (isMouseLocked)
        {
            float mouseX = Input.GetAxis("Mouse X");
            float mouseY = Input.GetAxis("Mouse Y");
            // Y軸(コマの回転)に+1度、X軸(水車の回転)に+2度加算
            Vector3 angles = transform.eulerAngles;
            angles.y += mouseX; // Y軸(コマ)
            angles.x += -mouseY; // X軸(水車)
            transform.eulerAngles = angles;
        }

        //移動
        //x軸方向、z軸方向の入力を取得
        //Horizontal、水平、横方向のイメージ
        _input_x = Input.GetAxis("Horizontal");
        //Vertical、垂直、縦方向のイメージ
        _input_z = Input.GetAxis("Vertical");
        //上や下にいかないように(向いてる方向で上や下にも行っていいならこう)
        //transform.position += transform.forward * _input_z * _speed * Time.deltaTime;
        //transform.position += transform.right * _input_x * _speed * Time.deltaTime;
        Vector3 forward = transform.forward;
        forward.y = 0;
        forward = forward.normalized;
        Vector3 right = transform.right;
        right.y = 0;
        right = right.normalized;
        if (Input.GetKey(KeyCode.Q)) //Qで下降
        {
            input_Y = -1f;
        }
        else if(Input.GetKey(KeyCode.E)) //Eで上昇
        {
            input_Y = 1f;
        }
        transform.position += (forward * _input_z + right * _input_x+new Vector3(0,input_Y,0)) * _speed * Time.deltaTime;

    }
}

今思ったんだけどGenshin ImpactのようにALT押してるときだけ解放でもよかったかもな。まあそれは思想次第だね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?