Пример #1
0
    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);
    }
Пример #2
0
 public static void DisposeModelShow(UIModelShowData data)
 {
     data.Dispose();
     modelShowList.Remove(data);
     ResetModelShowPosition();
 }