프로그래밍 정리/Unity

[Unity - 유니티] NetworkView - 네트워크 플레이시 끊어짐 현상 처리

주누다 2014. 6. 9. 02:31
반응형

네트워크 게임시 다른 플레이어의 움직임이 끊어짐 현상이 있음.


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;


}

}


============================================================================================




반응형