유니티/간단한 게임

간단한 게임만들기#6(애니메이션 임포트)

오늘의논리 2023. 6. 21. 02:36
728x90

애셋 스토어에서 애니메이션을 가져와 컨트롤을 해보도록 하겠다.

 

  • 먼저 에셋스토어에서 초보자와 친구들 에셋을 임포트 해준다.
  • Boy Prefabs 맵에 배치해준다.

 

  • Hierachy에서 Boy 클릭한 우클릭해서 Prefabs-Unpack Completetly 해주고 Inspector 에서 플레이어 처럼 만들기위해 Box Collider, Rigidbody, Player C# Script, Audio Source, Mesh Renderer 등의 컴포넌트들을 가져와 준다 이때 하나하나 새로 만들어서 값을 넣는게 아닌 Player 오브젝트에서 컴포넌트의 세게를 클릭한 Copy Component 클릭하고 Boy 오브젝트에 돌아와 Paste Component As New 주면 값을 그대로 가져와 복사된다. 이때 Item_sound 점프버튼시 실행함수를 Boy 플레이어로 다시 설정해줘야한다.

  • 근데 이대로 기존 플레이어를 Active 해제를 Boy플레이어를 컨트롤해봐도 잘움직이지 않는다. 이유는 Boy 좌표로 움직여야지 공처럼 힘을주어서 움직이면 안되기 때문이다. 그래서 Player 스크립트의 FixedUpdate 함수를 아래 같이 만든다.
void FixedUpdate()
{
    Vector3 direction = Vector3.forward * variableJoystick.Vertical + Vector3.right * variableJoystick.Horizontal;
    transform.LookAt(transform.position + direction); // 케릭터가 이동방향을 보게 함
    transform.position += direction * speed * Time.deltaTime; // 방향대로 위치를 변경시켜줌
    FreezeRotation(); //회전값을 없애줌(캐릭터가 회전을 거의 안하게 함)
 }

void FreezeRotation()
{
    rb.angularVelocity = Vector3.zero;
}

 

  • 이렇게 하면 케릭터가 움직이고 이동방향을 쳐다보게 된다. 이제 캐릭터가 움직일때 가만히 있기 때문에 애니메이션을 넣어볼건데 먼저 초보자와 친구들 폴더 - Animations - Controllers - BoyAnimController 열어준다.

 

  • 이후 Animations - Humanoid 폴더에서 Run 애니메이션 클립 을끌어다 놓고 Idle 마우스 우클릭- Make Transition 클릭해 이어준다. Run에서도 똑같이 Idle 이어준다.

 

  • 좌측에 Parameters - 추가 - Bool bool타입 변수를만든뒤 IsRun 이라고 이름을 짓고 아까 만든 화살표를 클릭 - Inspector - Conditions 에서 추가 버튼을 눌러 IsRun True 일때 Idle에서 Run 으로가고 반대 화살표엔 반대로 해준다. Has Exit Time 체크해제 해준다.애니메이션이 꺼질때 까지의 시간을 고려해 주는것인데 체크를 해제 준다.

 

  • 그리고 Player 스크립트에서 아래와 같이 애니메이터 변수 선언과 Start 함수 내에서 셋팅을 해준다.

 

  • 그리고 FIxedUpdate 내에서 방향대로 움직이는 아래 한줄 추가해준다.
anim.SetBool("IsRun", direction != Vector3.zero); // 움직이지 이면 True, 아니면 False
  • 실행하면 캐릭터가 움직일 경우 달리고 멈추면 대기하는 것을 있을것이다. 이때 우리가 휴머노이드 폴더에서 애니메이션 클립을 가져와서 사용했는데 말그대로 사람형 이기때문에 적용이 됬고 그외에는 적용이안된다. 이처럼 맞는 애니메이션 클립을 프리펩에 애니메이션 컨트롤러에 넣어줘야 작동한다는걸 있다.
728x90