기본 이동, 네트워크, 카메라 설정 + 기본 애셋 추가

This commit is contained in:
2026-01-24 02:01:02 +09:00
parent 8fa295e6df
commit f29f44e8ac
249 changed files with 17130 additions and 55 deletions

View File

@@ -0,0 +1,75 @@
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
using Unity.Cinemachine;
public class NetworkPlayerController : NetworkBehaviour
{
[Header("Movement Settings")]
public float moveSpeed = 5f;
public float rotationSpeed = 10f;
public float jumpHeight = 1.5f;
public float gravity = -19.62f;
[Header("Input")]
[SerializeField] private InputActionAsset inputActions;
private Vector2 _moveInput;
private CharacterController _controller;
private PlayerInputActions _inputActions;
private Animator _animator;
void Awake()
{
_controller = GetComponent<CharacterController>();
_animator = GetComponent<Animator>();
}
// NGO 초기화
public override void OnNetworkSpawn()
{
if (!IsOwner) return;
// 1. 씬에 있는 가상 카메라를 찾습니다.
// Unity 6에서는 CinemachineVirtualCamera 대신 CinemachineCamera를 주로 사용합니다.
var vcam = GameObject.FindAnyObjectByType<CinemachineCamera>();
if (vcam != null)
{
// 2. 카메라의 Follow와 LookAt 대상을 '나'로 설정합니다.
vcam.Follow = transform;
vcam.LookAt = transform;
Debug.Log("<color=green>[Camera] 로컬 플레이어에게 카메라가 연결되었습니다.</color>");
}
_inputActions = new PlayerInputActions();
_inputActions.Enable();
}
public override void OnNetworkDespawn()
{
if (IsOwner)
{
if (inputActions != null)
{
inputActions.Disable();
}
}
}
void Update()
{
if (!IsOwner) return;
_moveInput = _inputActions.Player.Move.ReadValue<Vector2>();
Vector3 move = new Vector3(_moveInput.x, 0, _moveInput.y).normalized;
if (move.magnitude >= 0.1f)
{
Quaternion targetRotation = Quaternion.LookRotation(move);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
_controller.Move(move * moveSpeed * Time.deltaTime);
}
_animator.SetFloat("MoveSpeed", move.magnitude);
}
}