async void Start() { Application.runInBackground = false; if (gridWorld == null) { return; } // Lobby 신에서 넘어왔다면 이 조건문이 만족할 것이다. if (StageButton.CurrentStageMetadata != null) { stageMetadata = StageButton.CurrentStageMetadata; if (Verbose) { ConDebug.Log($"Stage metadata specified by StageButton: {stageMetadata.name}"); } } if (stageMetadata == null) { while (Data.dataSet == null || Data.dataSet.StageMetadataLocList == null) { await Task.Yield(); } stageMetadata = await Addressables.LoadAssetAsync <StageMetadata>(Data.dataSet.StageMetadataLocList[0]).Task; } using (var stream = new MemoryStream(stageMetadata.RawStageData.bytes)) { var formatter = new BinaryFormatter(); stageData = (StageData)formatter.Deserialize(stream); stream.Close(); } stageData.islandCountByColor = stageData.islandDataByMinPoint.GroupBy(g => g.Value.rgba) .ToDictionary(g => g.Key, g => g.Count()); if (Verbose) { ConDebug.Log($"{stageData.islandDataByMinPoint.Count} islands loaded."); } var maxIslandPixelArea = stageData.islandDataByMinPoint.Max(e => e.Value.pixelArea); if (Verbose) { foreach (var mp in stageData.islandDataByMinPoint) { ConDebug.Log($"Island: Key={mp.Key} PixelArea={mp.Value.pixelArea}"); } ConDebug.Log($"Max island pixel area: {maxIslandPixelArea}"); } //var skipBlackMaterial = Instantiate(stageMetadata.SkipBlackMaterial); //var colorTexture = Instantiate((Texture2D) skipBlackMaterial.GetTexture(ColorTexture)); //skipBlackMaterial.SetTexture(ColorTexture, colorTexture); gridWorld.LoadTexture(stageMetadata.A1Tex, stageData); gridWorld.StageName = stageMetadata.name; nameplateGroup.ArtistText = stageMetadata.StageSequenceData.artist; nameplateGroup.TitleText = stageMetadata.StageSequenceData.title; nameplateGroup.DescText = stageMetadata.StageSequenceData.desc; //targetImage.SetTargetImageMaterial(skipBlackMaterial); // 플레이어가 색칠한 칸을 하나씩 렌더링하는 컴포넌트 // 화면에 보여지는 것은 색칠된 칸이 모두 누적된 형태다. // 이를 위해 Render Texture 이용 islandShader3DController.Initialize(stageMetadata); // 플레이어가 선택한 팔레트에 해당하는 모든 칸을 특정 색깔로 그리는 컴포넌트 // 게임을 더 편-안-하게 플레이할 수 있도록 해 준다. // 그러나 4 스테이지부터 켜준다. singlePaletteRenderer.gameObject.SetActive(stageMetadata.StageIndex >= 3); singlePaletteRenderer.Initialize(stageMetadata); targetImageOutline.material = stageMetadata.SdfMaterial; // SDF 머티리얼 없으면 아예 이 이미지는 안보이게 하자. targetImageOutline.enabled = stageMetadata.SdfMaterial != null; paletteButtonGroup.CreatePalette(stageData); islandLabelSpawner.CreateAllLabels(stageData); remainTime = stageMetadata.StageSequenceData.remainTime; if (stageMetadata.StageSequenceData.remainTime > 0) { ActivateTime(); } else { DeactivateTime(); } if (Verbose) { ConDebug.Log($"Tex size: {gridWorld.TexSize}"); ConDebug.Log($"CanInteractPanAndZoom = {CanInteractPanAndZoom}"); } gridWorld.ResumeGame(); }