|
@@ -17,7 +17,7 @@ namespace GFGGame
|
|
|
private const string BODY_EFFECT_OBJ_NAME = "Body_eff";
|
|
|
public const string FORMAT_SPRITE_NAME = "T{0}_s{1}";
|
|
|
private const string FORMAT_ANIMATION_NAME = "T{0}_a{1}";
|
|
|
- private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_eff";
|
|
|
+ private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_e{1}";
|
|
|
|
|
|
public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
|
|
|
{
|
|
@@ -80,22 +80,6 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //特效
|
|
|
- if (itemCfg.effLayer > 0)
|
|
|
- {
|
|
|
- var objName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType);
|
|
|
- ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
|
|
|
- int sortingOrder = typeCfg.defaultLayer;
|
|
|
- if (itemCfg.effLayer == 2)
|
|
|
- {
|
|
|
- sortingOrder = typeCfg.specialLayer;
|
|
|
- }
|
|
|
- else if(itemCfg.effLayer == 3)
|
|
|
- {
|
|
|
- sortingOrder = typeCfg.thirdlLayer;
|
|
|
- }
|
|
|
- AddEffectObj(itemCfg.res, objName, parentObj, sortingOrder);
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -125,7 +109,9 @@ namespace GFGGame
|
|
|
spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 1);
|
|
|
TryClearSpriteObj(parentObj, spritObjName);
|
|
|
aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 1);
|
|
|
- TryRemoveAnimationObj(parentObj, aniObjName);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
+ aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 1);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
}
|
|
|
//特殊层
|
|
|
if (!string.IsNullOrEmpty(itemCfg.resLayer2))
|
|
@@ -133,7 +119,9 @@ namespace GFGGame
|
|
|
spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 2);
|
|
|
TryClearSpriteObj(parentObj, spritObjName);
|
|
|
aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 2);
|
|
|
- TryRemoveAnimationObj(parentObj, aniObjName);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
+ aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 2);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
}
|
|
|
//第三层
|
|
|
if (!string.IsNullOrEmpty(itemCfg.resLayer3))
|
|
@@ -141,18 +129,9 @@ namespace GFGGame
|
|
|
spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, 3);
|
|
|
TryClearSpriteObj(parentObj, spritObjName);
|
|
|
aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, 3);
|
|
|
- TryRemoveAnimationObj(parentObj, aniObjName);
|
|
|
- }
|
|
|
-
|
|
|
- //特效
|
|
|
- if (itemCfg.effLayer > 0)
|
|
|
- {
|
|
|
- string effObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType);
|
|
|
- var effTf = parentObj.transform.Find(effObjName);
|
|
|
- if (effTf != null)
|
|
|
- {
|
|
|
- GameObject.DestroyImmediate(effTf.gameObject);
|
|
|
- }
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
+ aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, 3);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -188,7 +167,8 @@ namespace GFGGame
|
|
|
|
|
|
//清理旧的
|
|
|
TryClearSpriteObj(parentObj, BODY_SPRITE_NAME);
|
|
|
- TryRemoveAnimationObj(parentObj, BODY_ANIMATION_NAME);
|
|
|
+ TryRemoveObj(parentObj, BODY_ANIMATION_NAME);
|
|
|
+ TryRemoveObj(parentObj, BODY_EFFECT_OBJ_NAME);
|
|
|
|
|
|
if (isAni)
|
|
|
{
|
|
@@ -199,14 +179,9 @@ namespace GFGGame
|
|
|
AddSpriteObj(res, "png", BODY_SPRITE_NAME, parentObj, 0, needSetMask);
|
|
|
}
|
|
|
//特效
|
|
|
- var tf = parentObj.transform.Find(BODY_EFFECT_OBJ_NAME);
|
|
|
- if (tf != null)
|
|
|
- {
|
|
|
- GameObject.DestroyImmediate(tf.gameObject);
|
|
|
- }
|
|
|
if (!string.IsNullOrEmpty(effRes))
|
|
|
{
|
|
|
- AddEffectObj(effRes, BODY_EFFECT_OBJ_NAME, parentObj, 0);
|
|
|
+ TryAddEffectObj(effRes, BODY_EFFECT_OBJ_NAME, parentObj, 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -252,37 +227,44 @@ namespace GFGGame
|
|
|
var spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, layerId);
|
|
|
TryClearSpriteObj(parentObj, spritObjName);
|
|
|
var aniObjName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, layerId);
|
|
|
- TryRemoveAnimationObj(parentObj, aniObjName);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType);
|
|
|
//这里需要先添加静态图,防止加载动画有延迟,出现光头
|
|
|
GameObject gameObject = AddSpriteObj(res, ext, spritObjName, parentObj, sortingOrder, needSetMask);
|
|
|
|
|
|
- if (itemCfg.isAni > 0 && showAni)
|
|
|
+ if (showAni)
|
|
|
{
|
|
|
- AddAnimationObj(res, aniObjName, parentObj, sortingOrder);
|
|
|
- Timers.inst.Add(0.03f, 1, (obj) =>
|
|
|
+ var aniObj = AddAnimationObj(res, aniObjName, parentObj, sortingOrder);
|
|
|
+ if(aniObj != null)
|
|
|
{
|
|
|
- if (parentObj != null && parentObj.transform != null)
|
|
|
+ Timers.inst.Add(0.03f, 1, (obj) =>
|
|
|
{
|
|
|
- Transform tf = parentObj.transform.Find(spritObjName);
|
|
|
- if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
|
|
|
+ if (parentObj != null && parentObj.transform != null)
|
|
|
{
|
|
|
- var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
|
|
|
- if (assetDisposer != null)
|
|
|
+ Transform tf = parentObj.transform.Find(spritObjName);
|
|
|
+ if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
|
|
|
{
|
|
|
- if (!string.IsNullOrEmpty(assetDisposer.resPath))
|
|
|
+ var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
|
|
|
+ if (assetDisposer != null)
|
|
|
{
|
|
|
- string resPath = ResPathUtil.GetDressUpPath(res, ext);
|
|
|
- if (assetDisposer.resPath == resPath)
|
|
|
+ if (!string.IsNullOrEmpty(assetDisposer.resPath))
|
|
|
{
|
|
|
- TryClearSpriteObj(parentObj, spritObjName);
|
|
|
+ string resPath = ResPathUtil.GetDressUpPath(res, ext);
|
|
|
+ if (assetDisposer.resPath == resPath)
|
|
|
+ {
|
|
|
+ TryClearSpriteObj(parentObj, spritObjName);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ aniObjName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, layerId);
|
|
|
+ TryRemoveObj(parentObj, aniObjName);
|
|
|
+ TryAddEffectObj(itemCfg.res, aniObjName, parentObj, sortingOrder);
|
|
|
}
|
|
|
|
|
|
private static GameObject AddSpriteObj(string res, string ext, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
|
|
@@ -360,6 +342,10 @@ namespace GFGGame
|
|
|
private static GameObject AddAnimationObj(string res, string objName, GameObject parentObj, int sortingOrder)
|
|
|
{
|
|
|
string resPath = ResPathUtil.GetDressUpAnimationPath(res);
|
|
|
+ if (!VEngine.Versions.Contains(resPath))
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
var prefab = GFGAsset.Load<GameObject>(resPath);
|
|
|
var gameObj = GameObject.Instantiate(prefab);
|
|
|
AddAssetReleaser(gameObj, resPath);
|
|
@@ -382,7 +368,7 @@ namespace GFGGame
|
|
|
return gameObj;
|
|
|
}
|
|
|
|
|
|
- private static void TryRemoveAnimationObj(GameObject parentObj, string aniObjName)
|
|
|
+ private static void TryRemoveObj(GameObject parentObj, string aniObjName)
|
|
|
{
|
|
|
if (parentObj == null)
|
|
|
{
|
|
@@ -412,9 +398,13 @@ namespace GFGGame
|
|
|
return gameObj;
|
|
|
}
|
|
|
|
|
|
- private static GameObject AddEffectObj(string res, string objName, GameObject parentObj, int sortingOrder)
|
|
|
+ private static void TryAddEffectObj(string res, string objName, GameObject parentObj, int sortingOrder)
|
|
|
{
|
|
|
var resPath = ResPathUtil.GetDressUpEffectPath(res);
|
|
|
+ if (!VEngine.Versions.Contains(resPath))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
GameObject effPre = GFGAsset.Load<GameObject>(resPath);
|
|
|
var gameObj = GameObject.Instantiate(effPre);
|
|
|
AddAssetReleaser(gameObj, resPath);
|
|
@@ -427,7 +417,6 @@ namespace GFGGame
|
|
|
}
|
|
|
sortingGroup.sortingOrder = sortingOrder + 1;//特效层默认高一个层级
|
|
|
//SetParticleSortingOrder(gameObj, sortingOrder + 1);//特效层默认高一个层级
|
|
|
- return gameObj;
|
|
|
}
|
|
|
|
|
|
public static void LoadSpritePos(string res, out float tx, out float ty)
|