private static void OnControllerCreate(CameraForge.CameraController c) { if (c.camera == Camera.main) { camc = c; Start(); } }
private static void OnControllerDestroy(CameraForge.CameraController c) { if (c.camera == Camera.main) { UserVarManager.ResetAllGlobalVars(); camc = null; } }
private static void AfterControllerPlay(CameraForge.CameraController c) { SyncNearCamera(); if (UISightingTelescope.Instance != null) { // UISightingTelescope.Instance.isShow = c.pose.lockCursor; UISightingTelescope.Instance.UpdateType(); } if (null != Pathea.MainPlayerCmpt.gMainPlayer) { Pathea.MainPlayerCmpt.gMainPlayer.UpdateCamDirection(c.transform.forward); } }
public static void SetFreeCameraMode() { if (SceneMan.self == null) { Debug.LogError("[SetFreeCameraMode]Invalid scene"); return; } _freeCameraMode = !_freeCameraMode; if (_freeCameraMode) { CameraForge.CameraController camCtrlr = Camera.main.GetComponent <CameraForge.CameraController> (); if (camCtrlr != null) { camCtrlr.enabled = false; } FreeCamera freeCam = Camera.main.GetComponent <FreeCamera> (); if (freeCam != null) { camCtrlr.enabled = true; } else { Camera.main.gameObject.AddComponent <FreeCamera> (); } } else { FreeCamera freeCam = Camera.main.GetComponent <FreeCamera> (); if (freeCam != null) { GameObject.Destroy(freeCam); } CameraForge.CameraController camCtrlr = Camera.main.GetComponent <CameraForge.CameraController> (); if (camCtrlr != null) { camCtrlr.enabled = true; } } Debug.LogError("[SetFreeCameraMode]FreeCameraMode:" + _freeCameraMode); return; }
static void AfterCamera(CameraForge.CameraController camc) { if (Nova != null) { #region UNDERWATER // 先用voxel粗略判断是否在水中 Vector3 camPos = camc.pose.position; bool underwater = false; if ((camPos.x < 0 || camPos.z < 0) && Pathea.PeGameMgr.IsStory) { underwater = false; } else if (camPos.y < 0 && camPos.y > -100) { underwater = true; } else { underwater = PETools.PEUtil.CheckPositionUnderWater(camPos); } // 设置一个underwater的目标值, 等于0则不在水中,值越大则越深 // 若在水中,初值设为50米。(若检测不到水面碰撞,就按50米处理了) float uw_target = underwater ? 50f : 0f; // 检测水面碰撞,计算摄像机在水中的深度 RaycastHit rch_water; RaycastHit rch_water_up; if (Physics.Raycast(new Ray(camc.pose.position + Vector3.up * 200f, Vector3.down), out rch_water, 200f, 1 << Pathea.Layer.Water)) { // 反向查询水的下边缘,不能查到,查到则不在水中 if (!Physics.Raycast(new Ray(camc.pose.position, Vector3.up), out rch_water_up, 200f, 1 << Pathea.Layer.Water)) { // 特殊处理 ? if (Pathea.PeGameMgr.IsMultiStory && PlayerNetwork.mainPlayer != null && (PlayerNetwork.mainPlayer._curSceneId != -1 && PlayerNetwork.mainPlayer._curSceneId != (int)Pathea.SingleGameStory.StoryScene.MainLand)) { ; } else { uw_target = 200f - rch_water.distance; } } } // 若粗测显示不在水中,而水深大于2米,则矛盾,置为0 if (!underwater && uw_target > 2f) { uw_target = 0; } // 应用水下效果 if ((Nova.Underwater > 0f) != underwater) { if (!underwater) { Nova.Underwater = 0f; } else { Nova.Underwater = 0.01f; } Nova.Output.Apply(); } Nova.Underwater = Mathf.Lerp(Nova.Underwater, uw_target, 0.2f); #endregion } }