コード例 #1
0
    public GameObject CreateSticker(PPPrefabInfo info, Action loadFinish = null)
    {
        if (info == null)
        {
            throw new ArgumentNullException("PPPrefabInfo can't be null!");
        }
        string     matPath   = Path.Combine(AppBlockPath(BlockPath.Sticker_Material_Dir), info.Name);
        var        modelPath = Path.Combine(PrefixPath, info.Model + "/" + info.Model + ".gltf");
        GameObject sticker   = null;

        sticker = PTGLTFLoader.loadGltf(modelPath, () =>
        {
            var stickerRoot = sticker.transform.Find("Root Scene");
            var render      = stickerRoot == null ? null : stickerRoot.GetComponentInChildren <Renderer>(true);
            if (render != null)
            {
                Material mat             = PBMatLoader.LoadTextureMatAsset(matPath, info.Texture, true);
                render.receiveShadows    = false;
                render.shadowCastingMode = ShadowCastingMode.Off;
                render.sharedMaterial    = mat;
            }
            else
            {
                PTDebug.LogError("Sticker:<color=#FF00FF>{0}</color> load failed! Model:<color=#FF00FF>{1}</color>", info.Name, info.Model);
            }
            loadFinish.InvokeGracefully();
        }, OnInitializeGltfObject);
        blockObj.Add(sticker);

        return(sticker);
    }
コード例 #2
0
    /// <summary>
    /// 外部调用,生成单个零件
    /// </summary>
    public static PPObjLoader LoadBlock(PPPrefabInfo prefabInfo, PPBlockInfo nodeInfo, Transform parent, Action <GameObject> onFinishWithObj)
    {
        GameObject obj = new GameObject("PPObjLoader");

        obj.transform.SetParent(RootObj);
        PPObjLoader loader = obj.AddComponent <PPObjLoader>();

        loader.mPrefabInfo     = prefabInfo;
        loader.nodeInfo        = nodeInfo;
        loader.parent          = parent;
        loader.onFinishWithObj = onFinishWithObj;
        loader.StartCoroutine(loader.AsyncLoadBlock());
        return(loader);
    }
コード例 #3
0
    private static void ProcessStickerNode(XmlNode node, List <PPPrefabInfo> prefabInfos)
    {
        XmlNodeList prefabNodes = node.SelectNodes("sticker");

        for (int i = 0; i < prefabNodes.Count; i++)
        {
            XmlNode      prefabNode = prefabNodes[i];
            PPPrefabInfo prefabInfo = new PPPrefabInfo();
            prefabInfo.Name    = prefabNode.Attributes["name"].Value;
            prefabInfo.Model   = prefabNode.Attributes["model"].Value;
            prefabInfo.Texture = prefabNode.Attributes["texture"].Value;
            prefabInfos.Add(prefabInfo);
        }
    }
コード例 #4
0
    private static void ProcessBlockNode(XmlNode node, List <PPPrefabInfo> prefabInfos)
    {
        XmlNodeList prefabNodes = node.SelectNodes("block");

        for (int i = 0; i < prefabNodes.Count; i++)
        {
            XmlNode      prefabNode = prefabNodes[i];
            PPPrefabInfo prefabInfo = new PPPrefabInfo();
            prefabInfo.Name     = prefabNode.Attributes["name"].Value;
            prefabInfo.Model    = prefabNode.Attributes["model"].Value;
            prefabInfo.Material = prefabNode.Attributes["material"].Value;
            prefabInfo.Category = prefabNode.Attributes["category"].Value;
            prefabInfos.Add(prefabInfo);
        }
    }
コード例 #5
0
    private static void ProcessTextureNode(XmlNode node, List <PPPrefabInfo> prefabInfos)
    {
        XmlNodeList prefabNodes = node.SelectNodes("texture");

        for (int i = 0; i < prefabNodes.Count; i++)
        {
            XmlNode      prefabNode = prefabNodes[i];
            PPPrefabInfo prefabInfo = new PPPrefabInfo();
            prefabInfo.Name     = prefabNode.Attributes["name"].Value;
            prefabInfo.Model    = prefabNode.Attributes["model"].Value;
            prefabInfo.Material = prefabNode.Attributes["material"].Value;
            prefabInfo.Category = prefabNode.Attributes["category"].Value;
            prefabInfo.Thumb    = prefabNode.Attributes["thumb"].Value;
            ProcessPrefabTexInfo(prefabNode, prefabInfo.Texs);
            prefabInfos.Add(prefabInfo);
        }
    }
