Simple Camera Controller
3Dシーンで動いて確認したいときに、MainCameraにつけて動かすスクリプト。
InputSystemが標準になって、InputActionとの紐づけが必要になった。
- Main Camera オブジェクトに"Player Input"コンポーネントを追加。
- 新規アクションマップを作成し、"Player Input"コンポーネントのActionsに設定。

- Main Camera に下のC#スクリプトコンポーネントを追加。
//************************************
// Simple Player Camera Controller
//************************************
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerCameraController : MonoBehaviour
{
private const string ACTION_MOVE = "Move";
private const string ACTION_LOOK = "Look";
//private const string ACTION_FIRE = "Fire";
[SerializeField]
float _moveSpeed = 3.0f;
[SerializeField]
float _lookSpeed = 10.0f;
private PlayerInput _playerInput = null;
private Vector2 _currentMoveInputValue = Vector2.zero;
private Vector2 _currentLookInputValue = Vector2.zero;
private Vector3 _previousRotation = Vector3.zero;
private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
if (TryGetComponent(out _playerInput))
{
_playerInput.actions[ACTION_MOVE].started += OnMove;
_playerInput.actions[ACTION_MOVE].performed += OnMove;
_playerInput.actions[ACTION_MOVE].canceled += OnMove;
_playerInput.actions[ACTION_LOOK].started += OnLook;
_playerInput.actions[ACTION_LOOK].performed += OnLook;
_playerInput.actions[ACTION_LOOK].canceled += OnLook;
}
}
void Update()
{
Look();
Move();
}
private void Move()
{
var delta = new Vector3(_currentMoveInputValue.x, 0, _currentMoveInputValue.y);
var moveForward = Quaternion.Euler(0, transform.eulerAngles.y, 0) *delta;
transform.position += moveForward * _moveSpeed * Time.deltaTime;
}
private void Look()
{
_previousRotation.y += _currentLookInputValue.x * _lookSpeed * Time.deltaTime;
_previousRotation.x -= _currentLookInputValue.y * _lookSpeed * Time.deltaTime;
_previousRotation.x = Mathf.Clamp(_previousRotation.x, -89.0F, 89.0F);
transform.localEulerAngles = _previousRotation;
}
public void OnMove(InputAction.CallbackContext context)
{
_currentMoveInputValue = context.ReadValue();
}
public void OnLook(InputAction.CallbackContext context)
{
_currentLookInputValue = context.ReadValue();
}
//public void OnFire()
//{
// var ray = new Ray(transform.position, transform.forward);
// if (Physics.Raycast(ray, out var hit, 100))
// {
// }
//}
}
return