캔버스에서 이미지 UI 2개 생성(조이스틱 및 배경용 1개, 조이스틱 레버용 1개)
각각 이미지 크기 조정 및 지정 후
아래 스크립트 구성 요소를 조이스틱 개체에 추가
Lever 개체를 구성 요소 스크립트에 연결하면 완료됩니다.
사용 체계.컬렉션;
사용 체계.컬렉션.일반적인;
사용 UnityEngine;
사용 UnityEngine.UI;
사용 UnityEngine.이벤트 시스템; // 키보드, 마우스, 터치 이벤트를 객체로 보내는 기능 지원
//UnityEngine.UI 사용;
공공의 수업 조이스틱 컨트롤러 : 모노비헤이비어, IBeginDragHandler, IDragHandler, IEndDragHandler
{
(SerializeField)
사적인 직사각형 변환 지렛대;
사적인 직사각형 변환 rectTransform;
(SerializeField, 범위(10층, 150f))
사적인 뜨다 레버 범위;
사적인 벡터2 입력 벡터; // 덧셈
사적인 부울 isInput; // 덧셈
사적인 무효의 깨어 있는()
{
rectTransform = GetComponent<직사각형 변환>();
}
공공의 무효의 UnBeginDrag(포인터 이벤트 데이터 이벤트 데이터)
{
// var inputDir = eventData.position – rectTransform.anchoredPosition;
// var clampedDir = inputDir.magnitude < leverRange ? inputDir
// : inputDir.normalized * leverRange;
// lever.anchoredPosition = clampedDir;
제어조이스틱레버(이벤트 데이터); // 덧셈
isInput = 진실; // 덧셈
}
// 객체를 클릭하고 드래그하는 동안 들어오는 이벤트
// 하지만 클릭을 누른 상태에서 마우스를 멈추면 이벤트가 들어오지 않습니다.
공공의 무효의 온드래그(포인터 이벤트 데이터 이벤트 데이터)
{
// var inputDir = eventData.position – rectTransform.anchoredPosition;
// var clampedDir = inputDir.magnitude < leverRange ? inputDir
// : inputDir.normalized * leverRange;
// lever.anchoredPosition = clampedDir;
제어조이스틱레버(이벤트 데이터); // 덧셈
isInput = 거짓; // 덧셈
}
// 덧셈
공공의 무효의 제어조이스틱레버(포인터 이벤트 데이터 이벤트 데이터)
{
~였다 inputDir = 이벤트 데이터.위치 – rectTransform.고정 위치;
~였다 clampedDir = inputDir.크기 < 레버 범위 ? inputDir
: inputDir.정규화 * 레버 범위;
지렛대.고정 위치 = clampedDir;
입력 벡터 = clampedDir / 레버 범위;
}
공공의 무효의 OnEndDrag(포인터 이벤트 데이터 이벤트 데이터)
{
지렛대.고정 위치 = 벡터2.영;
}
공공의 캐릭터 컨트롤러 캐릭터 컨트롤러;
사적인 무효의 입력 제어 벡터()
{ // 입력 벡터를 문자에 전달
만약에 (캐릭터 컨트롤러)
{
디버그.통나무(입력 벡터.엑스 + 입력 벡터.와이);
}
}
무효의 업데이트()
{
만약에(isInput)
{
입력 제어 벡터();
}
}
}