using UnityEngine;
using UnityEngine.EventSystems;
public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{
private RectTransform background; // 조이스틱 배경 이미지의 RectTransform
private RectTransform handle; // 조이스틱 핸들 이미지의 RectTransform
private Vector2 inputVector; // 조이스틱 입력 벡터
// 조이스틱 초기화
private void Start()
{
background = GetComponent<RectTransform>();
handle = transform.GetChild(0).GetComponent<RectTransform>();
}
// 조이스틱을 누르는 순간 호출됨
public void OnPointerDown(PointerEventData eventData)
{
OnDrag(eventData);
}
// 조이스틱 드래그 중 호출됨
public void OnDrag(PointerEventData eventData)
{
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(background, eventData.position, eventData.pressEventCamera, out pos))
{
// 조이스틱의 위치를 클릭한 위치로 이동
handle.localPosition = pos;
// 조이스틱 입력 벡터를 구함
inputVector = new Vector2(
handle.localPosition.x / (background.sizeDelta.x / 2),
handle.localPosition.y / (background.sizeDelta.y / 2)
);
// 조이스틱 입력 벡터의 크기를 1 이하로 제한
inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;
}
}
// 조이스틱에서 손을 뗄 때 호출됨
public void OnPointerUp(PointerEventData eventData)
{
// 조이스틱의 위치를 원래 위치로 되돌림
handle.localPosition = Vector2.zero;
inputVector = Vector2.zero;
}
// 조이스틱 입력 벡터를 반환하는 메서드
public Vector2 GetInputVector()
{
return inputVector;
}
}
이제 위 코드를 참고하여, 게임 오브젝트에 Joystick 스크립트를 추가하고 조이스틱 배경 이미지와 핸들 이미지를 연결해주면 됩니다. GetInputVector 메서드를 이용하여 조이스틱 입력 벡터를 얻을 수 있습니다. 이 입력 벡터를 이용하여 캐릭터의 이동 방향, 속도 등을 제어할 수 있습니다.
'유니티' 카테고리의 다른 글
유니티2D에서 A 오브젝트의 랜덤 결과 값을 B 오브젝트에서 불러오는 방법은? (0) | 2023.03.27 |
---|---|
가위바위보 이미지가 빠르게 바뀌다가 3초 뒤에 랜덤으로 선택되서 보여지는 코드 (0) | 2023.03.27 |
Unity Ads API를 사용하여 광고를 보고 닫으면 특정 포인트를 추가하는 코드 (0) | 2023.03.22 |
유니티 2D에서 적이 1번부터 100번까지 있을 경우 적을 물리치면 순차적으로 나타나게 하는 방법 (0) | 2023.03.22 |
유니티2D 가위 바위 보 게임에서 승리할 때 다른 씬에 있는 오브젝트의 색상을 변경하는 코드 (0) | 2023.03.20 |