|
using UnityEngine;
|
using UnityEditor;
|
|
public class ModelResourcesBuilder : ResourcesBuilder
|
{
|
public void BuildModelRes(int id, bool isHighMesh = false)
|
{
|
ModelResConfig _modelRes = ModelResConfig.Get(id);
|
if (_modelRes == null)
|
{
|
Debug.LogWarningFormat("要生成的ModelRes资源id: {0} 并不存在于配置表中, 请确认是否填写有错.", id);
|
return;
|
}
|
switch ((E_ModelResType)_modelRes.Type)
|
{
|
case E_ModelResType.Suit:
|
BuildClothes(id, isHighMesh);
|
break;
|
case E_ModelResType.Wing:
|
BuildWing(id, isHighMesh);
|
break;
|
case E_ModelResType.Weapon:
|
BuildWeapon(id, isHighMesh);
|
break;
|
case E_ModelResType.Horse:
|
BuildHorse(id, isHighMesh);
|
break;
|
case E_ModelResType.Secondary:
|
BuildSecondary(id, isHighMesh);
|
break;
|
case E_ModelResType.Hand:
|
BuildHand(id, isHighMesh);
|
break;
|
}
|
}
|
|
public void BuildClothes(int id, bool isHighMesh)
|
{
|
BuildAnimationClip(id);
|
BuildAnimatorController(id, "Temple_AnimatorController_Hero", "animatorBuildConfig");
|
BuildPrefab(id, InstanceResourcesLoader.raceSuffix, isHighMesh);
|
}
|
|
public void BuildWeapon(int id, bool isHighMesh)
|
{
|
BuildPrefab(id, InstanceResourcesLoader.weaponSuffix, isHighMesh);
|
}
|
|
public void BuildSecondary(int id, bool isHighMesh)
|
{
|
BuildPrefab(id, InstanceResourcesLoader.secondarySuffix, isHighMesh);
|
}
|
|
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, isHighMesh);
|
}
|
|
public void BuildWing(int id, bool isHighMesh)
|
{
|
BuildAnimationClip(id);
|
BuildAnimatorController(id, "Temple_AnimatorController_Wing", "animatorBuildConfig_Wing");
|
BuildPrefab(id, InstanceResourcesLoader.wingSuffix, isHighMesh);
|
}
|
|
private void BuildPrefab(int id, string suffix, bool isHighMesh = false)
|
{
|
if (!IsBuildPrefab)
|
{
|
return;
|
}
|
|
ModelResConfig _modelRes = ModelResConfig.Get(id);
|
string _path = _modelRes.ResourcesName;
|
string _resName = _modelRes.ResourcesName;
|
if (_path.IndexOf('/') != -1)
|
{
|
_resName = _path.Substring(_path.IndexOf("/") + 1);
|
_path = _path.Substring(0, _modelRes.ResourcesName.IndexOf('/'));
|
}
|
|
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/Gmodels/" + 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)
|
{
|
if (!IsBuildAnimationClip)
|
{
|
return;
|
}
|
|
ModelResConfig _modelRes = ModelResConfig.Get(id);
|
string _path = _modelRes.ResourcesName;
|
if (_path.IndexOf('/') != -1)
|
{
|
_path = _path.Substring(0, _modelRes.ResourcesName.IndexOf('/'));
|
}
|
|
BuildAnimationClip(_path);
|
}
|
|
public static void BuildAnimatorController(int id, string templeName, string configName)
|
{
|
if (!IsBuildAnimatorController && !IsBuildAnimatorUIController)
|
{
|
return;
|
}
|
|
ModelResConfig _modelRes = ModelResConfig.Get(id);
|
string _path = _modelRes.ResourcesName;
|
if (_path.IndexOf('/') != -1)
|
{
|
_path = _path.Substring(0, _modelRes.ResourcesName.IndexOf('/'));
|
}
|
|
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);
|
if (!_material)
|
{
|
return;
|
}
|
|
// 设置为不接受阴影
|
renderer.receiveShadows = false;
|
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;
|
if (_parent == null)
|
{
|
return;
|
}
|
|
// 翅膀的第二个节点
|
Transform _node = _parent.Find(resName + "b");
|
|
if (_node == null)
|
{
|
return;
|
}
|
|
_materialPath = string.Format("Assets/ART/Role/{0}/Materials/{1}_glow.mat", path, resName);
|
|
Renderer _renderer = _node.GetComponent<Renderer>();
|
_renderer.receiveShadows = false;
|
|
_renderer.materials = new Material[0];
|
_renderer.sharedMaterial = AssetDatabase.LoadAssetAtPath<Material>(_materialPath);
|
}
|
}
|