찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======Network Level Loading====== 아래는 멀티 플레이어 게임에서 하나의 레벨을 로드하기 위한 방법의 간단한 예입니다. 그것은 레벨이 로드되어 지고 있는 동안 네트워크 메세지가 처리되는 것이 없음을 확실시 합니다. 그것은 모든 것이 준비될 때까지 어떠한 메세지도 보내지지 않음을 확실시 합니다. 마지막으로 레벨이 로드될 때, 그것은 그들이 레벨이 로드되어 것을 알게 하고 그것에 대응할 수 있도록 모든 스크립트에게 메세지를 보냅니다. //SetLevelPrefix// 함수는 새로이 로드된 레벨로부터 원치 않는 네트워크 업데이트를 막는 것을 돕습니다. 예를 들어 원치 않는 업데이트는 이전 레벨로 부터의 업데이트일지도 모릅니다. 이 예는 또한 게임 데이터를 분리하기 위해 그룹을 사용하고 그룹들에게 커뮤니케이션을 로드합니다. 그룹 0은 게임 데이터 트래픽과 레벨 로딩을 위한 그룹 1을 위해서 사용됩니다. 그룹 0은 레벨이 로딩되어지고 있는 동안 차단되나 그룹 1은 오픈된 상태로 있습니다. 그것은 또한 레벨 로딩동안 오픈된 상태로 있을 수 있기 위해서 채팅 커뮤니케이션을 전달할 수 있습니다. <file csharp> var supportedNetworkLevels : String[] = [ "mylevel" ]; var disconnectedLevel : String = "loader"; private var lastLevelPrefix = 0; function Awake () { // Network level loading is done in a separate channel. DontDestroyOnLoad(this); networkView.group = 1; Application.LoadLevel(disconnectedLevel); } function OnGUI () { if (Network.peerType != NetworkPeerType.Disconnected) { GUILayout.BeginArea(Rect(0, Screen.height - 30, Screen.width, 30)); GUILayout.BeginHorizontal(); for (var level in supportedNetworkLevels) { if (GUILayout.Button(level)) { Network.RemoveRPCsInGroup(0); Network.RemoveRPCsInGroup(1); networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndArea(); } } @RPC function LoadLevel (level : String, levelPrefix : int) { lastLevelPrefix = levelPrefix; // There is no reason to send any more data over the network on the default channel, // because we are about to load the level, thus all those objects will get deleted anyway Network.SetSendingEnabled(0, false); // We need to stop receiving because first the level must be loaded first. // Once the level is loaded, rpc's and other state update attached to objects in the level are allowed to fire Network.isMessageQueueRunning = false; // All network views loaded from a level will get a prefix into their NetworkViewID. // This will prevent old updates from clients leaking into a newly created scene. Network.SetLevelPrefix(levelPrefix); Application.LoadLevel(level); yield; yield; // Allow receiving data again Network.isMessageQueueRunning = true; // Now the level has been loaded and we can start sending out data to clients Network.SetSendingEnabled(0, true); for (var go in FindObjectsOfType(GameObject)) go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver); } function OnDisconnectedFromServer () { Application.LoadLevel(disconnectedLevel); } @script RequireComponent(NetworkView) </file> {{tag>유니티 unity}} * 출처: [[http://unitykoreawiki.com/index.php?n=KrMain.net-NetworkLevelLoad|유니티코리아위키]] (CC BY-NC-SA 2.0)
2+1?
이 필드는 비어 있도록 유지하세요:
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
연결문서
유니티3D ( Unity3D )
Reference Manual
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
misuse_topical5
노박
unique_items
dinner_bell
deputy_beagle
ratslayer
one_for_my_baby
alerio
power_fist
제거됨
fixer
climb_ev_ry_mountain
companion
[장비 분실]
crashed_vertibird
brotherhood_t-51b_power_armor
marco
i_forgot_to_remember_to_forget
cateye