public void Init() { combineConfig = FbxEditor.GetConfig(); TempEquipSuit fashions = new TempEquipSuit(); m_FashionList = new List <EquipPart>(); m_EquipList = new List <EquipPart>(); var fashionsuit = XTableMgr.GetTable <FashionSuit>(); for (int i = 0, max = fashionsuit.length; i < max; ++i) { FashionSuit.RowData row = fashionsuit[i]; if (row.FashionID != null) { XEquipUtil.MakeEquip(row.SuitName, row.FashionID, m_FashionList, fashions, (int)row.SuitID); } } var equipsuit = XTableMgr.GetTable <EquipSuit>(); for (int i = 0; i < equipsuit.length; ++i) { EquipSuit.RowData row = equipsuit[i]; if (row.EquipID != null) { XEquipUtil.MakeEquip(row.SuitName, row.EquipID, m_EquipList, fashions, -1); } } }
private void TestAvatar() { role = XEntityMgr.singleton.CreateTestRole(); role.EntityObject.AddComponent <XRotation>(); //时装 TempEquipSuit fashions = new TempEquipSuit(); m_FashionList = new List <EquipPart>(); var fashionsuit = XTableMgr.GetTable <FashionSuit>(); for (int i = 0, max = fashionsuit.length; i < max; ++i) { FashionSuit.RowData row = fashionsuit[i]; if (row.FashionID != null) { XEquipUtil.MakeEquip(row.SuitName, row.FashionID, m_FashionList, fashions, (int)row.SuitID); } } //装备 m_EquipList = new List <EquipPart>(); var equipsuit = XTableMgr.GetTable <EquipSuit>(); for (int i = 0, max = equipsuit.length; i < max; ++i) { EquipSuit.RowData row = equipsuit[i]; if (row.EquipID != null) { XEquipUtil.MakeEquip(row.SuitName, row.EquipID, m_EquipList, fashions, -1); } } }
public override void OnInitial(XEntity enty) { base.OnInitial(enty); XEntity e = enty; //时装 TempEquipSuit fashions = new TempEquipSuit(); m_FashionList = new List <EquipPart>(); var fashionsuit = XTableMgr.GetTable <FashionSuit>(); for (int i = 0, max = fashionsuit.length; i < max; ++i) { FashionSuit.RowData row = fashionsuit[i]; if (row.FashionID != null) { XEquipUtil.MakeEquip(row.SuitName, row.FashionID, m_FashionList, fashions, (int)row.SuitID); } } //装备 m_EquipList = new List <EquipPart>(); var equipsuit = XTableMgr.GetTable <EquipSuit>(); for (int i = 0, max = equipsuit.length; i < max; ++i) { EquipSuit.RowData row = equipsuit[i]; if (row.EquipID != null) { XEquipUtil.MakeEquip(row.SuitName, row.EquipID, m_EquipList, fashions, -1); } } Transform skinmesh = e.EntityObject.transform; skin = skinmesh.GetComponent <SkinnedMeshRenderer>(); if (skin == null) { skin = skinmesh.gameObject.AddComponent <SkinnedMeshRenderer>(); } skin.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; e.skin = skin; for (EPartType part = EPartType.ECombinePartStart; part < EPartType.ECombinePartEnd; ++part) { parts[(int)part] = new PartLoadTask(part, this); } for (EPartType part = EPartType.ECombinePartEnd; part < EPartType.EMountEnd; ++part) { parts[(int)part] = new MountLoadTask(part, this); } RegisterEvent(XEventDefine.XEvent_Detach_Host, OnDetachHost); EquipPart(m_FashionList[0]); }
public void EquipPart(EquipPart part) { fashionList = new List <FashionPositionInfo>(); FashionPositionInfo fpi = new FashionPositionInfo(); fpi.fasionID = 0; fpi.presentName = "0"; fpi.replace = false; fpi.equipName = ""; for (int i = 0; i < part.partPath.Length; ++i) //length = 8 { string path = part.partPath[i]; if (string.IsNullOrEmpty(path)) { path = XEquipUtil.GetDefaultPath((EPartType)i, (entity as NativeRole).defEquip); } fpi.equipName = path; fashionList.Add(fpi); } EquipAll(fashionList.ToArray()); }
private void Preview(EquipPart part) { //1.mesh collection List <CombineInstance> ciList = new List <CombineInstance>(); Texture[] m_tex = new Texture[8]; DefaultEquip.RowData data = XTableMgr.GetTable <DefaultEquip>().GetByUID(m_profession + 1); string name = ""; for (int i = 0; i < part.partPath.Length; ++i) { string path = part.partPath[i]; CombineInstance ci = new CombineInstance(); if (string.IsNullOrEmpty(path)) { path = XEquipUtil.GetDefaultPath((EPartType)i, data); } else if (name == "") { int index = path.LastIndexOf("_"); if (index >= 0) { name = path.Substring(0, index); } } if (!string.IsNullOrEmpty(path)) { path = "Assets/Resources/Equipments/" + path; Mesh mesh = AssetDatabase.LoadAssetAtPath <Mesh>(path + AssetType.Asset); Texture tex = AssetDatabase.LoadAssetAtPath <Texture>(path + AssetType.TGA); if (mesh != null) { ci.mesh = mesh; m_tex[i] = tex; } if (ci.mesh != null) { ciList.Add(ci); } } } if (ciList.Count > 0) { if (newGo != null) { GameObject.DestroyImmediate(newGo); } string skinPrfab = "Assets/Resources/Prefabs/" + combineConfig.PrefabName[m_profession] + AssetType.Prefab; newGo = GameObject.Instantiate(AssetDatabase.LoadAssetAtPath <Object>(skinPrfab)) as GameObject; if (name != "") { newGo.name = name; } newGo.transform.localRotation = Quaternion.Euler(new Vector3(0, 180, 0)); //2.combine Transform t = newGo.transform; SkinnedMeshRenderer newSmr = t.GetComponent <SkinnedMeshRenderer>(); newSmr.sharedMesh = new Mesh(); newSmr.sharedMesh.CombineMeshes(ciList.ToArray(), true, false); //3.set material Material mat = new Material(Shader.Find("Custom/Skin/RimlightBlend8")); for (int i = 0; i < m_tex.Length; ++i) { mat.SetTexture("_Tex" + i.ToString(), m_tex[i]); } newSmr.sharedMaterial = mat; if (data.WeaponPoint != null && data.WeaponPoint.Length > 0) { string weapon = data.WeaponPoint[0].ToString(); Transform trans = newGo.transform.Find(weapon); if (trans != null) { string path = part.mainWeapon; if (string.IsNullOrEmpty(path)) { path = data.Weapon; } GameObject mainWeapon = AssetDatabase.LoadAssetAtPath <GameObject>("Assets/Resources/Equipments/" + path + AssetType.Prefab); if (mainWeapon != null) { GameObject instance = GameObject.Instantiate(mainWeapon) as GameObject; instance.transform.parent = trans; instance.transform.localPosition = Vector3.zero; instance.transform.localRotation = Quaternion.identity; instance.transform.localScale = Vector3.one; } } } } }
private static bool ReturnMaterial(Material mat, string path) { XEquipUtil.ReturnMaterial(mat); return(true); }
/// <summary> /// 处理mesh和tex的对应关系,并处理uv /// </summary> private bool Combine() { int partCount = 0; for (int i = (int)EPartType.ECombinePartStart; i < (int)EPartType.ECombinePartEnd; ++i) { PartLoadTask part = parts[i] as PartLoadTask; if (part.HasMesh()) { partCount++; } } CombineInstance[] combineArray = GetMatCombineInstanceArray(partCount); if (combineArray != null) { //1.mesh collection int index = 0; for (int i = (int)EPartType.ECombinePartStart; i < (int)EPartType.ECombinePartEnd; ++i) { PartLoadTask part = parts[i] as PartLoadTask; if (part.HasMesh()) { CombineInstance ci = new CombineInstance(); if (part.mesh != null) { ci.mesh = part.mesh; } ci.subMeshIndex = 0; combineArray[index++] = ci; } } //2.combine if (skin.sharedMesh == null) { skin.sharedMesh = new Mesh(); } else { skin.sharedMesh.Clear(true); } skin.gameObject.SetActive(false); skin.sharedMesh.CombineMeshes(combineArray, true, false); skin.gameObject.SetActive(true); //3.set material if (skin != null) { XEquipUtil.ReturnMaterial(skin.sharedMaterial); } skin.sharedMaterial = XEquipUtil.GetRoleMat(); skin.GetPropertyBlock(mpb); //4. postload - set texture for (EPartType part = EPartType.ECombinePartStart; part < EPartType.EMountEnd; ++part) { parts[(int)part].PostLoad(); } return(true); } return(false); }