public static UIModelShowData CreateModelData(string prefabName, string layerName = null, bool?orthographic = null, float?orthographicSize = null, Color?backgroundColor = null, Vector3?localPosition = null, Vector3?eulerAngles = null, Vector3?localScale = null, Vector3?texSize = null, float?nearClippingPlane = null, float?farClippingPlane = null) { //默认值设置 layerName = layerName ?? s_defaultLayer; Vector3 localPositionTmp = localPosition ?? s_defaultLocationPosition; Vector3 eulerAnglesTmp = eulerAngles ?? s_defaultEulerAngles; Vector3 texSizeTmp = texSize ?? s_defaultTexSize; Vector3 localScaleTmp = localScale ?? s_defaultLocalScale; Color backgroundColorTmp = backgroundColor ?? s_defaultBackgroundColor; float orthographicSizeTmp = orthographicSize ?? c_defaultOrthographicSize; bool orthographicTmp = orthographic ?? c_defaultOrthographic; float fieldOfView = orthographicSize ?? c_defaultFOV; float nearClippingPlaneTmp = nearClippingPlane ?? s_clippingPlanes.x; float farClippingPlaneTmp = farClippingPlane ?? s_clippingPlanes.y; //构造Camera UIModelShowData data = new UIModelShowData(); GameObject uiModelShow = new GameObject("UIShowModelCamera"); data.top = uiModelShow; GameObject camera = new GameObject("Camera"); camera.transform.SetParent(uiModelShow.transform); camera.transform.localPosition = Vector3.zero; Camera ca = camera.AddComponent <Camera>(); data.camera = ca; ca.clearFlags = CameraClearFlags.SolidColor; ca.backgroundColor = backgroundColorTmp; ca.orthographic = orthographicTmp; ca.orthographicSize = orthographicSizeTmp; ca.fieldOfView = fieldOfView; ca.depth = 100; ca.nearClipPlane = nearClippingPlaneTmp; ca.farClipPlane = farClippingPlaneTmp; ca.cullingMask = 1 << LayerMask.NameToLayer(layerName); GameObject root = new GameObject("Root"); data.root = root; root.transform.SetParent(camera.transform); root.transform.localPosition = localPositionTmp; root.transform.eulerAngles = eulerAnglesTmp; root.transform.localScale = localScaleTmp; //创建模型 GameObject obj = GameObjectManager.CreateGameObject(prefabName); data.model = obj; obj.transform.SetParent(root.transform); obj.transform.localPosition = new Vector3(0, 0, 0); obj.transform.localEulerAngles = Vector3.zero; obj.transform.localScale = Vector3.one; obj.SetLayer(LayerMask.NameToLayer(layerName)); SkinnedMeshRenderer[] mes = obj.GetComponentsInChildren <SkinnedMeshRenderer>(); for (int i = 0; i < mes.Length; i++) { mes[i].shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; mes[i].receiveShadows = false; } //设置randerTexture RenderTexture tex = new RenderTexture((int)texSizeTmp.x, (int)texSizeTmp.y, (int)texSizeTmp.z); data.renderTexture = tex; tex.autoGenerateMips = false; tex.anisoLevel = 1; ca.targetTexture = tex; modelShowList.Add(data); ResetModelShowPosition(); return(data); }
public static void DisposeModelShow(UIModelShowData data) { data.Dispose(); modelShowList.Remove(data); ResetModelShowPosition(); }