using System; using Script.Gameplay.Input; using UnityEngine; namespace Gameplay.Player { public enum WatchMode { Normal, Inside, Outside } public class PlayerWatchModeSwitcher : MonoBehaviour { [SerializeField] private Camera cam; private InputManager inputManager; private WatchMode currentMode = WatchMode.Normal; private void Start() { inputManager = InputManager.Instance; SetWatchMode(currentMode); var input = inputManager.Input; input.Player.SwitchWatchMode.performed += ctx => { currentMode = (WatchMode)(((int)currentMode + 1) % 3); SetWatchMode(currentMode); };; } public void SetWatchMode(WatchMode mode) { currentMode = mode; SwitchWatchMode(mode); } // 实现按Tap键实现在WatchMode 3个模式切换,并通过SwitchWatchMode设置正确的相机模式 private void SwitchWatchMode(WatchMode watchMode) { switch (watchMode) { case WatchMode.Normal: SetSeeLines(false); break; case WatchMode.Inside: SetSeeLines(false); break; case WatchMode.Outside: SetSeeLines(true); break; default: throw new ArgumentOutOfRangeException(); } } private void SetSeeLines(bool seeLine) { int linesLayer = LayerMask.NameToLayer("Lines"); int mask = cam.cullingMask; if (seeLine) mask |= 1 << linesLayer; // 打开 else mask &= ~(1 << linesLayer); // 关闭 cam.cullingMask = mask; } } }