少年修仙传客户端基础资源
client_Wu Xijin
2019-02-14 54fad068f41ba7b0d2f16699a3f774be2a0d84e9
Assets/Editor/Actor/ModelResourcesBuilder.cs
@@ -1,12 +1,12 @@
using TableConfig;

using UnityEngine;
using UnityEditor;
public class ModelResourcesBuilder : ResourcesBuilder
{
    public void BuildModelRes(int id)
    public void BuildModelRes(int id, bool isHighMesh = false)
    {
        ModelResConfig _modelRes = ConfigManager.Instance.GetTemplate<ModelResConfig>(id);
        ModelResConfig _modelRes = ModelResConfig.Get(id);
        if (_modelRes == null)
        {
            Debug.LogWarningFormat("要生成的ModelRes资源id: {0} 并不存在于配置表中, 请确认是否填写有错.", id);
@@ -15,62 +15,70 @@
        switch ((E_ModelResType)_modelRes.Type)
        {
            case E_ModelResType.Suit:
                BuildClothes(id);
                BuildClothes(id, isHighMesh);
                break;
            case E_ModelResType.Wing:
                BuildWing(id);
                BuildWing(id, isHighMesh);
                break;
            case E_ModelResType.Weapon:
                BuildWeapon(id);
                BuildWeapon(id, isHighMesh);
                break;
            case E_ModelResType.Horse:
                BuildHorse(id);
                BuildHorse(id, isHighMesh);
                break;
            case E_ModelResType.Secondary:
                BuildSecondary(id);
                BuildSecondary(id, isHighMesh);
                break;
            case E_ModelResType.Hand:
                BuildHand(id, isHighMesh);
                break;
        }
    }
    public void BuildClothes(int id)
    public void BuildClothes(int id, bool isHighMesh)
    {
        BuildAnimationClip(id);
        BuildAnimatorController(id, "Temple_AnimatorController_Hero", "animatorBuildConfig");
        BuildPrefab(id, InstanceResourcesLoader.raceSuffix);
        BuildPrefab(id, InstanceResourcesLoader.raceSuffix, isHighMesh);
    }
    public void BuildWeapon(int id)
    public void BuildWeapon(int id, bool isHighMesh)
    {
        BuildPrefab(id, InstanceResourcesLoader.weaponSuffix);
        BuildPrefab(id, InstanceResourcesLoader.weaponSuffix, isHighMesh);
    }
    public void BuildSecondary(int id)
    public void BuildSecondary(int id, bool isHighMesh)
    {
        BuildPrefab(id, InstanceResourcesLoader.secondarySuffix);
        BuildPrefab(id, InstanceResourcesLoader.secondarySuffix, isHighMesh);
    }
    public void BuildHorse(int id)
    public void BuildHand(int id, bool isHighMesh)
    {
        BuildPrefab(id, InstanceResourcesLoader.handSuffix, isHighMesh);
    }
    public void BuildHorse(int id, bool isHighMesh)
    {
        BuildAnimationClip(id);
        BuildAnimatorController(id, "Temple_AnimatorController_Horse", "animatorBuildConfig");
        BuildPrefab(id, InstanceResourcesLoader.horseSuffix);
        BuildPrefab(id, InstanceResourcesLoader.horseSuffix, isHighMesh);
    }
    public void BuildWing(int id)
    public void BuildWing(int id, bool isHighMesh)
    {
        BuildAnimationClip(id);
        BuildAnimatorController(id, "Temple_AnimatorController_Wing", "animatorBuildConfig_Wing");
        BuildPrefab(id, InstanceResourcesLoader.wingSuffix);
        BuildPrefab(id, InstanceResourcesLoader.wingSuffix, isHighMesh);
    }
    private void BuildPrefab(int id, string suffix)
    private void BuildPrefab(int id, string suffix, bool isHighMesh = false)
    {
        if (!IsBuildPrefab)
        {
            return;
        }
        ModelResConfig _modelRes = ConfigManager.Instance.GetTemplate<ModelResConfig>(id);
        ModelResConfig _modelRes = ModelResConfig.Get(id);
        string _path = _modelRes.ResourcesName;
        string _resName = _modelRes.ResourcesName;
        if (_path.IndexOf('/') != -1)
@@ -79,7 +87,33 @@
            _path = _path.Substring(0, _modelRes.ResourcesName.IndexOf('/'));
        }
        BuildPrefab(_path, _resName, suffix);
        if (suffix.Equals(InstanceResourcesLoader.raceSuffix))
        {
            HandleMaterial(_path, _resName, _modelRes.Material_Fight_Normal);
            HandleMaterial(_path, _resName, _modelRes.Material_UI_Normal);
            HandleMaterial(_path, _resName, _modelRes.Material_Fight_Suit);
            HandleMaterial(_path, _resName, _modelRes.Material_UI_Suit);
        }
        BuildPrefab(_path, _resName, suffix, null, isHighMesh);
    }
    public static void HandleMaterial(string path, string bunedleName, string assetName)
    {
        if (string.IsNullOrEmpty(assetName))
        {
            return;
        }
        string _originalePath = string.Format("Assets/ART/Role/{0}/Materials/{1}.mat", path, assetName);
        var _old = AssetDatabase.LoadAssetAtPath<Material>(_originalePath);
        var _material = Object.Instantiate(_old);
        AssetDatabase.CreateAsset(_material, "Assets/ResourcesOut/Mob/" + path + "/Materials/" + assetName + ".mat");
        var _importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(_material));
        _importer.assetBundleName = ResourcesPath.MOB_FOLDER_NAME
            + (InstanceResourcesLoader.raceSuffix + bunedleName).ToLower();
        EditorUtility.SetDirty(_material);
    }
    public static void BuildAnimationClip(int id)
