UGUI 이미지 드래그 기능 구현

4213 단어 UGUI끌다
이 블 로 그 는 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; //    
 }
}
간단 한 드래그 기능 이 구현 되 었 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기