기존 위치 변환에 사용했던 코드는
gameObject1.transform.position = new Vector3(0,0,0);
gameObject2.transform.position = new Vector3(0,0,0);
과 같은 형태이다.
포톤 멀티플레이 게임을 만들 때 이 코드를 사용하여 포탈을 만들려고 하니 동기화 오류가 발생했다.
(1개만 이동하는 경우는 오류가 발생할 확률이 낮으나 여러 객체를 동시 이동하려 할 때 오류가 발생했다.)
여러번 테스트를 통해 생각해낸 원인은 타이밍 문제였다.
멀티 플레이에서는 2개 컴퓨터의 각자 입장을 생각해야하는데
오류가 발생하는 상황을 가정해보자.
프레임 별로 그려보자면
여기서 1 유저의 정보가 2 유저에게 전송된다고 하면
2번 오브젝트가 이동 됐지만 바로 다음 순서로 2번 유저의 정보가 1번 유저에게 전송된다고 하자
결국 2번 오브젝트는 이동이 되지 않은 모습으로 유지되는 것처럼 보이는 오류가 생길 수 있다.
해결방법:
스크립트에
Public PhotonView PV;
PV.RPC("TP1", PhotonTargets.All);
[PunRPC]
void TP1(){
MyPlayer.position = new Vector3(59.611f, 25.67776f, 317.791f);
}
PunRPC 호출을 통해 모든 유저에게 위치 정보 갱신을 전송한다.
개발하면서 할 것:
photon 동기화 서순 파악하기
RPC 함수 작동 원리 파악하기
selenium 차단 회피 시도해본 것 정리 (0) | 2022.09.07 |
---|---|
photon bulid 창과 unity 내부 game씬 동기화 문제 (0) | 2022.08.16 |
yolov5 class 한글 폰트 적용 (0) | 2022.04.09 |
CSS 정리 (0) | 2021.08.09 |
HTML 태그 정리 (0) | 2021.08.04 |