본문 바로가기
Unity

[Unity] Transform.position 이동이 안되는 경우(Character Controller 사용 시)

by RucA 2024. 5. 23.
728x90
반응형

유니티 매일 새로운 걸 배우면서 이전에 쓰던 글을 지우고 다시 쓰고 하다가 일단 삽질한 것부터 계속 올리는 게 맞는 것 같아 오늘 낮 시간대에 계속 삽질한 내용을 언급하려 한다. 현재 홀로라이브의 3d 모델을 활용한 간단한 게임 프로젝트를 진행 중에 있다. 스킬 구현 중 원하는 위치로 순간이동하려고 transform.position을 통해 이동하려 했으나 캐릭터가 이상하게 움찔거리며 예상했던 순간이동이 이루어지지 않았다.

 

Transform.Position 이동 안되는 현상(버벅임)


Transform.Position 이동 안되는 현상(버벅임)
Transform.Position 이동 안되는 현상(버벅임)

 

이 문제의 특징은 이동이 아예 안되는 것도 아니고 뭔가 이동했다가 돌아오는 듯한 버벅임이 가끔 보인다는 것이다. 나는 이게 내가 다른 곳에서 위치를 고정해버린 줄 알고 거의 반나절을 다른 코드를 분석하며 디버깅했지만, 딱히 문제가 보이지 않았으며, 오직 이 순간이동 기능을 위해 static으로 전역 변수를 선언해도 현상이 반복되어 한국어로 구글링 했지만 역시 원인을 알 수 없었다.

 

 

그러나 영어로 검색해보니 스택오버플로우에 완전 똑같은 현상과 그 해결책이 명쾌하게 적혀 있어서 공유하고자 한다.

우선 참고한 링크부터 올리도록 하겠다.

https://stackoverflow.com/questions/68991746/resetting-character-position-in-unity-is-not-working

 

Resetting Character Position in Unity is Not Working

I'm working on a sports game where if a player skates into the goalie crease, I want all the player positions to reset to the center of the ice and do a three second countdown before play resumes. ...

stackoverflow.com

 

 

문제 원인 및 해결 방법


Character Controller을 활용해 캐릭터를 조작하는 스크립트를 구현중에 있다면, Character Controller가 지속적으로 현재 위치를 재할당하면서 매우 짧은 시간 내에 원치 않는 움직임 롤백이 일어난 것이다. 버벅임 현상은 실제로 캐릭터가 목표 지점으로 순간 이동했으나 바로 다시 원래 위치로 돌아오며 생기는 듯 하다. 이를 해결하기 위해서는 transform.position을 이용한 이동 직전에 잠시 Character Controller 컴포넌트를 비활성화하고, 할당한 직후 다시 활성화 해주면 잘 동작한다.

 

  • 예제 코드
private PlayerItemController playerItemController;

//중략

Vector3 newPos = itemTransform.position;

characterController.enabled = false;
refTransform.position = newPos;
characterController.enabled = true;

 

 

Transform.Position 이동 안되는 문제 해결


Transform.Position 이동 안되는 문제 해결
Transform.Position 이동 안되는 문제 해결

 

잘 동작하는 것을 확인할 수 있다!

728x90
반응형