유니티/간단한 게임
간단한 게임만들기#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