public IEnumerator LoadDropItem(DropItemPerformanceType item) { yield return(new WaitForSeconds(0.2f)); GameResPackage.AsyncLoadPackageData loadData = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = null; EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam); DropItemPerformanceType.Type type = item.m_type; if (eventInfo != null) { type = (DropItemPerformanceType.Type)eventInfo.dropType; } switch (type) { // 卡牌 case DropItemPerformanceType.Type.enCard: { DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item; foreach (int cardId in cardItem.m_cardList) { e = NewDropItem(loadData, item, cardId); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } Debug.Log("....cardId:" + cardId); yield return(new WaitForSeconds(0.1f)); } // 卡牌的增长数目 Reward.Singleton.m_cardDesNum = Reward.Singleton.m_cardNum + cardItem.m_cardList.Count; break; } // 金钱 case DropItemPerformanceType.Type.enGold: { // 如果有钱则掉落金币 效果 if (item.m_intParam > 0) { int min = 15; int max = 30; WorldParamInfo worldInfo = GameTable.WorldParamTableAsset.Lookup((int)ENWorldParamIndex.enDropGoldMinMax); if (null != worldInfo) { List <int> cardList = ConvertorTool.StringToList_Int(worldInfo.StringTypeValue); if (null != cardList && cardList.Count >= 2) { min = cardList[0]; max = cardList[1]; } } // 金币增长的数目 int randomGold = UnityEngine.Random.Range(100, 1000); Reward.Singleton.m_goldDesNum = Reward.Singleton.m_goldNum + randomGold; int dropNum = UnityEngine.Random.Range(min, max); for (int i = 0; i < dropNum; i++) { e = NewDropItem(loadData, item); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } yield return(new WaitForSeconds(0.01f)); } } break; } // 钥匙 case DropItemPerformanceType.Type.enKey: { e = NewDropItem(loadData, item, item.m_intParam); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } break; } } }
// IEnumerator NewDropItem(GameResPackage.AsyncLoadPackageData loadData, DropItemPerformanceType item, int intParam = 0) { EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam); DropItemPerformanceType.Type type = item.m_type; if (eventInfo != null) { type = (DropItemPerformanceType.Type)eventInfo.dropType; } // string objName = ""; switch (type) { case DropItemPerformanceType.Type.enGold: { objName = "Balk/p-b-gold"; break; } case DropItemPerformanceType.Type.enCard: { objName = "Balk/p-b-contract"; //DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item; // 根据不同星级掉落不同 模型 HeroInfo heroInfo = GameTable.HeroInfoTableAsset.Lookup(intParam); if (null != heroInfo) { RarityRelativeInfo rarityInfo = GameTable.RarityRelativeAsset.LookUp(heroInfo.Rarity); if (null != rarityInfo) { ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(rarityInfo.m_dropItemModelID); if (null != modelInfo) { objName = modelInfo.ModelFile; } } } break; } case DropItemPerformanceType.Type.enKey: { // 钥匙模型 objName = "Balk/p-b-gold"; EventItemInfo eventItemInfo = GameTable.eventItemAsset.LookUp(intParam); if (null != eventItemInfo) { ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(eventItemInfo.modelId); if (null != modelInfo) { objName = modelInfo.ModelFile; } } break; } } float rotation = 30f; rotation = UnityEngine.Random.Range(0f, 360f); GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(objName), data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } GameObject goldObj = data.m_obj as GameObject; goldObj.transform.parent = MainGame.Singleton.MainObject.transform; goldObj.transform.position = item.m_deadPos; goldObj.SetActive(true); goldObj.transform.localEulerAngles = new Vector3(item.m_eulerAngles.x, item.m_eulerAngles.y + rotation, item.m_eulerAngles.z); int dropIndex = AddDropItem(goldObj); Animation anim = goldObj.transform.Find("gold_body").GetComponent <Animation>(); PickUpCallback pickUpCallback = goldObj.transform.Find("gold_body").GetComponent <PickUpCallback>(); if (null != pickUpCallback) { pickUpCallback.Clear(); pickUpCallback.m_index = dropIndex; } // 随机动画 int animationCount = anim.GetComponent <Animation>().GetClipCount(); int animationIndex = UnityEngine.Random.Range(1, animationCount); int index = 1; foreach (AnimationState state in anim.GetComponent <Animation>()) { if (index == animationIndex) { anim.CrossFade(state.name); break; } index++; } loadData.m_isFinish = true; }