/// <summary> /// 可以优化代码结构。 /// </summary> /// <param name="battlePropDic"></param> public void Init(Dictionary <int, BattleProp> battlePropDic) { resSvc = ResSvc.Instance; timerSvc = TimerSvc.Instance; //初始化各管理器 stateMgr = gameObject.AddComponent <StateMgr>(); stateMgr.Init(); bulletParent = GameObject.Find("Temp/Bullets").transform; effectParent = GameObject.Find("Temp/Effects").transform; bulletPool = gameObject.AddComponent <ObjectPool>(); laserBulletPool = gameObject.AddComponent <ObjectPool>(); hitEffectPool = gameObject.AddComponent <ObjectPool>(); fireEffectPool = gameObject.AddComponent <ObjectPool>(); shellEffectPool = gameObject.AddComponent <ObjectPool>(); //找到自己的战场参数 foreach (var item in battlePropDic) { RoleType roleType = (RoleType)item.Key; ControllerBase controllerBase = null; GameObject playerGO = null; if (roleType == BattleSys.Instance.GetCurrentRoleType()) { playerGO = resSvc.LoadPrefab(PathDefine.PlayerPath); #region 设置摄像机以及添加玩家控制器 switch (roleType) { case RoleType.Red: Camera.main.transform.position = new Vector3(0, 1f, -30f); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); break; case RoleType.Blue: Camera.main.transform.position = new Vector3(0, 1f, 30f); Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0); break; case RoleType.Yellow: Camera.main.transform.position = new Vector3(-30, 1, 30f); Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0); break; case RoleType.Green: Camera.main.transform.position = new Vector3(30, 1, 30f); Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0); break; case RoleType.Purple: Camera.main.transform.position = new Vector3(-30, 1, -30f); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); break; case RoleType.Black: Camera.main.transform.position = new Vector3(30, 1, -30f); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); break; case RoleType.Orange: Camera.main.transform.position = new Vector3(22, 1, -5f); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); break; case RoleType.White: Camera.main.transform.position = new Vector3(-25, 1, -5f); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); break; } playerController = playerGO.AddComponent <PlayerController>(); #endregion playerController.SetRoleType(roleType); controllerDic.Add(roleType, playerController); #region 设置实体数据 playerEntity = new PlayerEntity(this, stateMgr); playerEntity.SetCtrl(playerController); playerEntity.SetBattleProps(battlePropDic.TryGet(item.Key)); //考虑了扩展游戏到AI playerEntity.SetRoleType(roleType); playerEntity.Born(); #endregion controllerBase = playerController; } else { //设置远程角色 playerGO = resSvc.LoadPrefab(PathDefine.PlayerPath); if (playerGO.GetComponent <CharacterController>() != null) { Destroy(playerGO.GetComponent <CharacterController>()); } RemoteController remoteController = playerGO.AddComponent <RemoteController>(); remoteController.SetRoleType(roleType); controllerDic.Add(roleType, remoteController); #region 设置实体数据 RemoteEntity remoteEntity = new RemoteEntity(this, stateMgr); remoteEntity.SetCtrl(remoteController); remoteEntity.SetBattleProps(battlePropDic.TryGet(item.Key)); //考虑了扩展游戏到AI //remoteEntity.SetRoleType(roleType); remoteEntity.Born(); #endregion controllerBase = remoteController; } switch (roleType) { case RoleType.Red: playerGO.transform.position = new Vector3(0, 0f, -30f);; playerGO.transform.localEulerAngles = new Vector3(0, 0, 0); playerGO.name = "Red"; break; case RoleType.Blue: playerGO.transform.position = new Vector3(0, 0, 30f); playerGO.transform.localEulerAngles = new Vector3(0, 180, 0); playerGO.name = "Blue"; break; case RoleType.Yellow: playerGO.transform.position = new Vector3(-30, 0, 30f); playerGO.transform.localEulerAngles = new Vector3(0, 180, 0); playerGO.name = "Yellow"; break; case RoleType.Green: playerGO.transform.position = new Vector3(30, 0, 30f); playerGO.transform.localEulerAngles = new Vector3(0, 180, 0); playerGO.name = "Green"; break; case RoleType.Purple: playerGO.transform.position = new Vector3(-30, 0, -30f); playerGO.transform.localEulerAngles = new Vector3(0, 0, 0); playerGO.name = "Purple"; break; case RoleType.Black: playerGO.transform.position = new Vector3(30, 0, -30f); playerGO.transform.localEulerAngles = new Vector3(0, 0, 0); playerGO.name = "Black"; break; case RoleType.Orange: playerGO.transform.position = new Vector3(22, 0, -5f); playerGO.transform.localEulerAngles = new Vector3(0, 0, 0); playerGO.name = "Orange"; break; case RoleType.White: playerGO.transform.position = new Vector3(-25, 0, -5f); playerGO.transform.localEulerAngles = new Vector3(0, 0, 0); playerGO.name = "White"; break; } #region 添加枪支 Transform gunTrans = controllerBase.transform.Find(PathDefine.gunTransName).GetComponent <Transform>(); GameObject go = null; switch (battlePropDic.TryGet(item.Key).weapenType) { case WeapenType.Rifle: go = resSvc.LoadPrefab(PathDefine.RiflePrefab); go.name = "Rifle"; go.transform.SetParent(gunTrans); go.transform.localPosition = new Vector3(0, 0, -0.1f); go.transform.localEulerAngles = Vector3.zero; go.transform.localScale = Vector3.one; break; case WeapenType.Sniper: go = resSvc.LoadPrefab(PathDefine.SniperPrefab); go.name = "Sniper"; LineRenderer line = go.AddComponent <LineRenderer>(); line.material = Resources.Load <Material>("ResMaterials/Gun/Lin"); line.startWidth = 0.3f; line.endWidth = 0.3f; line.enabled = false; lineRendererDic.Add(roleType, line); go.transform.SetParent(gunTrans); go.transform.localPosition = new Vector3(0, 0, -0.1f); go.transform.localRotation = Quaternion.Euler(Vector3.zero); go.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); break; } #endregion } //设置我的武器 playerEntity.SetPlayerWeapen(); PECommon.Log("Init BattleMgr Done."); }