@@ -89,7 +123,7 @@
            return;
        }
        ModelResConfig _modelRes = ConfigManager.Instance.GetTemplate<ModelResConfig>(id);
        ModelResConfig _modelRes = ModelResConfig.Get(id);
        string _path = _modelRes.ResourcesName;
        if (_path.IndexOf('/') != -1)
        {
@@ -101,12 +135,12 @@
    public static void BuildAnimatorController(int id, string templeName, string configName)
    {
        if (!IsBuildAnimatorController)
        if (!IsBuildAnimatorController && !IsBuildAnimatorUIController)
        {
            return;
        }
        ModelResConfig _modelRes = ConfigManager.Instance.GetTemplate<ModelResConfig>(id);
        ModelResConfig _modelRes = ModelResConfig.Get(id);
        string _path = _modelRes.ResourcesName;
        if (_path.IndexOf('/') != -1)
        {
@@ -114,10 +148,22 @@
        }
        BuildAnimatorController(_path, templeName, configName);
        if (ResourcesBuilder.IsBuildAnimatorUIController)
        {
            BuildAnimatorController(_path, "Temple_AnimatorController_UI", "animatorBuildConfig", null);
        }
    }
    protected override void OnSetupRenderer(string path, string resName, ref Renderer renderer)
    {
    {//Assets/ART/Role/A_Zs_Sb/Materials/A_Zs05_Sb.mat
        string _originalPath = path;
        if (path.EndsWith("_Sb"))
        {
            path = path.Replace("_Sb", "");
            resName = resName.Replace("_Sb", "");
        }
        string _materialPath = string.Format("Assets/ART/Role/{0}/Materials/{1}.mat", path, resName);
        Material _material = AssetDatabase.LoadAssetAtPath<Material>(_materialPath);
@@ -128,9 +174,15 @@
        // 设置为不接受阴影
        renderer.receiveShadows = false;
        renderer.materials = new Material[0];
        renderer.sharedMaterial = AssetDatabase.LoadAssetAtPath<Material>(_materialPath);
        if (_originalPath.Equals("A_Zs") || _originalPath.Equals("A_Fs"))
        {
            renderer.material = renderer.sharedMaterial = null;
            renderer.materials = renderer.sharedMaterials = new Material[0];
        }
        else
        {
            renderer.material = renderer.sharedMaterial = AssetDatabase.LoadAssetAtPath<Material>(_materialPath);
        }
        // 这里是对翅膀的特殊处理
        Transform _parent = renderer.transform.parent;