참치김밥은 최고의 한식이다

[Unity] Final IK Tutorial 정리 - Interaction System Basics (3) 본문

Unity

[Unity] Final IK Tutorial 정리 - Interaction System Basics (3)

l__j__h 2023. 6. 19. 16:13

목적 : 물건을 집고, 원하는 위치에서 홀딩하기

 

STEP 1 :

Pick Up 으로 집고 난 뒤에, 그냥 Idle 위치로 갖고오는 게 아니라 특정 위치에 공을 들고 있고 싶으면,

코드를 위와 같이 수정하고 Play 해보면,

 

처음과는 완전 다른 위치에서 공을 들고 있게 된다.

FullBodyBipedIK변수.solver.조종할 Effector.positionOffset 을 조절하면 된다.

이때, 위 코드처럼 weight를 서서히 변화시키는 방법을 사용해야 자연스러울 듯 하다

 

STEP 2 :

그런데 이렇게만 만들면, 코드로 추가한 offset은 단순한 월드 좌표 기준이기 때문에, 캐릭터를 회전시켰을 때

이렇게 팔이 꺾여버리는 문제가 생긴다 😲

 

따라서, 위 코드의 LateUpdate() 부분을 아래와 같이 수정해주면 된다.

 

STEP 3 :

그런데 이렇게 하면, Idle일 때는 괜찮지만, 걸어다닐 때 애가 우악스럽게 걸어다니는 문제가 생긴다.

팔이 너무 나간다 쯧쯧

 

이런 문제를 위해, Final IK에서 제공하는 클래스가 있다. 

기본 제공되는 Vector3로 offset을 만들지 말고, Final IK 제공 클래스를 사용하면 된다.

 

먼저,

 

Offset Pose 컴포넌트를 상호작용할 오브젝트의 Interaction Object 컴포넌트와 같은 계층에 추가해준다.

 

그리고, 상호작용할 오브젝트에 붙였던 스크립트에, OffsetPose 변수를 하나 선언해준다.

 

그리고, LateUpdate()를 사진과 같이 수정한다.

 

다시 에디터로 와서,

Offset Pose의 Element 에서, Offset 말고!!! Pin, Pin Weight를 조절해야 해당 위치에 오브젝트가 고정된채로, 애님이 정상 작동한다. 이때, Pin Weight 는 반드시 1일 필요는 없다. 자연스러움을 위해 0.7 정도로 낮추어도 좋고, 그냥 알아서 하면 된다.

 

출처 : https://www.youtube.com/watch?v=eP9-zycoHLk&list=PLVxSIA1OaTOu8Nos3CalXbJ2DrKnntMv6&index=13

728x90