728x90
반응형
SMALL
캔버스에서 이미지 UI 2개 생성 (1개는 조이스틱 및 배경, 1개는 조이스틱 레버)
각각 크기 조절 및 이미지 지정한 이후
조이스틱 오브젝트에 아래 스크립트 컴포넌트함
컴포넌트된 스크립트에 Lever 오브젝트 연결하면 끝
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; // 키보드, 마우스, 터치를 이벤트로 오브젝트에 보낼 수 있는 기능을 지원
//using UnityEngine.UI;
public class JoystickController : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
[SerializeField]
private RectTransform lever;
private RectTransform rectTransform;
[SerializeField, Range(10f, 150f)]
private float leverRange;
private Vector2 inputVector; // 추가
private bool isInput; // 추가
private void Awake()
{
rectTransform = GetComponent<RectTransform>();
}
public void OnBeginDrag(PointerEventData eventData)
{
// var inputDir = eventData.position - rectTransform.anchoredPosition;
// var clampedDir = inputDir.magnitude < leverRange ? inputDir
// : inputDir.normalized * leverRange;
// lever.anchoredPosition = clampedDir;
ControlJoystickLever(eventData); // 추가
isInput = true; // 추가
}
// 오브젝트를 클릭해서 드래그 하는 도중에 들어오는 이벤트
// 하지만 클릭을 유지한 상태로 마우스를 멈추면 이벤트가 들어오지 않음
public void OnDrag(PointerEventData eventData)
{
// var inputDir = eventData.position - rectTransform.anchoredPosition;
// var clampedDir = inputDir.magnitude < leverRange ? inputDir
// : inputDir.normalized * leverRange;
// lever.anchoredPosition = clampedDir;
ControlJoystickLever(eventData); // 추가
isInput = false; // 추가
}
// 추가
public void ControlJoystickLever(PointerEventData eventData)
{
var inputDir = eventData.position - rectTransform.anchoredPosition;
var clampedDir = inputDir.magnitude < leverRange ? inputDir
: inputDir.normalized * leverRange;
lever.anchoredPosition = clampedDir;
inputVector = clampedDir / leverRange;
}
public void OnEndDrag(PointerEventData eventData)
{
lever.anchoredPosition = Vector2.zero;
}
public CharacterController characterController;
private void InputControlVector()
{ // 캐릭터에게 입력벡터를 전달
if (characterController)
{
Debug.Log(inputVector.x + inputVector.y);
}
}
void Update()
{
if(isInput)
{
InputControlVector();
}
}
}
728x90
반응형
LIST
'유니티 개발일지' 카테고리의 다른 글
유니티(Unity) 설치 방법 (0) | 2023.04.24 |
---|---|
유니티 시간 정지 상태에서 애니메이션 동작 구현 및 일시정지 (0) | 2023.04.17 |
유니티 Vector3 값 모음 (0) | 2023.04.16 |
캐릭터를 향해 달려가는 프리팹 몬스터 스크립트 (0) | 2023.04.16 |
몬스터 프리팹 함수를 호출하는 InvokeRepeating 프리팹 복제 Instantiate (0) | 2023.04.14 |
댓글