강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

ML G님의 프로필 이미지
ML G

작성한 질문수

[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스

캐릭터 이동 #2

잔상

해결된 질문

작성

·

93

0

안녕하세요.

 

혹시 캐릭터의 위치를 서로 바꿀때 클라이언트의 서버 스포너위치에 옮겨질 캐릭터의 잔상이 남는데 무엇이 문제인가요?

 

hero쪽에 if (IsServer)

transform.parent = target.transform; 이 구문을 빼면

잔상이 없어지긴 합니다.

답변 2

1

Pinous님의 프로필 이미지
Pinous
지식공유자

안녕하세요, 일단 제가 새소식 > GitHub Link를 통해서 올린 코드를 보시고 한 번 수정을 진행해보시면 좋을 것 같습니다. 또한
캐릭터 위치를 서로 바꿀 때 클라이언트에서 스포너 위치에 잔상이 남는 문제는, 네트워크 동기화 과정에서 Transform이 정상적으로 업데이트되지 않거나, 부모-자식 관계 설정이 네트워크 객체에 영향을 주기 때문일 가능성이 높습니다.

  1. Transform.parent 설정 시 네트워크 동기화 문제

    • transform.parent = target.transform;을 설정하면, Unity의 Hierarchy에서 부모가 바뀌면서 로컬 좌표(localPosition)가 변할 수 있습니다.

    • 하지만 Netcode에서는 Transform의 부모가 바뀌어도 자동으로 네트워크 객체의 NetworkTransform이 즉시 이를 반영하지 않습니다.

    • 이 때문에 부모가 바뀐 후, 네트워크에서 위치가 이전의 부모 기준으로 계속 유지되면서 잔상이 남을 수 있습니다.

  2. 서버에서만 부모를 설정하는 구조

    • if (IsServer) 내부에서만 부모를 설정하면, 클라이언트에서 부모 변경이 즉시 반영되지 않을 수도 있습니다.

    • 클라이언트가 부모를 알지 못한 채 위치만 따로 동기화되면서 원래 자리(스포너 위치)에 잔상이 남을 가능성이 큽니다.

0

안녕하세요, 인프런 AI 인턴입니다. ML G님.

질문하신 캐릭터의 잔상 문제는 Unity에서 ‘Transform’을 자주 변경할 때, 특히 부모 객체를 설정할 때 발생할 수 있는 흔한 문제입니다. 주로 클라이언트-서버 간의 상태 싱크가 올바르지 않을 때 이러한 잔상이 보일 수 있습니다.

문제의 원인

  1. 서버와 클라이언트 간의 변환 상태 불일치: IsServer 구문 내에서 transform.parent를 설정함으로써 클라이언트 측에서 부모 객체의 위치가 제대로 동기화되지 않을 수 있습니다. 이는 클라이언트가 해당 변화를 반영하지 않았기 때문에 잔상이 남게 됩니다.

  2. 동기화 문제: 부모 객체의 위치 변경 후 클라이언트에게 변화를 즉시 전달하지 못했거나, 전달 속도가 느려 클라이언트에 반영되지 못했을 수 있습니다.

해결 방법 제안

  • 네트워크 동기화 문제 해결: Transform 변경 후 RPC(Remote Procedure Call) 혹은 상태 동기화를 적용하여 클라이언트에 즉시 변화를 반영하도록 합니다.

예를 들어:

  [ClientRpc]
  void RpcUpdateTransform(Vector3 position, Quaternion rotation)
  {
      transform.SetParent(target.transform, false);
      transform.localPosition = position;
      transform.localRotation = rotation;
  }
  • 부모 전환의 조건 추가: IsServer 조건뿐만 아니라, 클라이언트에서도 해당 부모를 바꿀 시점과 방법에 대한 더 정교한 조건을 적용할 수 있습니다.

  • 네트워크 매니저 설정 확인: 네트워크 매니저에서 설정이 올바르게 되어 있는지(예: prefab 동기화), 모든 관련 객체가 네트워크 객체로 등록되어 있는지도 확인이 필요합니다.

확인해보실 몇 가지 향상된 방법은 다음 포럼들을 참고해볼 수 있습니다:
- 캐릭터 이동 구현 rotation 값 변경은 Transform 위치 변경 시 네트워크 상의 주의점을 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ML G님의 프로필 이미지
ML G

작성한 질문수

질문하기