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); }
/// <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); }
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); } }
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); } }
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); } }
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 }); }
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); }
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("===>>完成"); }