//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Friday, September 22, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
|
using System.Collections.Generic;
|
using LitJson;
|
|
namespace vnxbqy.UI
|
{
|
|
public class UI3DShowHero
|
{
|
int weaponId;
|
int clothesId;
|
int wingsId;
|
int secondaryId;
|
int extraSecondaryId;
|
int job;
|
|
GameObject weaponModel;
|
GameObject clothesModel;
|
GameObject wingsModel;
|
GameObject secondaryModel;
|
GameObject extraSecondaryModel;
|
|
Animator wingsAnimator;
|
Animator clothesAnimator;
|
RuntimeAnimatorController cacheClothedAC;
|
|
Transform showPoint;
|
List<SFXController> godWeaponSFXList = new List<SFXController>();
|
|
GameObject reikiRootShowPoint = null;
|
SFXController reikiRootEffect = null; //强化大师特效
|
SFXController titleRootEffect = null; //称号全身特效
|
|
bool isSuit = false;
|
public GameObject Show(UI3DPlayerExhibitionData data, Transform showPoint)
|
{
|
this.showPoint = showPoint;
|
this.job = data.job;
|
|
var clothes = data.fashionClothesId > 0 ? data.fashionClothesId : data.clothesId;
|
isSuit = data.suitLevel > 0;
|
var weaponId = data.fashionWeaponId > 0 ? data.fashionWeaponId : data.weaponId;
|
var wingsId = data.wingsId;
|
var secondaryId = data.fashionSecondaryId > 0 ? data.fashionSecondaryId : data.secondaryId;
|
|
var jobConfig = JobSetupConfig.Get(job);
|
|
var clothesResId = 0;
|
if (clothes == 0)
|
{
|
clothesResId = jobConfig.BaseEquip[0];
|
}
|
else
|
{
|
var item = ItemConfig.Get(clothes);
|
clothesResId = item == null ? clothesResId = jobConfig.BaseEquip[0] : item.ChangeOrd;
|
}
|
PutOnClothes(job, clothesResId);
|
|
var weaponResId = 0;
|
if (weaponId == 0)
|
{
|
weaponResId = jobConfig.BaseEquip[1];
|
}
|
else
|
{
|
var item = ItemConfig.Get(weaponId);
|
weaponResId = item == null ? weaponResId = jobConfig.BaseEquip[1] : item.ChangeOrd;
|
}
|
PutOnWeapon(job, weaponResId);
|
|
var secondaryResId = 0;
|
if (secondaryId == 0)
|
{
|
if (data.fashionClothesId == 0)
|
{
|
if (this.job == 1)
|
{
|
secondaryResId = ModelResConfig.GetHandByClothesID(clothesId);
|
}
|
else if (this.job == 2)
|
{
|
secondaryResId = jobConfig.BaseEquip[2];
|
}
|
}
|
}
|
else
|
{
|
var item = ItemConfig.Get(secondaryId);
|
if (item != null)
|
{
|
secondaryResId = item.ChangeOrd;
|
}
|
}
|
|
if (secondaryResId != 0)
|
{
|
PutOnSecondary(job, secondaryResId);
|
}
|
|
var extraSecondaryId = 0;
|
if (data.job == 1)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(0);
|
if (data.fashionClothesId > 0)
|
{
|
var _item = ItemConfig.Get(data.fashionClothesId);
|
if (_item != null)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(_item.ChangeOrd);
|
}
|
}
|
else if (data.clothesId > 0)
|
{
|
var _item = ItemConfig.Get(data.clothesId);
|
if (_item != null)
|
{
|
extraSecondaryId = ModelResConfig.GetHandByClothesID(_item.ChangeOrd);
|
}
|
}
|
|
if (secondaryResId == 0
|
|| (data.fashionClothesId != 0 && data.fashionSecondaryId > 0)
|
|| (data.fashionClothesId == 0 && data.fashionSecondaryId > 0))
|
{
|
PutOnExtraSecondary(job, extraSecondaryId);
|
}
|
}
|
|
var wingsResId = 0;
|
if (wingsId != 0)
|
{
|
var item = ItemConfig.Get(wingsId);
|
wingsResId = item == null ? 0 : item.ChangeOrd;
|
}
|
|
PutOnWing(wingsResId);
|
ShowBodyEffect(data);
|
|
LoadClothesEffect();
|
return clothesModel;
|
}
|
|
public GameObject Show(GameObject clothesModel, int job, int weaponResId, int wingsResId, int secondaryResId, Transform showPoint)
|
{
|
this.showPoint = showPoint;
|
this.job = job;
|
this.clothesModel = clothesModel;
|
SwitchMaterial(false);
|
PutOnWeapon(job, weaponResId);
|
PutOnSecondary(job, secondaryResId);
|
PutOnWing(wingsResId);
|
LoadClothesEffect();
|
return clothesModel;
|
}
|
|
public void Dispose()
|
{
|
GameObject prefab = null;
|
GameObjectPoolManager.GameObjectPool pool = null;
|
|
HideWeaponEffect();
|
HideSecondaryEffect();
|
HideSuitEffect();
|
HideReikiRootEffect();
|
HideTitleRootEffect();
|
|
if (weaponId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(weaponModel);
|
}
|
weaponModel = null;
|
}
|
|
if (secondaryId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(secondaryId);
|
if (prefab)
|
{
|
if (secondaryModel)
|
{
|
secondaryModel.SetActive(true);
|
}
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(secondaryModel);
|
}
|
secondaryModel = null;
|
}
|
|
if (extraSecondaryId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(extraSecondaryId);
|
if (prefab)
|
{
|
if (extraSecondaryModel)
|
{
|
extraSecondaryModel.SetActive(true);
|
}
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(extraSecondaryModel);
|
}
|
extraSecondaryModel = null;
|
}
|
|
if (wingsId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(wingsId);
|
if (prefab)
|
{
|
wingsModel.transform.localScale = Vector3.one;
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(wingsModel);
|
}
|
wingsModel = null;
|
wingsAnimator = null;
|
}
|
|
if (clothesId != 0)
|
{
|
if (clothesModel)
|
{
|
var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (smRenderer != null)
|
{
|
MaterialLoader.Release(smRenderer.material);
|
smRenderer.material = smRenderer.sharedMaterial = null;
|
smRenderer.materials = smRenderer.sharedMaterials = new Material[0];
|
}
|
}
|
|
prefab = InstanceResourcesLoader.LoadModelRes(clothesId, true);
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(clothesModel);
|
}
|
clothesModel = null;
|
if (clothesAnimator)
|
{
|
if (cacheClothedAC)
|
{
|
clothesAnimator.runtimeAnimatorController = cacheClothedAC;
|
cacheClothedAC = null;
|
}
|
clothesAnimator.enabled = false;
|
clothesAnimator = null;
|
}
|
}
|
|
clothesModel = null;
|
clothesId = 0;
|
weaponId = 0;
|
wingsId = 0;
|
secondaryId = 0;
|
extraSecondaryId = 0;
|
}
|
|
public void PlayAnim(int stateNameHash)
|
{
|
if (clothesModel != null)
|
{
|
var animator = clothesModel.GetComponent<Animator>();
|
if (animator)
|
{
|
int job = PlayerDatas.Instance.baseData.Job;
|
string name = job == 2 ? "A_Fs" : "A_Zs";
|
animator.runtimeAnimatorController = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, name);
|
animator.Play(stateNameHash);
|
}
|
}
|
}
|
|
public void StandUp()
|
{
|
if (clothesModel != null)
|
{
|
var animator = clothesModel.GetComponent<Animator>();
|
if (animator)
|
{
|
animator.Play(GAStaticDefine.State_IdleHash);
|
animator.SetInteger(GAStaticDefine.Param_Action, GAStaticDefine.Act_Idle);
|
}
|
}
|
}
|
|
public void SitDown()
|
{
|
if (clothesModel != null)
|
{
|
var animator = clothesModel.GetComponent<Animator>();
|
if (animator)
|
{
|
animator.SetInteger(GAStaticDefine.Param_Action, GAStaticDefine.Act_Dazuo);
|
}
|
}
|
|
if (weaponModel != null)
|
{
|
GameObject prefab = InstanceResourcesLoader.LoadModelRes(weaponId, false);
|
if (prefab)
|
{
|
GameObjectPoolManager.Instance.ReleaseGameObject(prefab, weaponModel);
|
}
|
weaponModel = null;
|
}
|
|
if (job == 2)
|
{
|
if (secondaryModel)
|
{
|
secondaryModel.SetActive(false);
|
}
|
}
|
}
|
|
private void PutOnClothes(int _job, int clothesResId)
|
{
|
var config = JobSetupConfig.Get(_job);
|
if (clothesId == clothesResId)
|
{
|
return;
|
}
|
|
if (clothesId != 0)
|
{
|
UnloadClothes();
|
}
|
|
var _prefab = InstanceResourcesLoader.LoadModelRes(clothesResId, true);
|
if (!_prefab)
|
{
|
clothesResId = config.BaseEquip[0];
|
}
|
|
LoadClothes(clothesResId);
|
clothesId = clothesResId;
|
|
if (clothesModel)
|
{
|
if (weaponModel)
|
{
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
|
weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
|
if (wingsModel)
|
{
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
|
wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
|
if (secondaryModel)
|
{
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
|
wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
}
|
}
|
|
private void LoadClothes(int resID)
|
{
|
var prefab = InstanceResourcesLoader.LoadModelRes(resID, true);
|
if (prefab)
|
{
|
var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
clothesModel = pool.Request();
|
|
LayerUtility.SetLayer(clothesModel, LayerUtility.Player, false);
|
var skinnedMeshRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>(true);
|
LayerUtility.SetLayer(skinnedMeshRenderer.gameObject, LayerUtility.Player, false);
|
clothesModel.SetActive(true);
|
clothesModel.transform.SetParentEx(showPoint, Vector3.zero, Quaternion.identity, Vector3.one);
|
clothesAnimator = clothesModel.GetComponent<Animator>();
|
|
// 动画状态机修改
|
if (clothesAnimator)
|
{
|
cacheClothedAC = clothesAnimator.runtimeAnimatorController;
|
RuntimeAnimatorController _controller = AnimatorControllerLoader.Load(AnimatorControllerLoader.controllerUISuffix, resID);
|
clothesAnimator.runtimeAnimatorController = _controller;
|
clothesAnimator.enabled = true;
|
}
|
else
|
{
|
DebugEx.LogErrorFormat("角色资源: {0} 没有动画控制器", resID);
|
}
|
}
|
}
|
|
private void UnloadClothes()
|
{
|
if (clothesModel == null)
|
{
|
return;
|
}
|
|
var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (smRenderer != null)
|
{
|
MaterialLoader.Release(smRenderer.material);
|
smRenderer.material = smRenderer.sharedMaterial = null;
|
smRenderer.materials = smRenderer.sharedMaterials = new Material[0];
|
}
|
|
var prefab = InstanceResourcesLoader.LoadModelRes(clothesId, true);
|
var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(clothesModel);
|
clothesModel = null;
|
if (clothesAnimator != null)
|
{
|
if (cacheClothedAC)
|
{
|
clothesAnimator.runtimeAnimatorController = cacheClothedAC;
|
cacheClothedAC = null;
|
}
|
clothesAnimator.enabled = false;
|
clothesAnimator = null;
|
}
|
}
|
|
private void PutOnWeapon(int _job, int resoureceId)
|
{
|
var config = JobSetupConfig.Get(_job);
|
|
var oldWeapon = weaponId;
|
if (oldWeapon == resoureceId)
|
{
|
return;
|
}
|
|
GameObject prefab = null;
|
GameObjectPoolManager.GameObjectPool pool = null;
|
|
if (oldWeapon != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon);
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(weaponModel);
|
weaponModel = null;
|
}
|
|
prefab = InstanceResourcesLoader.LoadModelRes(resoureceId);
|
|
if (!prefab)
|
{
|
resoureceId = config.BaseEquip[1];
|
prefab = InstanceResourcesLoader.LoadModelRes(resoureceId);
|
}
|
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
weaponModel = pool.Request();
|
|
LayerUtility.SetLayer(weaponModel, LayerUtility.Player, false);
|
if (clothesModel)
|
{
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
|
weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
|
var _resConfig = ModelResConfig.Get(resoureceId);
|
ShowSecondaryEffect(weaponModel.transform, _resConfig.ResourcesName);
|
}
|
|
weaponId = resoureceId;
|
}
|
|
private void PutOnExtraSecondary(int job, int extraSecondaryId)
|
{
|
var oldSecondary = this.extraSecondaryId;
|
if (oldSecondary == extraSecondaryId)
|
{
|
return;
|
}
|
|
GameObject prefab = null;
|
GameObjectPoolManager.GameObjectPool pool = null;
|
|
if (oldSecondary != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary);
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(extraSecondaryModel);
|
extraSecondaryModel = null;
|
}
|
|
if (extraSecondaryId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(extraSecondaryId);
|
if (!prefab)
|
{
|
var config = JobSetupConfig.Get(job);
|
extraSecondaryId = config.BaseEquip[2];
|
prefab = InstanceResourcesLoader.LoadModelRes(extraSecondaryId);
|
}
|
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
extraSecondaryModel = pool.Request();
|
|
var parent = this.clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[this.job - 1]);
|
extraSecondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
}
|
|
this.extraSecondaryId = extraSecondaryId;
|
}
|
|
private void PutOnSecondary(int _job, int secondaryResId)
|
{
|
var oldSecondary = secondaryId;
|
if (oldSecondary == secondaryResId)
|
{
|
return;
|
}
|
|
GameObject prefab = null;
|
GameObjectPoolManager.GameObjectPool pool = null;
|
|
if (oldSecondary != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary);
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(secondaryModel);
|
secondaryModel = null;
|
}
|
|
if (secondaryResId != 0)
|
{
|
var _resConfig = ModelResConfig.Get(secondaryResId);
|
prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
|
if (!prefab)
|
{
|
var config = JobSetupConfig.Get(_job);
|
secondaryResId = config.BaseEquip[2];
|
prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
|
}
|
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
secondaryModel = pool.Request();
|
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
|
secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
|
}
|
|
ShowSecondaryEffect(secondaryModel.transform, _resConfig.ResourcesName);
|
}
|
|
secondaryId = secondaryResId;
|
}
|
|
private void PutOnWing(int resourceId)
|
{
|
var config = JobSetupConfig.Get(job);
|
var oldWings = wingsId;
|
if (resourceId == oldWings)
|
{
|
return;
|
}
|
|
GameObject prefab = null;
|
GameObjectPoolManager.GameObjectPool pool = null;
|
|
if (oldWings != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(oldWings);
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pool.Release(wingsModel);
|
wingsModel = null;
|
}
|
|
if (resourceId != 0)
|
{
|
prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
|
|
if (!prefab)
|
{
|
resourceId = config.BaseEquip[3];
|
prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
|
}
|
|
if (prefab)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
wingsModel = pool.Request();
|
|
wingsModel.layer = LayerUtility.Player;
|
SkinnedMeshRenderer _renderer = wingsModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (_renderer)
|
{
|
_renderer.gameObject.layer = LayerUtility.Player;
|
}
|
|
var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
|
var modelResConfig = ModelResConfig.Get(resourceId);
|
wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, modelResConfig.UIScale);
|
|
wingsAnimator = wingsModel.GetComponent<Animator>();
|
if (wingsAnimator == null)
|
{
|
DebugEx.LogErrorFormat("翅膀资源{0}没有动画控制器", resourceId);
|
}
|
wingsAnimator.enabled = true;
|
wingsAnimator.Play("UI_Idle", 0);
|
}
|
}
|
|
wingsId = resourceId;
|
}
|
|
private void LoadClothesEffect()
|
{
|
SwitchMaterial(isSuit);
|
HideSuitEffect();
|
if (isSuit)
|
{
|
var _modelResConfig = ModelResConfig.Get(clothesId);
|
if (_modelResConfig != null)
|
{
|
var _boneList = ModelResConfig.GetBoneList(_modelResConfig.ResourcesName);
|
var _effectList = ModelResConfig.GetEffectList(_modelResConfig.ResourcesName);
|
if (_boneList != null)
|
{
|
Transform _node = null;
|
SFXController _sfx = null;
|
for (int i = 0; i < _boneList.Count; ++i)
|
{
|
_node = clothesModel.transform.GetChildTransformDeeply(_boneList[i]);
|
if (_node)
|
{
|
_sfx = SFXPlayUtility.Instance.PlayEffectAsync(_effectList[i], _node);
|
if (_sfx)
|
{
|
m_SuitEffectList.Add(_sfx);
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
private List<SFXController> m_SuitEffectList = new List<SFXController>();
|
private List<SFXController> m_WeaponEffectList = new List<SFXController>();
|
private List<SFXController> m_SecondaryEffectList = new List<SFXController>();
|
|
private void ShowWeaponEffect(Transform parent, string modelName)
|
{
|
HideWeaponEffect();
|
|
var _boneList = ModelResConfig.GetBoneList(modelName);
|
var _effectlist = ModelResConfig.GetEffectList(modelName);
|
|
if (_boneList != null && _effectlist != null)
|
{
|
for (int i = 0; i < _boneList.Count; ++i)
|
{
|
if (_boneList[i].Equals("null"))
|
{
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
|
m_WeaponEffectList.Add(_ctrl);
|
}
|
else
|
{
|
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
|
m_WeaponEffectList.Add(_ctrl);
|
}
|
}
|
}
|
}
|
|
private void ShowSecondaryEffect(Transform parent, string modelName)
|
{
|
HideWeaponEffect();
|
|
var _boneList = ModelResConfig.GetBoneList(modelName);
|
var _effectlist = ModelResConfig.GetEffectList(modelName);
|
|
if (_boneList != null && _effectlist != null)
|
{
|
for (int i = 0; i < _boneList.Count; ++i)
|
{
|
if (_boneList[i].Equals("null"))
|
{
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent);
|
m_SecondaryEffectList.Add(_ctrl);
|
}
|
else
|
{
|
|
var _ctrl = SFXPlayUtility.Instance.PlayBattleEffect(_effectlist[i], parent.GetChildTransformDeeply(_boneList[i]));
|
m_SecondaryEffectList.Add(_ctrl);
|
}
|
}
|
}
|
}
|
|
private void HideSecondaryEffect()
|
{
|
foreach (var _ctrl in m_SecondaryEffectList)
|
{
|
SFXPlayUtility.Instance.Release(_ctrl);
|
}
|
m_SecondaryEffectList.Clear();
|
}
|
|
private void HideWeaponEffect()
|
{
|
foreach (var _ctrl in m_WeaponEffectList)
|
{
|
SFXPlayUtility.Instance.Release(_ctrl);
|
}
|
m_WeaponEffectList.Clear();
|
}
|
|
private void HideSuitEffect()
|
{
|
foreach (var _ctrl in m_SuitEffectList)
|
{
|
SFXPlayUtility.Instance.Release(_ctrl);
|
}
|
m_SuitEffectList.Clear();
|
}
|
|
void ShowBodyEffect(UI3DPlayerExhibitionData data)
|
{
|
ShowReikiRootEffect(data.equipLevel, data.reikiRootEffectId);
|
int effectID = 0;
|
ModelCenter.Instance.GetModel<EquipModel>().equipAddEffect.TryGetValue(data.titleID, out effectID);
|
ShowTitleBodyEffect(effectID, data.scale > 0 ? data.scale * 0.5f : 0.5f);
|
}
|
|
private void ShowReikiRootEffect(int equipLevel, int id)
|
{
|
//改成强化大师特效 id为强化大师等级
|
HideReikiRootEffect();
|
var config = ItemPlusMasterConfig.TryGetMasterInfo(equipLevel, id);
|
if (id != 0 && config != null && clothesModel)
|
{
|
if (reikiRootShowPoint == null && showPoint.parent != null)
|
{
|
reikiRootShowPoint = new GameObject("ReikiRootShowPoint");
|
reikiRootShowPoint.transform.SetParentEx(showPoint.parent, showPoint.localPosition, showPoint.rotation, showPoint.localScale);
|
}
|
reikiRootEffect = SFXPlayUtility.Instance.Play(config.effect, reikiRootShowPoint == null ? showPoint : reikiRootShowPoint.transform);
|
if (reikiRootEffect != null)
|
{
|
var scale = config.uiScale / 100f;
|
var offsetY = config.offsetY / 100f;
|
reikiRootEffect.transform.localScale = Vector3.one * scale * 0.6f;
|
reikiRootEffect.transform.localPosition = reikiRootEffect.transform.localPosition.SetY(offsetY);
|
}
|
}
|
}
|
|
private void HideReikiRootEffect()
|
{
|
if (reikiRootEffect != null)
|
{
|
reikiRootEffect.transform.localPosition = Vector3.zero;
|
reikiRootEffect.transform.localScale = Vector3.zero;
|
SFXPlayUtility.Instance.Release(reikiRootEffect);
|
reikiRootEffect = null;
|
}
|
}
|
|
|
public void HideTitleRootEffect()
|
{
|
if (titleRootEffect != null)
|
{
|
titleRootEffect.transform.localPosition = Vector3.zero;
|
titleRootEffect.transform.localScale = Vector3.zero;
|
SFXPlayUtility.Instance.Release(titleRootEffect);
|
titleRootEffect = null;
|
}
|
}
|
|
|
//展示称号的全身特效
|
public void ShowTitleBodyEffect(int effectID, float scale = 1)
|
{
|
HideTitleRootEffect();
|
if (effectID == 0) return;
|
if (clothesModel)
|
{
|
if (reikiRootShowPoint == null && showPoint.parent != null)
|
{
|
reikiRootShowPoint = new GameObject("ReikiRootShowPoint");
|
reikiRootShowPoint.transform.SetParentEx(showPoint.parent, showPoint.localPosition, showPoint.rotation, showPoint.localScale);
|
}
|
titleRootEffect = SFXPlayUtility.Instance.Play(effectID, reikiRootShowPoint == null ? showPoint : reikiRootShowPoint.transform);
|
if (titleRootEffect != null)
|
{
|
titleRootEffect.duration = 0;
|
titleRootEffect.transform.localScale = Vector3.one * scale;
|
titleRootEffect.transform.localRotation = Quaternion.Euler(0, 40, 0);//后续优化传参
|
}
|
}
|
}
|
|
public void SwitchMaterial(bool isSuit)
|
{
|
if (clothesModel == null)
|
{
|
return;
|
}
|
|
var smRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>();
|
if (smRenderer == null)
|
{
|
return;
|
}
|
|
MaterialLoader.Release(smRenderer.material);
|
|
var newMat = MaterialLoader.LoadClothesMaterial(this.clothesId, true, isSuit);
|
if (newMat != null)
|
{
|
smRenderer.material = newMat;
|
}
|
}
|
|
}
|
|
}
|
|
|
|