コード例 #6
0
    public ThumbExportElement ToExport()
    {
        //构造prefabinfo
        var prefabInfo = new PPPrefabInfo()
        {
            Name          = name,
            Model         = model,
            Material      = material,
            MaterialInfos = matinfos,
            Texs          = texs
        };

        if (prefabInfo.IsSticker)
        {
            prefabInfo.Texture = skins[0].skin_name;
        }

        //构造PPBlockInfo
        var nodeInfo = new PPBlockInfo()
        {
            Prefab = name,
        };
        var thumb = nodeInfo.Prefab;

        nodeInfo.Textures = new PPTextureInfo[texs.Count];
        for (var i = 0; i < texs.Count; i++)
        {
            var t = texs[i];
            nodeInfo.Textures[i] = new PPTextureInfo()
            {
                Prefab      = t.Name,
                EditorAngle = t.editor_angle,
                EditorPos   = t.editor_pos
            };
            thumb += "-" + t.Name;
        }
        nodeInfo.Thumb = nodeInfo.IsStamp ? nodeInfo.Prefab + "_" + PTUtils.Md5Sum(thumb) : nodeInfo.Prefab;

        return(new ThumbExportElement()
        {
            eulerAngle = angle,
            PrefabInfo = prefabInfo,
            BlockInfo = nodeInfo
        });
    }
コード例 #7
0
    public GameObject CreateBlock(PPPrefabInfo info, Action loadFinish = null)
    {
        if (info == null)
        {
            throw new ArgumentNullException("PPPrefabInfo can't be null!");
        }
        var prefabName = info.Name;

        if (info.IsSticker)
        {
            return(CreateSticker(info, loadFinish));
        }

        var model     = info.Model;
        var modelPath = Path.Combine(PrefixPath, model + "/" + model + ".gltf");

        //load gltf
        GameObject block = null;

        block = PTGLTFLoader.loadGltf(modelPath, () =>
        {
            var blockRoot = block.transform.Find("Root Scene");
            if (blockRoot.GetComponentInChildren <Renderer>(true) != null)
            {
                AssignMaterials(blockRoot.gameObject, info.Material, info.MaterialInfos);
            }
            else
            {
                PTDebug.LogError("Block:<color=#FF00FF>{0}</color> load failed! Model:<color=#FF00FF>{1}</color>", prefabName, model);
            }
            loadFinish.InvokeGracefully();
        }, OnInitializeGltfObject);
        blockObj.Add(block);

        block.name = model;

        Animator animator = block.GetComponent <Animator>();

        if (animator != null)
        {
            GameObject.DestroyImmediate(animator);
        }
        return(block);
    }
コード例 #8
0
    public static void Test()
    {
        var config      = "/Users/admin/Desktop/tar_config/configs/config_22007_01_05.txt";
        var blockConfig = PBBlockConfigManager.LoadBlockInfosWithoutAnim(config);

        PPPrefabInfo targetPrefab = null;
        PPBlockInfo  targetBlock  = null;

        foreach (PBPartInfo partInfo in blockConfig.BlockInfos)
        {
            if (partInfo.BlockInfo.IsSticker && partInfo.PrefabName.Equals("sticker_prefab_ppbbbmhmf_09_common"))
            {
                targetBlock = partInfo.BlockInfo;
                break;
            }
        }

        foreach (var t in blockConfig.PrefabInfos)
        {
            if (t.IsSticker && t.Name.Equals("sticker_prefab_ppbbbmhmf_09_common"))
            {
                targetPrefab = t;
                break;
            }
        }

        if (targetPrefab == null || targetBlock == null)
        {
            Debug.LogError("空");
            return;
        }

        if (!string.IsNullOrEmpty(targetPrefab.Material))
        {
            targetPrefab.MaterialInfos.Add(PBDataBaseManager.Instance.GetMatInfoByName(targetPrefab.Material));
        }
        targetPrefab.Texs.ForEach(t =>
        {
            t.skin_url = texPrefix + t.Texture + ".png";
            t.bin_url  = texModelPrefix + t.Model + "/buffer.bin";
            t.gltf_url = texModelPrefix + t.Model + "/" + t.Model + ".gltf";
        });

        var renderinfo = new RenderInfo();

        renderinfo.scale = 2;
        renderinfo.items = new[]
        {
            new RenderItem()
            {
                name     = targetPrefab.Name,
                model    = targetPrefab.Model,
                material = targetPrefab.Material,
                matinfos = targetPrefab.MaterialInfos,
                bin_url  = stickerModelPrefix + targetPrefab.Model + "/buffer.bin",
                gltf_url = stickerModelPrefix + targetPrefab.Model + "/" + targetPrefab.Model + ".gltf",
                skins    = !string.IsNullOrEmpty(targetPrefab.Texture)? new[]
                {
                    new SkinInfo()
                    {
                        skin_name = targetPrefab.Texture,
                        skin_url  = texPrefix + targetPrefab.Texture + ".png",
                    }
                }:new SkinInfo [0],
                texs = targetPrefab.Texs
            }
        };
        File.WriteAllText(Application.dataPath + "/test111.json", JsonUtility.ToJson(renderinfo, true));
        Debug.Log("===>>完成");
    }