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]); }
/// <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); }