// 如果screenCount只在adaptScreen为AS_MULTI_SCREEN时才有效,且screenCount不能小于2 protected void processResolution(int width, int height, int screenCount, ADAPT_SCREEN adaptScreen) { GameObject uiRootObj = UnityUtility.getGameObject(null, "NGUIRoot"); GameObject rootMultiScreen = UnityUtility.getGameObject(null, "NGUIRootMultiScreen"); GameObject rootStretch = UnityUtility.getGameObject(null, "NGUIRootStretch"); // 首先默认禁用 if (rootMultiScreen != null) { rootMultiScreen.SetActive(false); } if (rootMultiScreen != null) { rootStretch.SetActive(false); } if (adaptScreen == ADAPT_SCREEN.AS_SIMPLE_STRETCH) { rootStretch.SetActive(true); GameObject camera = UnityUtility.getGameObject(rootStretch, "Camera"); GameObject cameraTexture = UnityUtility.getGameObject(rootStretch, "UICameraTexture"); camera.SetActive(true); cameraTexture.SetActive(true); UIRoot stretchRoot = rootStretch.GetComponent <UIRoot>(); stretchRoot.scalingStyle = UIRoot.Scaling.Flexible; stretchRoot.manualWidth = width; stretchRoot.manualHeight = height; camera.transform.localPosition = new Vector3(0.0f, 0.0f, -height / 2.0f); setTextureWindowSize(cameraTexture, 0, width, height); // 设置各个摄像机的渲染目标 UITexture uiTexture = cameraTexture.GetComponent <UITexture>(); setCameraTargetTexture(null, "MainCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UICamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBackEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIForeEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBlurCamera", uiTexture); } else { if (adaptScreen == ADAPT_SCREEN.AS_BASE_ON_ANCHOR) { setCameraTargetTexture(null, "MainCamera", null); setCameraTargetTexture(uiRootObj, "UICamera", null); setCameraTargetTexture(uiRootObj, "UIBackEffectCamera", null); setCameraTargetTexture(uiRootObj, "UIForeEffectCamera", null); setCameraTargetTexture(uiRootObj, "UIBlurCamera", null); } else if (adaptScreen == ADAPT_SCREEN.AS_MULTI_SCREEN && screenCount > 1) { // 激活渲染目标 rootMultiScreen.SetActive(true); GameObject camera = UnityUtility.getGameObject(rootMultiScreen, "Camera"); GameObject cameraTexture0 = UnityUtility.getGameObject(rootMultiScreen, "UICameraTexture0"); GameObject cameraTexture1 = UnityUtility.getGameObject(rootMultiScreen, "UICameraTexture1"); camera.SetActive(true); cameraTexture0.SetActive(true); cameraTexture1.SetActive(true); // 设置渲染目标属性 UIRoot uiRoot = rootMultiScreen.GetComponent <UIRoot>(); uiRoot.scalingStyle = UIRoot.Scaling.Constrained; uiRoot.manualWidth = width; uiRoot.manualHeight = height; camera.transform.localPosition = new Vector3(0.0f, 0.0f, -height / 2.0f); setTextureWindowSize(cameraTexture0, -width / screenCount, width / screenCount, height); setTextureWindowSize(cameraTexture1, -width / screenCount + width / 2, width / screenCount * (screenCount - 1), height); // 设置各个摄像机的渲染目标 UITexture uiTexture = cameraTexture0.GetComponent <UITexture>(); setCameraTargetTexture(null, "MainCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UICamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBackEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIForeEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBlurCamera", uiTexture); } } }
// 如果screenCount只在adaptScreen为AS_MULTI_SCREEN时才有效,且screenCount不能小于2 protected void processScreen(int width, int height, int screenCount, ADAPT_SCREEN adaptScreen, int fullScreen) { #if UNITY_ANDROID || UNITY_IOS // 移动平台下固定为全屏 fullScreen = 1; screenCount = 1; #endif if (fullScreen == 1) { width = Screen.width; height = Screen.height; } #if UNITY_EDITOR width = GameDefine.STANDARD_WIDTH; height = GameDefine.STANDARD_HEIGHT; #endif Screen.SetResolution(width, height, fullScreen == 1 || fullScreen == 3); #if UNITY_EDITOR || (!UNITY_ANDROID && !UNITY_IOS) // 设置为无边框窗口 if (fullScreen == 2) { // 无边框的设置有时候会失效,并且同样的设置,如果上一次设置失效后,即便恢复设置也同样会失效,也就是说本次的是否生效与上一次的结果有关 // 当设置失效后,可以使用添加启动参数-popupwindow来实现无边框 long curStyle = User32.GetWindowLong(User32.GetForegroundWindow(), CommonDefine.GWL_STYLE); curStyle &= ~CommonDefine.WS_BORDER; curStyle &= ~CommonDefine.WS_DLGFRAME; User32.SetWindowLong(User32.GetForegroundWindow(), CommonDefine.GWL_STYLE, curStyle); } #endif GameObject uiRootObj = UnityUtility.getGameObject(null, "NGUIRoot"); GameObject rootMultiScreen = UnityUtility.getGameObject(null, "NGUIRootMultiScreen"); GameObject rootStretch = UnityUtility.getGameObject(null, "NGUIRootStretch"); // 首先默认禁用 if (rootMultiScreen != null) { rootMultiScreen.SetActive(false); } if (rootStretch != null) { rootStretch.SetActive(false); } // 简单拉伸自适应分辨率,将所有画面都渲染到NGUIRootStretch中的UICameraTexture上,然后拉伸显示UICameraTexture if (adaptScreen == ADAPT_SCREEN.AS_SIMPLE_STRETCH && rootStretch != null) { rootStretch.SetActive(true); GameObject camera = UnityUtility.getGameObject(rootStretch, "Camera"); GameObject cameraTexture = UnityUtility.getGameObject(rootStretch, "UICameraTexture"); camera.SetActive(true); cameraTexture.SetActive(true); UIRoot stretchRoot = rootStretch.GetComponent <UIRoot>(); stretchRoot.scalingStyle = UIRoot.Scaling.Flexible; stretchRoot.manualWidth = width; stretchRoot.manualHeight = height; camera.transform.localPosition = new Vector3(0.0f, 0.0f, -height / 2.0f); setTextureWindowSize(cameraTexture, 0, width, height); // 设置各个摄像机的渲染目标 UITexture uiTexture = cameraTexture.GetComponent <UITexture>(); setCameraTargetTexture(null, "MainCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UICamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBackEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIForeEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBlurCamera", uiTexture); } else { // 多屏横向组合为高分辨率屏幕 if (adaptScreen == ADAPT_SCREEN.AS_MULTI_SCREEN && screenCount > 1 && rootMultiScreen != null) { // 激活渲染目标 rootMultiScreen.SetActive(true); GameObject camera = UnityUtility.getGameObject(rootMultiScreen, "Camera"); GameObject cameraTexture0 = UnityUtility.getGameObject(rootMultiScreen, "UICameraTexture0"); GameObject cameraTexture1 = UnityUtility.getGameObject(rootMultiScreen, "UICameraTexture1"); camera.SetActive(true); cameraTexture0.SetActive(true); cameraTexture1.SetActive(true); // 设置渲染目标属性 UIRoot uiRoot = rootMultiScreen.GetComponent <UIRoot>(); uiRoot.scalingStyle = UIRoot.Scaling.Constrained; uiRoot.manualWidth = width; uiRoot.manualHeight = height; camera.transform.localPosition = new Vector3(0.0f, 0.0f, -height / 2.0f); setTextureWindowSize(cameraTexture0, -width / screenCount, width / screenCount, height); setTextureWindowSize(cameraTexture1, -width / screenCount + width / 2, width / screenCount * (screenCount - 1), height); // 设置各个摄像机的渲染目标 UITexture uiTexture = cameraTexture0.GetComponent <UITexture>(); setCameraTargetTexture(null, "MainCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UICamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBackEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIForeEffectCamera", uiTexture); setCameraTargetTexture(uiRootObj, "UIBlurCamera", uiTexture); } } }