- Today
- Total
Notice
Recent Posts
Recent Comments
Link
250x250
프로그래밍 농장
포톤 실시간 동기화 방식 Synchronization Issues [Unity] 본문
728x90
포톤을 통하여 각 사용자의 화면간에 동기화를 진행해줄때는 다양한 방법이 있다.
기본적으로 Application은 포톤서버와 각각 통신한다. 이 과정에서 두 플레이어(클라이언트) 간 RTT의 합계가 필요하다 .
네트워크적으로 깊은개념을 제쳐두고 우선 결과만 본다면 1초정도의 지연이 발생한다고 한다.
아래는 포톤 공식홈페이지에서 제안하는 클라이언트 간 동기화 속도 개선방법
기본적으로 포톤에서 패킷은 1초에 10번을 전송한다. 그렇기 때문에 포톤에서 값을 받아온 후, 클라이언트에서 해당 값을 보정해주어야 한다.
using UnityEngine;
public class Ball : Photon.MonoBehaviour, IPunObservable {
Vector3 _networkPosition;
Quaternion _networkRotation;
Rigidbody _rb;
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
stream.SendNext(_rb.position);
stream.SendNext(_rb.rotation);
stream.SendNext(_rb.velocity);
}
else
{
_networkPosition = (Vector3)stream.ReceiveNext();
_networkRotation = (Quaternion)stream.ReceiveNext();
_rb.velocity = (Vector3)stream.ReceiveNext();
float lag = Mathf.Abs((float)(PhotonNetwork.time - info.timestamp));
_networkPosition += (_rb.velocity * lag);
}
}
void Start()
{
_rb = GetComponent<Rigidbody>();
}
public void FixedUpdate()
{
if (!photonView.isMine)
{
_rb.position = Vector3.MoveTowards(_rb.position, _networkPosition, Time.fixedDeltaTime);
_rb.rotation = Quaternion.RotateTowards(_rb.rotation, _networkRotation, Time.fixedDeltaTime * 100.0f);
}
}
}
728x90
'Unity' 카테고리의 다른 글
2022/11/04 TODO (+비동기로딩씬 구현) [Unity] (0) | 2022.11.04 |
---|---|
오픈월드 게임 TODO 22/11/03 [Unity] (0) | 2022.11.03 |
(해결)JoinRandomRoom failed. Client is on NameServer (must be MasterServer for matchmaking) . . [Unity] (0) | 2022.11.02 |
Trajectory Line (Line Renderer) [Unity] (0) | 2022.10.31 |
Unity Tip [Unity] (0) | 2022.10.27 |