김김김의 게임개발
  • 유니티 게임 개발 - Blend Tree
    2023년 10월 12일 21시 18분 56초에 업로드 된 글입니다.
    작성자: noun06

    블렌드 트리는 여러 개의 애니메이션 상태를 조절하는데 사용되는 도구입니다.

    애니메이션의 부드러운 전환과 다양한 입력 조건을 처리하는데 유용합니다.

    블렌드 트리를 만드려면 Animator 컴포넌트를 사용하여 트리를 연결하고 모션을 추가합니다.

    파라미터를 통해 제어가 가능하며 코드를 통해 동작을 변경할 때 사용합니다.

    2D 블렌드 트릴는 두개의 파라미터 값을 기반으로 애니메이션을 혼합하는 노드로 이동, 회전과 같은 입력에 사용됩니다.

    1D 블렌드 트리는 하나의 파라미터 값을 기반으로 애니메이션을 혼합하는 노드로 속도, 점프 같은 입력에 사용됩니다.

    블렌드 트리를 통해 애니메이션 전환의 가중치와 속도를 조절하여 원하는 동작을 자연스럽게 만들 수 있습니다. 

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerDodgingState : PlayerBaseState
    {
        private readonly int DodgeBlendTreeHash = Animator.StringToHash("DodgeBlendTree");
        private readonly int DodgeForwardHash = Animator.StringToHash("DodgeForward");
        private readonly int DodgeRightHash = Animator.StringToHash("DodgeRight");
    
        private float remainingDodgeTime;
        private Vector3 dodgingDirectionInput;
    
        private const float CrossFadeDuration = 0.1f;
    
        public PlayerDodgingState(PlayerStateMachine stateMachine, Vector3 dodgingDirectionInput) : base(stateMachine)
        {
            this.dodgingDirectionInput = dodgingDirectionInput;
        }
    
        public override void Enter()
        {
            remainingDodgeTime = stateMachine.DodgeDuration;
    
            stateMachine.Animator.SetFloat(DodgeForwardHash, dodgingDirectionInput.y);
            stateMachine.Animator.SetFloat(DodgeRightHash, dodgingDirectionInput.x);
            stateMachine.Animator.CrossFadeInFixedTime(DodgeBlendTreeHash, CrossFadeDuration);
        }
    
        public override void Update(float deltaTime)
        {
            Vector3 movement = new Vector3();
    
            movement += stateMachine.transform.right * dodgingDirectionInput.x * stateMachine.DodgeDistance / stateMachine.DodgeDuration;
            movement += stateMachine.transform.forward * dodgingDirectionInput.y * stateMachine.DodgeDistance / stateMachine.DodgeDuration;
    
            Move(movement, deltaTime);
    
            FaceTarget();
    
            remainingDodgeTime -= deltaTime;
    
            if (remainingDodgeTime <= 0f)
            {
                stateMachine.SwitchState(new PlayerTargetingState(stateMachine));
            }
        }
    
        public override void Exit()
        {
    
        }
    }

     

    위 코드는 회피 상태를 관리하는 스크립트로 상태 머신에서 호출됩니다.

    DodgeBlendTreeHash, DodgeForwardHash, DodgeRightHash는 Animator의 Blend Tree와 파라미터를 조작하기 위한 해시 코드로 파라미터 이름을 해싱하여 빠르게 접근할 수 있도록 합니다.

    stateMachine.Animator.SetFloat(DodgeForwardHash, dodgingDirectionInput.y);
     stateMachine.Animator.SetFloat(DodgeRightHash, dodgingDirectionInput.x);

    이 두 줄은 수직과 수평 파라미터를 나타내어 회피 동작의 방향과 각도를 결정합니다. 

    댓글