// 滑动 void EasyTouch_On_Swipe(Gesture gesture) { if (CameraStatusType_ < CameraStatusType.Normal) { return; } if (CameraStatusType_ == CameraStatusType.AutoMoveInDeploy) { return; } if (CameraStatusType_ == CameraStatusType.DeployMoveToBase) { return; } if (CameraStatusType_ == CameraStatusType.DeployMoveToDeploy) { return; } if (gesture.touchCount != 1) { return; } Transform camTrans = MainCamera_.GetComponent <Transform>(); CameraInfo cameraInfo = GetCameraInfo(CameraStatusType_); // 自由模式或布阵模式下,滑动是平移 if (CameraStatusType_ == CameraStatusType.Free || CameraStatusType_ == CameraStatusType.Deploy || CameraStatusType_ == CameraStatusType.SkillSelect) { float x = -gesture.swipeVector.x / 4f; float z = -gesture.swipeVector.y / 2f; Vector3 temp = (camTrans.rotation * new Vector3(x, 0, z)); temp.y = 0; cameraInfo.position += temp; proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID); float width = reference.battlefield_wid * 1.5f; cameraInfo.position.x = Mathf.Clamp(cameraInfo.position.x, 0, width); int lenth = 0;// reference.deployarea_len + reference.deptharea_len + reference.basearea_len; cameraInfo.position.z = cameraInfo.position.z > (lenth - CameraZdistance) ? (lenth - CameraZdistance) : cameraInfo.position.z; lenth = reference.deployarea_len + reference.deptharea_len + reference.basearea_len; cameraInfo.position.z = cameraInfo.position.z < (-lenth - CameraZdistance - 50) ? (-lenth - CameraZdistance - 50) : cameraInfo.position.z; } else if (CameraStatusType_ != CameraStatusType.SkillSelect) { SetCameraType(CameraStatusType.Free); EasyTouch_On_Swipe(gesture); } }
public static void AnalyzeBin(byte[] bytes) { var tempManager = new proto.ReferenceManager(); tempManager.Parse(bytes, 0, bytes.Length); for (int i = 0; i < tempManager.units_res_size(); i++) { proto.UnitReference unit = tempManager.units_res(i); UnitReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.defensive_units_res_size(); i++) { proto.DefensiveUnitsReference unit = tempManager.defensive_units_res(i); DefensiveUnitsReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.buff_res_size(); i++) { proto.BuffReference unit = tempManager.buff_res(i); BuffReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.parts_replace_team_res_size(); i++) { proto.PartsReplaceTeamReference unit = tempManager.parts_replace_team_res(i); PartsReplaceTeamReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.shuttle_res_size(); i++) { proto.ShuttleReference unit = tempManager.shuttle_res(i); ShuttleReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.shuttle_team_res_size(); i++) { proto.ShuttleTeamReference unit = tempManager.shuttle_team_res(i); ShuttleTeamReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.skill_res_size(); i++) { proto.SkillReference unit = tempManager.skill_res(i); SkillReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.parts_res_size(); i++) { proto.PartReference unit = tempManager.parts_res(i); PartReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.battlefield_res_size(); i++) { proto.BattlefieldReference battle = tempManager.battlefield_res(i); BattlefieldReferenceList.Add(battle.id, battle); } List <proto.LevelDeployUnitReference> levelDelpoyUnitList = null; for (int i = 0; i < tempManager.leveldeployunit_res_size(); i++) { proto.LevelDeployUnitReference levelDeployUnit = tempManager.leveldeployunit_res(i); if (LevelDeployReferenceDic.ContainsKey(levelDeployUnit.battlefield_id)) { levelDelpoyUnitList = LevelDeployReferenceDic[levelDeployUnit.battlefield_id]; } else { levelDelpoyUnitList = new List <proto.LevelDeployUnitReference>(); LevelDeployReferenceDic.Add(levelDeployUnit.battlefield_id, levelDelpoyUnitList); } levelDelpoyUnitList.Add(levelDeployUnit); } }
/// <summary> /// 相机循环 /// </summary> /// <param name="teamDisplayList"></param> /// <returns></returns> private IEnumerator CameraThread(Dictionary <int, TeamDisplay> teamDisplayList) { Transform camTrans = MainCamera_.GetComponent <Transform>(); CameraInfo cameraInfo = GetCameraInfo(CameraStatusType.Normal); cameraInfo.position = camTrans.position; // 得到场景总长度,以做区域判断 proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID); int lenth = 0;// reference.deployarea_len + reference.deptharea_len + reference.basearea_len; while (true) { cameraInfo = GetCameraInfo(CameraStatusType_); Quaternion rotation = Quaternion.Euler(cameraInfo.angles); if (CameraStatusType_ == CameraStatusType.NormalLerp) { SetCameraTarget(teamDisplayList); if (CameraTargetTrans_ != null) { bool b1 = false, b2 = false; Vector3 tempTarget = new Vector3(cameraInfo.position.x, cameraInfo.position.y, CameraTargetTrans_.position.z - NormalCameraZDistance); tempTarget = tempTarget.z > (lenth - CameraZdistance) ? new Vector3(tempTarget.x, tempTarget.y, lenth - CameraZdistance) : tempTarget; if (Vector3.Distance(camTrans.localEulerAngles, cameraInfo.angles) > 0.5f) { camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * NormalRotationDamping_); } else { b1 = true; } if (Vector3.Distance(camTrans.position, tempTarget) > 0.5f) { camTrans.position = Vector3.MoveTowards(camTrans.position, tempTarget, Time.deltaTime * NormalLerpPositionDamping_); } else { b2 = true; } if (b1 && b2) { SetCameraType(CameraStatusType.Normal, CameraTargetTrans_); } } else { SetCameraType(CameraStatusType.Free); } } // 普通 else if (CameraStatusType_ == CameraStatusType.Normal) { if (CameraTargetTrans_ == null) { SetCameraType(CameraStatusType.NormalLerp); } else { if (CameraTargetTrans_ != null) { Vector3 tempTarget = new Vector3(cameraInfo.position.x, cameraInfo.position.y, CameraTargetTrans_.position.z - NormalCameraZDistance); tempTarget = tempTarget.z > (lenth - CameraZdistance) ? new Vector3(tempTarget.x, tempTarget.y, lenth - CameraZdistance) : tempTarget; camTrans.rotation = Quaternion.Lerp(camTrans.rotation, rotation, Time.deltaTime * NormalRotationDamping_); camTrans.position = Vector3.Lerp(camTrans.position, tempTarget, Time.deltaTime * NormalPositionDamping_); } } } // 自由 else if (CameraStatusType_ == CameraStatusType.Free || CameraStatusType_ == CameraStatusType.Deploy || CameraStatusType_ == CameraStatusType.SkillSelect) { camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * OtherRotationDamping_); camTrans.position = Vector3.MoveTowards(camTrans.position, cameraInfo.position, Time.deltaTime * OtherPositionDamping_); } // 锁定舰船 else if (CameraStatusType_ == CameraStatusType.Lock) { if (CameraTargetTrans_ != null) { float distance = 0; GetDistance(CameraScaleType_, out distance); Vector3 disVector = new Vector3(0.0f, 0.0f, -distance); Vector3 position = rotation * disVector + CameraTargetTrans_.position + new Vector3(0, 0, 40); if (position.z > (lenth - CameraZdistance)) { SetCameraType(CameraStatusType.NormalLerp); } else { camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * LockRotationDamping_); camTrans.position = Vector3.MoveTowards(camTrans.position, position, Time.deltaTime * LockPositionDamping_); } } else { SetCameraType(CameraStatusType.NormalLerp); } } else if (CameraStatusType_ == CameraStatusType.DeployMoveToBase || CameraStatusType_ == CameraStatusType.DeployMoveToDeploy) { bool b1 = false, b2 = false; if (Vector3.Distance(camTrans.localEulerAngles, cameraInfo.angles) > 0.5f) { camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * OtherRotationDamping_); } else { b1 = true; } if (Vector3.Distance(camTrans.position, cameraInfo.position) > 0.5f) { camTrans.position = Vector3.MoveTowards(camTrans.position, cameraInfo.position, Time.deltaTime * OtherPositionDamping_); } else { b2 = true; } if (b1 && b2) { camTrans.localEulerAngles = cameraInfo.angles; camTrans.position = cameraInfo.position; SetCameraType(CameraStatusType.Deploy); } } yield return(null); } }
/// <summary> /// 布阵相机协程 /// </summary> /// <returns></returns> private IEnumerator DeployCameraThread() { // 相机开始移动 //yield return new WaitForSeconds( 2f ); MainCamera_.transform.position = Vector3.zero; MainCamera_.transform.localEulerAngles = Vector3.zero; // 相机要指向的位置缓存 int firstID = 30000; int secondID = 40000; int thirdID = 60000; Dictionary <int, Vector3> posList = new Dictionary <int, Vector3>(); int shipCount = BattleSys.GetShipCount(false); for (int i = 0; i < shipCount; i++) { ClientShip cs = BattleSys.GetShipByIndex(false, i); if (cs.Reference.id == firstID || cs.Reference.id == secondID || cs.Reference.id == thirdID) { if (!posList.ContainsKey(cs.Reference.id)) { posList.Add(cs.Reference.id, cs.Position); } } } Animator animator = MainCamera.AddComponent <Animator>(); animator.runtimeAnimatorController = Resources.Load("Camera/camera_control") as RuntimeAnimatorController; Vector3 pos; posList.TryGetValue(firstID, out pos); MainCamera_.transform.position = pos; MainCamera.transform.position = new Vector3(29.3f, 19.9f, -40.8f); MainCamera.transform.localEulerAngles = new Vector3(15, 315, 0); animator.SetTrigger("DeployCameraStep01"); yield return(new WaitForSeconds(2.3f)); posList.TryGetValue(secondID, out pos); MainCamera_.transform.position = pos; MainCamera.transform.position = new Vector3(38.3f, 4.3f, 49.7f); MainCamera.transform.localEulerAngles = new Vector3(-2.3f, 238.54f, 0); animator.SetTrigger("DeployCameraStep02"); yield return(new WaitForSeconds(3.51f)); posList.TryGetValue(thirdID, out pos); MainCamera_.transform.position = pos; MainCamera.transform.position = new Vector3(46.8f, 8.1f, -9.7f); MainCamera.transform.localEulerAngles = new Vector3(0, 258, 0); animator.SetTrigger("DeployCameraStep03"); yield return(new WaitForSeconds(3.2f)); // 显示敌人指挥中心信息 StartCoroutine(PlayEffectOfMainEnemy(pos)); yield return(new WaitForSeconds(2.1f)); posList.Clear(); // 得到相机和边线的z值差 proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID); if (reference == null) { yield break; } // 战场长度 float length = reference.basearea_len + reference.deptharea_len + reference.deployarea_len; Vector3 position = new Vector3(DeployOriginPositionX, DeployOriginPositionY, -length - 23.8f); Vector3 angle = new Vector3(DeployOriginRotationX, DeployOriginRotationY, DeployOriginRotationZ); // 初始化基地区域相机属性 CameraInfo info = GetCameraInfo(CameraStatusType.DeployMoveToBase); info.position = position + new Vector3(0, 0, length - reference.basearea_len / 2); info.angles = angle; // 初始化布阵区域相机属性 info = GetCameraInfo(CameraStatusType.DeployMoveToDeploy); info.position = position; info.angles = angle; // 设置相机位置和旋转 MainCamera.transform.position = Vector3.zero; MainCamera.transform.localEulerAngles = Vector3.zero; MainCamera_.transform.position = position; MainCamera_.transform.localEulerAngles = angle; animator.SetTrigger("DeployCameraStep04"); yield return(new WaitForSeconds(2)); Destroy(animator); // 移动完毕,修改模式为可操作模式 SetCameraType(CameraStatusType.Deploy); // 显示布阵界面 UIManager.ShowPanel <DeployPanel>(); UIManager.ShowPanel <DeployCameraControl>(); // 开启相机线程 StartCoroutine(CameraThread(null)); }