using Fantasy.Async; using NBC; using Fantasy.Entitas; using Fantasy.Entitas.Interface; using Fantasy.Event; using UnityEngine; namespace NBF.Fishing2 { public enum CameraShowMode { None = 0, FPP, TPP, } public class CameraComponent : Entity { public CameraShowMode Mode = CameraShowMode.None; private CameraAsset _cameraAsset; private CameraShowMode _lastMode = CameraShowMode.None; public class CameraComponentAwakeSystem : AwakeSystem { protected override void Awake(CameraComponent self) { self._cameraAsset = Game.Instance.gameObject.GetComponentInChildren(); } } public class CameraComponentUpdateSystem : UpdateSystem { protected override void Update(CameraComponent self) { self.UpdateCamera(); } } public class CameraComponentDestroySystem : DestroySystem { protected override void Destroy(CameraComponent self) { self._cameraAsset = null; self._lastMode = CameraShowMode.None; self.Mode = CameraShowMode.None; } } private void UpdateCamera() { if (_lastMode == Mode) return; if (Mode == CameraShowMode.TPP) { //第三人称视角 SetTPPCam(); } else if (Mode == CameraShowMode.FPP) { //第一人称视角 SetFPPCam(); } } private void SetTPPCam() { _cameraAsset.fppVCam.Priority = 0; _cameraAsset.tppVCam.Priority = 10; } private void SetFPPCam() { var map = App.Main.GetComponent(); var unityComponent = map.SelfMapUnit.GetComponent(); if (unityComponent != null) { _cameraAsset.fppVCam.LookAt = unityComponent.RootAsset.FppLook; _cameraAsset.fppVCam.Follow = unityComponent.ModelAsset.NeckTransform; unityComponent.ModelAsset.LookIk.solver.target = unityComponent.RootAsset.FppLook; } _cameraAsset.fppVCam.Priority = 10; _cameraAsset.tppVCam.Priority = 0; } public void SetFppLook(Transform fppCamLook) { _cameraAsset.fppVCam.LookAt = fppCamLook; } public void SetFppFollow(Transform fppCamFollow) { _cameraAsset.fppVCam.Follow = fppCamFollow; } } }