반응형
코드 작성
using UnityEngine;
public class VirtualJoystick : MonoBehaviour
{
public float joystickRadius = 50f; // 조이스틱의 반지름
private RectTransform joystickBackground; // 조이스틱 배경 이미지의 RectTransform
private RectTransform joystickHandle; // 조이스틱 핸들 이미지의 RectTransform
private Vector2 joystickInput = Vector2.zero; // 정규화된 조이스틱 입력값
private void Start()
{
// 조이스틱 배경과 핸들을 찾아서 할당
joystickBackground = transform.Find("Background").GetComponent<RectTransform>();
joystickHandle = transform.Find("Handle").GetComponent<RectTransform>();
}
private void Update()
{
// 사용자 입력 감지
UpdateJoystickInput();
// 조이스틱 핸들 이동
MoveJoystickHandle();
}
private void UpdateJoystickInput()
{
// 마우스 혹은 터치 입력 감지
if (Input.GetMouseButton(0))
{
// 마우스 입력일 경우
Vector2 mousePosition = Input.mousePosition;
joystickInput = (mousePosition - joystickBackground.position) / joystickRadius;
}
else if (Input.touchCount > 0)
{
// 터치 입력일 경우
Vector2 touchPosition = Input.GetTouch(0).position;
joystickInput = (touchPosition - joystickBackground.position) / joystickRadius;
}
else
{
// 입력이 없을 경우 조이스틱 입력 초기화
joystickInput = Vector2.zero;
}
// 입력값을 정규화하여 최대 길이를 1로 유지
joystickInput = Vector2.ClampMagnitude(joystickInput, 1f);
}
private void MoveJoystickHandle()
{
// 조이스틱 핸들 위치 업데이트
joystickHandle.anchoredPosition = joystickInput * joystickRadius;
// 조이스틱 핸들의 위치를 조이스틱 배경 내에서 유지
float handleDistance = joystickInput.magnitude * joystickRadius;
if (handleDistance > joystickRadius)
{
joystickHandle.anchoredPosition = joystickInput.normalized * joystickRadius;
}
}
// 외부에서 조이스틱 입력값을 받을 수 있는 함수
public Vector2 GetJoystickInput()
{
return joystickInput;
}
}
반응형