네트워크 게임시 다른 플레이어의 움직임이 끊어짐 현상이 있음.
NetworkView의 Observed를 스크립트에 연결해
Lerp 함수를 통해 처리할 수 있음.
============================================================================================
private Transfomr tr;
private NetworkView nv;
private Vector3 curPos;
private Quaternion curRot;
void Awake()
{
tr = Getcomponent<Transform>();
nv = GetComponent<NetworkView>();
nv.observed = this; // 스크립트를 observed 속성에 연결
}
void Update()
{
if(nv.isMine) // NetworkView가 자신일 때
{
}
else // NetworkView가 다른 플리어어일 때
{
tr.position = Vector3.Lerp(tr.position, curPos, Time.deltaTime);
tr.rotation = Quaternion.Slerp(tr.rotation, curRot, Time.deltaTime);
}
}
// 데이터를 송수신하기위한 동기화 콜백함수. NetworkView 컴포넌트에서 호출해 주는 콜백함수.
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
if(stream.isWriting) // 송신 상태
{
Vector3 sPos = tr.position;
Quaternion sRot = tr.rotation;
// 데이터 전송 (송수신하는 순서가 일치해야함)
stream.Serialize(ref sPos);
stream.Serialize(ref sRot);
}
else // 수신 상태
{
Vector3 rPos = Vector3.zero;
Quaternion rRot = Quaternion.identity;
// 데이터 수신 (송수신하는 순서가 일치해야함)
stream.Serialize(ref rPos);
stream.Serialize(ref rRot);
curPos = rPos;
curRot = rRot;
}
}
============================================================================================
'프로그래밍 정리 > Unity' 카테고리의 다른 글
[Unity - 유니티] velocity - 가속도(내용 냉무) (0) | 2014.06.09 |
---|---|
[Unity - 유니티] OnSerializeNetworkView 콜백함수 (0) | 2014.06.09 |
[Unity - 유니티] Network 예제 (0) | 2014.06.08 |
[Unity - 유니티] CharacterController 컴포넌트 (0) | 2014.06.08 |
[Unity - 유니티] Network 클래스 제공 콜백함수 (0) | 2014.06.08 |