public override void DestroySenceObject(SenceGameObject obj_data) { SenceObjects.Remove(obj_data.SenceObject.ID); if (obj_data != null) { Destroy(obj_data.gameObject); } }
// 刷新场景内所有物体 public void Refresh(List <RootObject> temp_dic) { //服务器里没有本地有 foreach (RootObject value in temp_dic) { if (SenceObjects.ContainsKey(value.ID) && value.state == ObjectState.Destroy) { //Debug.Log(SenceObjects.ContainsKey(temptest) + ":::value.contains过滤后"+value.Name + ":::value.name"); //Ai销毁时,销毁对应的导弹 if (value.type == ObjectType.AI && guideddestroy.ContainsKey(value.ID)) { Destroy(guideddestroy[value.ID], 1f); } //不销毁Boss,只隐藏 if (value.type == ObjectType.AI) { AI ai = value as AI; if (ai.ai_type == AIType.LifeAndAttack && SenceObjects.ContainsKey(value.ID) && SenceObjects[value.ID] != null) { SenceObjects[value.ID].gameObject.SetActive(false); Destroy(SenceObjects[value.ID].GetComponent <SenceGameObject>()); } else { DestroySenceObject(SenceObjects[value.ID]); } } else { DestroySenceObject(SenceObjects[value.ID]); } } else if (value.type == ObjectType.AI && SenceObjects.ContainsKey(value.ID) && value.state != ObjectState.Destroy) { } } foreach (RootObject value in temp_dic) { //本地包含服务器物体 if (Recever.rInstance.SenceObjects.ContainsKey(value.ID) && value != null) { RefreshObject(value); } //本地不包含服务器物体 else if (!roleViews.ContainsKey(value.ID) && value.state != ObjectState.Destroy) { GameObject obj; Role player; AI ai; Bullet bullet; SenceGameObject obj_data; HP_View hpview; switch (value.type) { case ObjectType.Player: player = value as Role; //Debug.Log("<color.red>"+player.Index+"</color>"); obj = Instantiate(RolePrefabs[player.Index]) as GameObject; obj_data = obj.AddComponent <SenceGameObject>(); playerData = obj.AddComponent <PlayerController>(); playerData.prefabs = this.BulletPrefabs; obj_data.Player = obj.transform.FindChild("_player").gameObject; GradeTx = obj_data.Player.transform.FindChild("Grade").GetComponent <TextMesh>(); PlayerHPText = obj_data.Player.transform.FindChild("PlayerHPText").GetComponent <TextMesh>(); topworming = obj_data.Player.transform.FindChild("Canvas").FindChild("Image_info").GetComponentInChildren <TextMesh>(); rightrange = obj_data.Player.transform.FindChild("RightRange").GetComponent <TextMesh>(); leftrange = obj_data.Player.transform.FindChild("LeftRange").GetComponent <TextMesh>(); RefreshPlayerGrad(player.HP, player.Grade); obj_data.RightBattery = obj_data.Player.transform.FindChild("FireRR").gameObject.AddComponent <LookAt>(); obj_data.LeftBattery = obj_data.Player.transform.FindChild("FireLL").gameObject.AddComponent <LookAt>(); //obj_data.RightBattery.transform.FindChild("PaoL").gameObject.AddComponent<Gunrotate>(); //obj_data.LeftBattery.transform.FindChild("PaoR").gameObject.AddComponent<Gunrotate>(); obj_data.LeftFirePoint = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject; obj_data.RightFirePoint = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject; FirePointcontroller temp1 = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>(); FirePointcontroller temp2 = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>(); temp1.Init(false, true); temp2.Init(false, true); obj_data.RightRein = obj.transform.FindChild("Controller (right)").gameObject; obj_data.LeftRein = obj.transform.FindChild("Controller (left)").gameObject; //obj_data.Camera = obj.transform.FindChild("Camera (head)").gameObject; hpview = obj.AddComponent <HP_View>(); roleViews.Add(value.ID, hpview); hpview.role = value as Role; // Debug.Log("<color.red>obj_data._weapon " + obj_data._weapon+"******************</color>"); hpview.Init(); obj_data.SenceObject = value; DefaultWeapon = obj_data._player.useWeapon.Name; PlayerData = obj_data; SenceObjects.Add(value.ID, obj_data); send_player.Add(value.ID, obj_data); obj.transform.parent = this.transform; obj.name = "id_" + value.ID.ToString() + "_" + value.Name; //network_server.isScreening = false; break; case ObjectType.AI: ai = value as AI; //Debug.Log("<color=yellow>"+ai.Position+"</color>"); obj = null; switch (ai.ai_type) { case AIType.Lithe: obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject; break; case AIType.Attack: obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject; Aiattack_more = ai.Index; break; case AIType.LifeAndAttack: if (Boss == null) { obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject; } else { obj = Boss; } Aiattack_max = ai.Index; // 初始化 AI只为大怪添加血条 hpview = obj.AddComponent <HP_View>(); roleViews.Add(value.ID, hpview); hpview.role = value as AI; hpview.Init(); break; case AIType.SmartAI: obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject; Aiattack_min = ai.Index; break; case AIType.Stone: obj = Instantiate(StonePrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject; break; default: Debug.LogError("没有对应的aitype"); break; } obj.SetActive(true); obj_data = obj.AddComponent <SenceGameObject>(); obj_data.EnemyEffect = obj.transform.FindChild("Enemy Explode").gameObject; obj_data.gameObject.tag = SenceGameObject.AI_TAG; if (ai.ai_type != AIType.Stone) { obj.AddComponent <Follo>(); obj.GetComponent <BoxCollider>().size = new Vector3(5f, 2.5f, 5f); } obj_data.SenceObject = value; SenceObjects.Add(value.ID, obj_data); obj.transform.parent = this.transform; obj.name = "id_" + value.ID.ToString() + "_" + value.Name; break; case ObjectType.Bullet: bullet = value as Bullet; strs = bullet.Name.Split('_'); id = int.Parse(strs[0]); bullet.Name = strs[1]; obj_data = CreateBullet(bullet, false); //Debug.Log(SenceObjects[id]._pc_man.Index+">>>>>"+Aiattack_min+">>>>>"+Aiattack_more+">>>>>>"+Aiattack_max); /*生成敌机子弹时播放音效*/ if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_more) { // Audiocontroller.instans.PlayGameAudio("Ss01"); } if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_max) { // Audiocontroller.instans.PlayGameAudio("kehuan"); } if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_min) { // Audiocontroller.instans.PlayGameAudio("Ss02"); } if (SenceObjects.ContainsKey(id)) { //SenceObjects[id].transform.FindChild("Enemy").FindChild("FireFlower").gameObject.SetActive(true); if (SenceObjects[id]._pc_man.ai_type != AIType.LifeAndAttack) { if (SenceObjects[id].GetComponentInChildren <LookAtPlayer>()) { obj_data.gameObject.transform.position = SenceObjects[id].GetComponentInChildren <LookAtPlayer>().gameObject.transform.position; } else { Debug.LogError("没有找到lookatplayer"); obj_data.gameObject.transform.position = SenceObjects[id].transform.position; } } else { Debug.LogError("生成子弹时找不到对应的发射点"); obj_data.gameObject.transform.position = value.Position; } //控制开火特效 if (SenceObjects[id] != null && SenceObjects[id].GetComponentInChildren <LookAtPlayer>() && SenceObjects[id]._pc_man.ai_type != AIType.Stone) { //Debug.Log("<color=yellow>"+SenceObjects[id].name+"</color>"); SenceObjects[id].GetComponentInChildren <LookAtPlayer>().isFire = true; } else { Debug.LogError("没有找到;LookAtPlayer;"); } } else { Debug.LogError("生成子弹时找不到对应的发射点"); obj_data.gameObject.transform.position = value.Position; } obj_data.gameObject.transform.rotation = value.Rotation; ray = new Ray(obj_data.transform.position, obj_data.transform.forward); if (Physics.Raycast(ray, out hit) && hit.transform.gameObject.CompareTag(SenceGameObject.PLAYER_TAG) && !HurtPoints.ContainsKey(obj_data.SenceObject.ID)) { HurtPoints.Add(obj_data.SenceObject.ID, hit.point); } obj_data.gameObject.GetComponent <Rigidbody>().AddForce(obj_data.transform.forward * MsgCenter.LUACH_FORCE * 2); obj_data.gameObject.tag = SenceGameObject.AI_BULLET_TAG; Destroy(obj_data.gameObject, 10f); //SenceObjects.Add(value.ID, obj_data); break; case ObjectType.PlayerBullet: //bullet = value as Bullet; //obj_data = CreateBullet(bullet,false); //obj_data.gameObject.transform.position = value.Position; //obj_data.gameObject.transform.rotation = value.Rotation; //SenceObjects.Add(value.ID, obj_data); break; case ObjectType.Weapon: // if (value.state != ObjectState.Destroy) { string temppath = dropOut.ReadXML(value.Name); GameObject tempobj = Resources.Load(temppath) as GameObject; // Debug.Log("<color=yellow>生成掉;落物" + value.Name +value.Position+ "</color>"); GameObject OBJ = Instantiate(tempobj, value.Position, value.Rotation) as GameObject; OBJ.AddComponent <BOX_co>(); BoxCollider box = OBJ.GetComponent <BoxCollider>(); box.center = Vector3.zero; box.size = Vector3.one; SenceGameObject objdate = OBJ.AddComponent <SenceGameObject>(); objdate.SenceObject = value; SenceObjects.Add(value.ID, objdate); //OBJ.transform.position = value.Position; //OBJ.transform.rotation = value.Rotation; OBJ.SetActive(true); } break; case ObjectType.UI: UIMenu ui = value as UIMenu; SenceGameObject mune_data = Recever.rInstance.DisplayMenu(ui.IsStart); if (ui.IsStart) { GameState = Datas.GameState.Start; } else { GameState = Datas.GameState.End; } mune_data.SenceObject = ui; SenceObjects.Add(mune_data.SenceObject.ID, mune_data); if (ui.PageTab != null && sort.Count <= 10) { sort.Add(ui.PageTab); } else { Debug.Log("<color=red>分数数组长度" + sort.Count + "</color>"); } if (ui.Name != null && rankingname.Count <= 10) { rankingname.Add(ui.Name); } else { Debug.Log("<color=red>名字数组长度" + rankingname.Count + "</color>"); } break; case ObjectType.Ranking: ranking = value as Ranking; obj = new GameObject(); obj_data = obj.AddComponent <SenceGameObject>(); obj_data.SenceObject = ranking; SenceObjects.Add(ranking.ID, obj_data); break; case ObjectType.GuidedMissile: GuidedMissile gu = value as GuidedMissile; Debug.Log(gu.type); GameObject guided = Instantiate(Bullets["weapon3"]); // guided.AddComponent<Collider_items>(); obj_data = guided.AddComponent <SenceGameObject>(); obj_data.SenceObject = value; guided.tag = SenceGameObject.PLAYER_BULLET_TAG; //if(gu.Name == "right") //{ // guided.GetComponent<Rigidbody>().velocity = PlayerData.RightRein.transform.forward; //}else{ // guided.GetComponent<Rigidbody>().velocity = PlayerData.LeftRein.transform.forward; //} guided.transform.position = gu.Position; Guided guid = guided.AddComponent <Guided>(); if (gu.target_id == null || !SenceObjects.ContainsKey(gu.target_id)) { guid.Target = null; } else { //导弹目标为掉落物时没有爆炸效果 if (SenceObjects[gu.target_id].type != ObjectType.Weapon) { obj_data.EnemyEffect = guided.transform.FindChild("Enemy Explode").gameObject; } //设置导弹的目标,及与目标对应,一起消失 guid.Target = SenceObjects[gu.target_id].transform; if (!guideddestroy.ContainsKey(gu.target_id)) { guideddestroy.Add(gu.target_id, guided); } } SenceObjects.Add(gu.ID, obj_data); break; } } } }