67 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |