private UILayer CreateLayer(string key, GameObject obj = null) { #if USE_XLUA return(InvokeXLua("CreateLayer", new object[] { key, obj })[0] as UILayer); #else UILayer sLayer = null; string nameLayer = key.ToString(); // get exists bool isCreate = true; if (layerCaches.ContainsKey(key) && layerCaches[key].Count > 0) { isCreate = false; sLayer = layerCaches[key][0]; sLayer.gameObject.SetActive(true); layerCaches[key].RemoveAt(0); } else { if (obj == null) { try { obj = Resources.Load(path + "/" + nameLayer) as GameObject; } catch (Exception e) { VKDebug.LogError("Layer not found from local"); return(null); } } if ((isLandscape && screenRatio > 1.9f) || (!isLandscape && screenRatio > 0.74f)) { if (!obj.GetComponent <UILayer>().lockCanvasScale) { CanvasScaler canvasScaler = obj.GetComponent <CanvasScaler>(); canvasScaler.matchWidthOrHeight = 1f; } } else { if (!obj.GetComponent <UILayer>().lockCanvasScale) { CanvasScaler canvasScaler = obj.GetComponent <CanvasScaler>(); canvasScaler.matchWidthOrHeight = 0f; } } obj = Instantiate(obj) as GameObject; sLayer = obj.GetComponent <UILayer>(); // seting init sLayer.InitLayer(key, screenRatio); sLayer.canvas.renderMode = RenderMode.ScreenSpaceCamera; sLayer.canvas.worldCamera = uiCamera; } List <UILayer> uiLayerTemps = layers[sLayer.position]; int countLayer = uiLayerTemps.Count; // set position int sorting = countLayer == 0 ? deepOrderStarts[(int)sLayer.position] : (uiLayerTemps[countLayer - 1].canvas.sortingOrder + deepOrder); float distance = countLayer == 0 ? planeDistanceStarts[(int)sLayer.position] : (uiLayerTemps[countLayer - 1].canvas.planeDistance - deepPlaneDistance); sLayer.transform.SetAsLastSibling(); sLayer.name = nameLayer + "_" + (countLayer + 1); sLayer.SetSortOrder(sorting); sLayer.canvas.planeDistance = distance; // action if (isCreate) { sLayer.StartLayer(); } sLayer.ShowLayer(); return(sLayer); #endif }