UGUI 이미지 드래그 기능 구현
드래그 하면 좌 표를 떠 날 수 없습니다.UGUI 의 좌 표 는 약간 다 릅 니 다.두 가지 좌표 가 있 습 니 다.하 나 는 화면 좌표 이 고 다른 하 나 는 UI 가 Canvas 안에 있 는 좌표 입 니 다.(잠시 ugui 좌표 라 고 합 니 다.)이 두 좌 표 는 다 르 기 때문에 끌 면 전환 이 필요 하 다.마우스 의 이동 은 화면 좌표 이 고 UI 의 이동 은 ugui 좌표 이기 때문이다.변환 방법:
RectTransformUtility.ScreenPointToLocalPointInRectangle ( … );이 방법 은 화면 좌 표를 ugui 좌표 로 바 꿀 수 있다.화면 좌표 와 UGUI 좌표 의 차이,전환 에 대해 서 는 말 하지 않 겠 습 니 다.저도 안개 때문에 브 라 우 저 를 직접 끄 라 고 할 까 봐 걱정 입 니 다.
여기 서 우 리 는 UI 의 좌표 와 마우스 의 좌표 가 다르다 는 것 만 알 아야 한다.그들 사이 의 상호 이동 은 전환 이 필요 하 다.
전환 이 필요 한 이상 사용 방법 이 빠 질 수 없다.그래서 여기 공식 UGUI 감청 사건 이 있 습 니 다.
(나 는 추 태 를 보이 지 않 고 번역 할 것 이다.영 어 는 여전히 좀 엉망이다.)
컨트롤 에 이상 의 감청 사건 을 추가 하려 면 세 가지 방법 이 있 습 니 다.
1.클래스 를 작성 하여 위의 인터페이스(어느 것 으로,어느 것 으로)를 실현 하고 공간 에 이 스 크 립 트 를 추가 합 니 다.
2,EventTrigger 이 구성 요소 추가
추가 할 감청 추가
그리고 Buttong 에 감청 을 넣 는 것 처럼 방법 을 추가 하면 됩 니 다.
3.프로그램 동적 추가
여기 서 제 가 첫 번 째 방법 을 사용 하 겠 습 니 다.뒤에 두 가지 기회 가 있 으 면 말씀 드 리 겠 습 니 다.
이제 우 리 는 정식으로 기능 을 실현 하기 시작 할 것 이다.2D 항목 을 새로 만 듭 니 다.장면 에 그림 한 장 을 추가 합 니 다(그림 이 필요 하지 않 습 니 다.다른 컨트롤 도 가능 합 니 다).그리고 그림 에 스 크 립 트 를 추가 합 니 다.이름 은 MyDrag 입 니 다.편집:
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
using System;
//
public class MyDrag : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler,
IEndDragHandler, IPointerEnterHandler, IPointerExitHandler {
public RectTransform canvas; // canvas ugui
private RectTransform imgRect; // ugui
Vector2 offset = new Vector3(); //
Vector3 imgReduceScale = new Vector3(0.8f, 0.8f, 1); //
Vector3 imgNormalScale = new Vector3(1, 1, 1); //
// Use this for initialization
void Start () {
imgRect = GetComponent<RectTransform>();
}
// IPointerDownHandler
public void OnPointerDown(PointerEventData eventData)
{
Vector2 mouseDown = eventData.position; //
Vector2 mouseUguiPos = new Vector2(); // ugui
//RectTransformUtility.ScreenPointToLocalPointInRectangle(): ugui
//canvas: , img Canvas, Canvas
//eventData.enterEventCamera:
//out mouseUguiPos: ugui
//isRect: bool ,
bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDown, eventData.enterEventCamera, out mouseUguiPos);
if (isRect) //
{
//
offset = imgRect.anchoredPosition - mouseUguiPos;
}
}
// IDragHandler
public void OnDrag(PointerEventData eventData)
{
Vector2 mouseDrag = eventData.position; //
Vector2 uguiPos = new Vector2(); //
//
bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDrag, eventData.enterEventCamera, out uguiPos);
if (isRect)
{
// ugui ugui
imgRect.anchoredPosition = offset + uguiPos;
}
}
// IPointerUpHandler
public void OnPointerUp(PointerEventData eventData)
{
offset = Vector2.zero;
}
// IEndDragHandler
public void OnEndDrag(PointerEventData eventData)
{
offset = Vector2.zero;
}
// IPointerEnterHandler
public void OnPointerEnter(PointerEventData eventData)
{
imgRect.localScale = imgReduceScale; //
}
// IPointerExitHandler
public void OnPointerExit(PointerEventData eventData)
{
imgRect.localScale = imgNormalScale; //
}
}
간단 한 드래그 기능 이 구현 되 었 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UGUI 커널 탐구(一) EventSystem이름은 크게 지었지만 실제로 이벤트시스템이 클릭, 키보드 입력, 터치 등 이벤트를 처리하고 관리하는 것이기 때문에 이벤트 시스템인 Input 이벤트시스템이 되는 것이 적절하다. 시스템 입력 모듈표와 현재 입력 모듈....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.