- Assets/_Game/ 하위로 게임 에셋 통합 - External/ 패키지 벤더별 분류 (Synty, Animations, UI) - 에셋 네이밍 컨벤션 확립 및 적용 (Data_Skill_, Data_SkillEffect_, Prefab_, Anim_, Model_, BT_ 등) - pre-commit hook으로 네이밍 컨벤션 자동 검사 추가 - RESTRUCTURE_CHECKLIST.md 작성 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
99 lines
2.9 KiB
C#
99 lines
2.9 KiB
C#
using UnityEngine;
|
|
using Unity.Netcode;
|
|
|
|
namespace Colosseum.Player
|
|
{
|
|
/// <summary>
|
|
/// 플레이어 애니메이션 컨트롤러
|
|
/// 이동 속도에 따라 Idle/Walk/Run 애니메이션 제어
|
|
/// </summary>
|
|
[RequireComponent(typeof(Animator))]
|
|
[RequireComponent(typeof(PlayerMovement))]
|
|
public class PlayerAnimationController : NetworkBehaviour
|
|
{
|
|
[Header("Animation Parameters")]
|
|
[SerializeField] private string speedParam = "Speed";
|
|
[SerializeField] private string isGroundedParam = "IsGrounded";
|
|
[SerializeField] private string jumpTriggerParam = "Jump";
|
|
[SerializeField] private string landTriggerParam = "Land";
|
|
|
|
[Header("Settings")]
|
|
[SerializeField] private float speedSmoothTime = 0.1f;
|
|
|
|
private Animator animator;
|
|
private PlayerMovement playerMovement;
|
|
private CharacterController characterController;
|
|
private float currentSpeed;
|
|
private float speedVelocity;
|
|
private bool wasGrounded = true;
|
|
private bool isJumpingAnimation;
|
|
|
|
private void Awake()
|
|
{
|
|
animator = GetComponent<Animator>();
|
|
playerMovement = GetComponent<PlayerMovement>();
|
|
characterController = GetComponent<CharacterController>();
|
|
}
|
|
|
|
public override void OnNetworkSpawn()
|
|
{
|
|
if (!IsOwner)
|
|
{
|
|
enabled = false;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!IsOwner) return;
|
|
|
|
UpdateAnimationParameters();
|
|
}
|
|
|
|
private void UpdateAnimationParameters()
|
|
{
|
|
// PlayerMovement에서 직접 속도 가져오기
|
|
float targetSpeed = playerMovement.CurrentMoveSpeed;
|
|
|
|
// 부드러운 속도 변화
|
|
currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedVelocity, speedSmoothTime);
|
|
|
|
// 지면 접촉 상태
|
|
bool isGrounded = characterController.isGrounded;
|
|
|
|
// 착지 감지 (공중에서 지면으로)
|
|
if (!wasGrounded && isGrounded && isJumpingAnimation)
|
|
{
|
|
PlayLand();
|
|
}
|
|
|
|
// 애니메이터 파라미터 설정
|
|
animator.SetFloat(speedParam, currentSpeed);
|
|
animator.SetBool(isGroundedParam, isGrounded);
|
|
|
|
wasGrounded = isGrounded;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 점프 애니메이션 트리거 (외부에서 호출)
|
|
/// </summary>
|
|
public void PlayJump()
|
|
{
|
|
if (IsOwner)
|
|
{
|
|
isJumpingAnimation = true;
|
|
animator.SetTrigger(jumpTriggerParam);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 착지 애니메이션 트리거
|
|
/// </summary>
|
|
private void PlayLand()
|
|
{
|
|
isJumpingAnimation = false;
|
|
animator.SetTrigger(landTriggerParam);
|
|
}
|
|
}
|
|
}
|