示例#1
0
    void OnGUI()
    {
        GUILayout.Label("--- Target PlayerModel ---");

        GameObject newModel = (GameObject)EditorGUILayout.ObjectField("PlayerModel", playerModel, typeof(GameObject), true);

        if (newModel != playerModel)
        {
            #region a
            var  modelClone          = Object.Instantiate(newModel) as GameObject;
            bool hasWeaponAttachment = modelClone.transform.RecursiveObjectExist(ConstDefineManager.LBWeaponPos) ||
                                       modelClone.transform.RecursiveObjectExist(ConstDefineManager.RBWeaponPos) ||
                                       modelClone.transform.RecursiveObjectExist(ConstDefineManager.LHWeaponPos) ||
                                       modelClone.transform.RecursiveObjectExist(ConstDefineManager.RHWeaponPos);
            if (!hasWeaponAttachment)
            {
                if (EditorUtility.DisplayDialog("提示!", "模型没有武器挂载点", "ok", "cancel"))
                {
                    playerModel = newModel;
                }
            }
            else
            {
                playerModel = newModel;
            }

            Object.DestroyImmediate(modelClone);
            #endregion
        }
        EditorGUILayout.Separator();
        if (GUILayout.Button("0-测试AssetBundle"))
        {
            _database      = SkinMeshRenderHolder.CreateInstance <SkinMeshRenderHolder>();
            _database.name = "First";
            SetData();
        }

        if (GUILayout.Button("1-创建材质"))
        {
            if (newModel != null)
            {
                if (JianghuPlayerAssetManager_V2.GenerateMaterials(playerModel, out errorInfo))
                {
                    EditorUtility.DisplayDialog("Character Generator", "创建材质成功", "ok", "cancel");
                }
                else
                {
                    EditorUtility.DisplayDialog("Character Generator", "创建材质失败", "ok", "cancel");
                }
            }
            else
            {
            }
        }

        if (GUILayout.Button("2-分解动画"))
        {
            if (newModel != null)
            {
                if (JianghuPlayerAssetManager_V2.SplitAnimations(playerModel, out errorInfo))
                {
                    EditorUtility.DisplayDialog("Character Generator", "分解动画成功", "ok", "cancel");
                }
                else
                {
                    EditorUtility.DisplayDialog("Character Generator", "分解动画失败", "ok", "cancel");
                }
            }
            else
            {
            }
        }

        if (GUILayout.Button("3-生成角色基础预设件"))
        {
            if (newModel != null)
            {
                if (JianghuPlayerAssetManager_V2.GenerateRoleBaseAsset(playerModel, out errorInfo))
                {
                    EditorUtility.DisplayDialog("Character Generator", "生成角色基础预设件成功", "ok", "cancel");
                }
                else
                {
                    EditorUtility.DisplayDialog("Character Generator", "生成角色基础预设件失败", "ok", "cancel");
                }
            }
            else
            {
            }
        }

        //生成蒙皮物件
        if (GUILayout.Button("4-生成蒙皮物件"))
        {
            if (newModel != null)
            {
                if (JianghuPlayerAssetManager_V2.GenerateRoleSkinAsset(playerModel, out errorInfo))
                {
                    EditorUtility.DisplayDialog("Character Generator", "生成蒙皮物件成功", "ok", "cancel");
                }
                else
                {
                    EditorUtility.DisplayDialog("Character Generator", "生成蒙皮物件失败", "ok", "cancel");
                }
            }
            else
            {
            }
        }

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();

        //生成一个角色
        if (GUILayout.Button("生成一个角色"))
        {
            RoleGenerate.GenerateRole("char01", "Char01_001", false, MESHDENSITY.HIGHT);
        }

        if (GUILayout.Button("生成一个角色(低模)"))
        {
            RoleGenerate.GenerateRole("Char01", "Char01_001", false, MESHDENSITY.LOW);
        }

        GUILayout.BeginHorizontal();

        GUILayout.EndHorizontal();
        GUILayout.Label(errorInfo);
    }
示例#2
0
    /// <summary>
    /// 生成角色蒙皮预设件
    /// </summary>
    /// <param name="targetModel"></param>
    /// <param name="errorInfo"></param>
    /// <returns></returns>
    public static bool GenerateRoleSkinAsset(GameObject targetModel, out string errorInfo)
    {
        if (!CheckModelValid(targetModel, out errorInfo))
        {
            return(false);
        }
        var modelName = targetModel.name.Replace(M_MODELPREFIX, "");

        string roleSkinPath = SKINEDMESH_PATH + modelName + "/";

        if (!Directory.Exists(roleSkinPath))
        {
            Directory.CreateDirectory(roleSkinPath);
        }
        DeleteSpecFiles(roleSkinPath);


        List <Material> materials = EditorHelpers.CollectAll <Material>(MATERIALS_PATH + modelName);

        foreach (var smr in targetModel.GetComponentsInChildren <SkinnedMeshRenderer>(true))
        {
            SkinMeshRenderHolder smrHolder = ScriptableObject.CreateInstance <SkinMeshRenderHolder>();
            smrHolder.Mats  = new List <Material>();
            smrHolder.Bones = new List <string>();

            GameObject rendererClone  = (GameObject)PrefabUtility.InstantiatePrefab(smr.gameObject);
            GameObject rendererParent = rendererClone.transform.parent.gameObject;
            rendererClone.transform.parent = null;
            Object.DestroyImmediate(rendererParent);
            Object rendererPrefab = GetPrefab(rendererClone, roleSkinPath + smr.name + "_smr.prefab");
            smrHolder.SMRGO = rendererPrefab;

            foreach (Material m in materials)
            {
                string smrTemp;
                Debug.Log("smr.name = " + smr.name);
                if (smr.name.Contains("Low"))
                {
                    smrTemp = smr.name.Substring(0, smr.name.LastIndexOf("_"));
                }
                else
                {
                    smrTemp = smr.name;
                }

                //string smrTemp = smr.name.Substring(0, smr.name.LastIndexOf("_"));
                //smrTemp = smr.name.Substring(0, "Char01_001_low".LastIndexOf("_"));
                //Debug.Log("smrTemp = " + smrTemp);
                //Debug.Log("m = " + m.name);
                if (m.name.Contains(smrTemp.ToLower()))
                {
                    smrHolder.Mats.Add(m);
                }
                //if (m.name.Contains(smr.name.ToLower())) smrHolder.Mats.Add(m);
            }
            //Debug.Log("smrHolder.mats = " + smrHolder.Mats.Count);

            //List<string> boneNames = new List<string>();   //字符串列表,记录子蒙皮模型对应的骨骼名称清单。
            foreach (Transform t in smr.bones)
            {
                smrHolder.Bones.Add(t.name);
            }

            AssetDatabase.CreateAsset(smrHolder, roleSkinPath + smr.name + ".asset");
        }

        return(true);
    }