Project_WL/Assets/ThirdParty/Joystick Pack/Scripts/Joysticks/FloatingJoystick.cs

67 lines
2.3 KiB
C#

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;
}
}
}