/// <summary> /// 无法建造警告 /// </summary> /// <param name="_buildPosition"></param> /// <returns></returns> void CannotBuildWarning(int _builderIndex, Vector3 _buildPosition) { if (!builders[_builderIndex].hintModel) { return; } Transform warningHintModel = Instantiate(builders[_builderIndex].hintModel, _buildPosition, Quaternion.Euler(35f, 0f, 0f)); Destroy(warningHintModel.gameObject, 1f); //使警告模型可见 Funcs.SetObjectVisuality(builders[_builderIndex].hintModel, true); //使模型半透明 Funcs.ChangeObjectAlphaValue(warningHintModel, 0.3f); /* * Vector3 hintModelPosition = teamObj.hintModel.position; * teamObj.hintModel.position = _buildPosition; * //使模型半透明 * Funcs.ChangeObjectAlphaValue(teamObj.hintModel, 0.3f); * yield return new WaitForSeconds(Time.deltaTime * 150f); * //恢复模型透明度 * Funcs.ChangeObjectAlphaValue(teamObj.hintModel, 1f); * teamObj.hintModel.position = hintModelPosition; */ }
void PartOKRPC(string _item, int _newTeamIndex, int _thisModelIndex) { bool findPart = false; Transform finalModel = models[_thisModelIndex]; if (finalModel) { Transform part = finalModel.Find(_item); if (part) { findPart = true; } else { for (int i = 0; i < finalModel.childCount; i++) { if (finalModel.GetChild(i).childCount > 0) { part = finalModel.GetChild(i).Find(_item); if (part) { findPart = true; break; } } } } if (findPart) { part.gameObject.SetActive(true); if (newTeams[_newTeamIndex].GetComponent <TeamObj>().visible) { StartCoroutine(Funcs.SlowDisappearIE(part, 2f, 80f, true)); } else { Funcs.ChangeObjectAlphaValue(part, 0f); } } } }
void SpawnMonsterObjectsRPC(WorldObj.Nationality _nationality, int _soldiernumber, WorldObj.SoldierType _soldiertype, int _teamMorola, int _viewId, int _viewIdModel) { //计算出野怪位置 Vector3 GriffinPosition = Vector3.zero; switch (_soldiertype) { case SoldierType.Griffin: bool rightposition = false; while (!rightposition) { GriffinPosition = RandomPosition(); rightposition = true; for (int j = 0; j < citiespositions.Count; j++) { if (Vector3.Distance(citiespositions[j], GriffinPosition) < 2f) { rightposition = false; break; } } } break; default: break; } GameObject newMonster = Instantiate(team, GriffinPosition, Quaternion.identity); newMonster.GetComponent <PhotonView>().viewID = _viewId; //给新派生的队伍对象赋值 TeamObj teamObj = newMonster.GetComponent <TeamObj>(); teamObj.nationality = _nationality; teamObj.soldiernumber = _soldiernumber; teamObj.soldiertype = _soldiertype; teamObj.hero = ""; teamObj.teamspeed = WorldObj.BeginTeamSpeed; teamObj.teammorale = WorldObj.BeginTeamMorale; //根据士兵类型激活队伍模型 Transform teamModel = null; switch (teamObj.soldiertype) { case WorldObj.SoldierType.Griffin: teamModel = teamObj.transform.Find("Griffin_Yellow"); break; } if (teamModel) { //激活队伍模型 teamModel.gameObject.SetActive(true); //手动分配队伍模型的PhotonViewID teamModel.GetComponent <PhotonView>().viewID = _viewIdModel; } //使其不可见 Funcs.ChangeObjectAlphaValue(teamObj.teamHealthCanvas, 0f); Funcs.ChangeObjectAlphaValue(teamObj.transform, 0f); }
IEnumerator GoAndBuildIE(int _builderIndex, Vector3 _buildPosition) { UIController uiController = countryObj.GetComponent <UIController>(); //测试是否能建造 if (!CanBuild(_builderIndex, _buildPosition)) { uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.CannotBuild, builders[_builderIndex].gameObject); //无法建造警告 CannotBuildWarning(_builderIndex, _buildPosition); //则设置该标志为真,使得再次点击可以直接重选建造位置 countryObj.reGoBuild = true; yield break; } //开始行走向建造目标位置,移动提示模型到该位置并使其半透明 if (builders[_builderIndex].hintModel) { builders[_builderIndex].hintModel.position = _buildPosition; StopCoroutine(builders[_builderIndex].coroutineHintModelFlash); builders[_builderIndex].coroutineHintModelFlash = null; //使模型可见 Funcs.SetObjectVisuality(builders[_builderIndex].hintModel, true); //使模型半透明 Funcs.ChangeObjectAlphaValue(builders[_builderIndex].hintModel, 0.4f); } //队伍开始行走直到接近目标位置 builders[_builderIndex].GetComponent <NavMeshAgent>().SetDestination(_buildPosition); uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.GoBuild, builders[_builderIndex].gameObject); while (Vector3.Distance(builders[_builderIndex].transform.position, _buildPosition) > 1.2f) { yield return(new WaitForSeconds(Time.deltaTime * 75)); } //测试是否能建造 //开始建造 if (!CanBuild(_builderIndex, _buildPosition)) { uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.CannotBuild, builders[_builderIndex].gameObject); yield break; } cityController.BuildNewTeam(builders[_builderIndex].nationality, 1000, "", WorldObj.SoldierType.Tank, builders[_builderIndex].partsnames, _buildPosition); //保存并得到保存的已建造的队伍序号 photonView.RPC("SaveNewTeamRPC", PhotonTargets.All, null); //马上取出该序号防止其他进程改变其值 int thisNewTeamIndex = newTeamIndex; //将Work带的配件表赋值给新建造的队伍,以便在新建队伍的初始化中调用 photonView.RPC("GivePartsNamesRPC", PhotonTargets.All, builders[_builderIndex].partsnames); //开始建造后,使得工程队转向建造位置,静止不动并不可选取 builders[_builderIndex].transform.LookAt(new Vector3(_buildPosition.x, builders[_builderIndex].transform.position.y, _buildPosition.z)); //锁住队伍 LockUnLockTeam(builders[_builderIndex], true); //准备建造模型逐步建造 photonView.RPC("PrepareStepBuildRPC", PhotonTargets.All, WorldObj.SoldierType.Tank, builders[_builderIndex].nationality); //逐步建造队伍模型 StepBuild(thisNewTeamIndex, _builderIndex, builders[_builderIndex].partsnames, 10f); //删除提示模型 if (builders[_builderIndex].hintModel) { Destroy(builders[_builderIndex].hintModel.gameObject); } //协程结束则清空协程变量 builders[_builderIndex].coroutineGoAndBuild = null; }