using UnityEngine; using UnityEngine.EventSystems; public class FloatingJoystick : Joystick { protected override void Start() { base.Start(); background.gameObject.SetActive(false); } private void Update() { if (MyValue.bMyPC && MyValue.MyPC.CanMove()) { // Cursor.lockState를 None으로 설정하여 마우스 고정 해제 if (Cursor.lockState == CursorLockMode.Locked) { Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } // 카메라의 방향을 고려한 입력 변환 Vector3 cameraForward = Camera.main.transform.forward; Vector3 cameraRight = Camera.main.transform.right; // 카메라의 수직 축을 무시하고 평면에서만 계산 cameraForward.y = 0; cameraRight.y = 0; // 입력 방향을 카메라 방향에 맞춰 변환 Vector3 direction = cameraForward.normalized * Vertical + cameraRight.normalized * Horizontal; if (OptionInfo.Ins.Get_PCMove() && direction != Vector3.zero) { MyValue.m_RealCamera.Set_DistanceUp(Vertical < 0); // 아래로 움직일 경우 MyValue.m_RealCamera.m_BackMove = Vertical < 0; MyValue.MyPC.Run_byJoystick(direction); } } } public override void OnPointerDown(PointerEventData eventData) { background.anchoredPosition = ScreenPointToAnchoredPosition(eventData.position); background.gameObject.SetActive(true); if (MyValue.bMyPC && MyValue.MyPC.CanMove()) { MyValue.MyPC.Set_AutoBraking(false); MyValue.MyPC.Set_JoystickStatus(1); } base.OnPointerDown(eventData); } public override void OnPointerUp(PointerEventData eventData) { background.gameObject.SetActive(false); base.OnPointerUp(eventData); if (OptionInfo.Ins.Get_PCMove() && MyValue.bMyPC && MyValue.MyPC.CanMove()) { MyValue.MyPC.Set_JoystickStatus(0); MyValue.MyPC.Set_AutoBraking(true); MyValue.m_RealCamera.Set_DistanceUp(false); MyValue.m_RealCamera.m_BackMove = false; } } }