public void CreateDrops(List <PkgDropGive> drops, DropComponent.EDropType dropType, uint emId) { for (int i = 0; i < drops.Count; ++i) { var dropInfo = drops[i]; // 经验直接拾取 if (dropInfo.type == GameConst.GIVE_TYPE_EXP) { C2SNwarPick msg = new C2SNwarPick(); msg.oid = dropInfo.oid; msg.drop_type = (uint)dropType; NetClient.GetBaseClient().SendData <C2SNwarPick>(NetMsg.MSG_NWAR_PICK, msg); continue; } if (dropType == DropComponent.EDropType.Noncompetitive && dropInfo.pos != null) { Vector3 pos = new Vector3((float)dropInfo.pos.px * GlobalConst.UnitScale, 0, (float)dropInfo.pos.py * GlobalConst.UnitScale); pos.y = PhysicsHelp.GetHeight(pos.x, pos.z); pos = InstanceHelper.ClampInWalkableRange(pos); mDropPosition = pos; } // 是否超过最大掉落数 if (InstanceDropManager.Instance.DropNum < InstanceDropManager.Instance.MaxDropNum) { //mLoadDropPrefabCoroutine.Add(SGameEngine.ResourceLoader.Instance.StartCoroutine(LoadDropObject(dropInfo, dropType))); GameObject dropGameObject = (GameObject)xc.ObjCachePoolMgr.Instance.LoadFromCache(DropBehaviour.DropPrefabPoolType, DropBehaviour.DropObjectPrefabPoolKey); if (dropGameObject == null) { dropGameObject = (GameObject)GameObject.Instantiate(InstanceDropManager.Instance.DropObjectTemplate); if (dropGameObject != null) { PoolGameObject pg = dropGameObject.AddComponent <PoolGameObject>(); pg.poolType = DropBehaviour.DropPrefabPoolType; pg.key = DropBehaviour.DropObjectPrefabPoolKey; } } if (dropGameObject != null) { dropGameObject.SetActive(true); OnLoadDropObjectFinished(dropGameObject, dropInfo, dropType); } else { GameDebug.LogError("Create drop object error, is null!!!"); } } else { GameDebug.LogError("Can not create drop" + dropInfo.oid + ", reach max num, current num is " + InstanceDropManager.Instance.DropNum + ", max num is " + InstanceDropManager.Instance.MaxDropNum); } } }
void PickDropImpl(uint uuid, uint id, DropComponent.EDropType dropType) { var dropComponent = InstanceDropManager.Instance.GetDrop(id); if (dropComponent == null) { return; } var dropGameObject = dropComponent.transform.parent.gameObject; if (dropGameObject == null) { return; } // 是否是本地玩家拾取 var isLocalPlayerPick = false; if (uuid == Game.GetInstance().LocalPlayerID.obj_idx) { isLocalPlayerPick = true; } // 拾取特效 if (isLocalPlayerPick == true) { var path = "Assets/" + ResPath.path19; if (dropComponent.DropInfo.type == GameConst.GIVE_TYPE_EXP) { path = "Assets/" + ResPath.EF_ui_jingyansaluo_fly; } Vector3 dropPosition = dropGameObject.transform.localPosition; mLoadDropPrefabCoroutine.Add(SGameEngine.ResourceLoader.Instance.StartCoroutine(LoadDropEffect(path, dropPosition))); } DestroyDrop(id); }
void OnLoadDropObjectFinished(GameObject dropGameObject, PkgDropGive dropInfo, DropComponent.EDropType dropType) { #if UNITY_EDITOR dropGameObject.name = string.Format("Drop_{0}_{1}", dropInfo.oid, dropInfo.gid); #endif if (dropType == DropComponent.EDropType.Noncompetitive || dropInfo.pos == null) { dropGameObject.transform.position = InstanceDropManager.GetInstance().GenerateDropPosition(mDropPosition, 0); } else { //GameDebug.LogError("Create drop1 " + dropInfo.oid + ", pos " + dropInfo.pos.px * GlobalConst.UnitScale + " " + dropInfo.pos.py * GlobalConst.UnitScale); Vector3 pos = new Vector3((float)dropInfo.pos.px * GlobalConst.UnitScale, 0, (float)dropInfo.pos.py * GlobalConst.UnitScale); //pos.y = PhysicsHelp.GetHeight(pos.x, pos.z); //pos = InstanceHelper.ClampInWalkableRange(pos); pos.y = PhysicsHelp.GetHeight(pos.x, pos.z); dropGameObject.transform.position = pos; //GameDebug.LogError("Create drop2 " + dropInfo.oid + ", pos " + pos.ToString()); } var dropComponent = dropGameObject.transform.Find("Mesh").GetComponent <DropComponent>(); dropComponent.DropType = dropType; dropComponent.DropInfo = dropInfo; dropComponent.Init(); }