Unity3D 한마디 코드로 UGUI 이미지 드래그

2602 단어
본문에서, 당신은 어떻게 한 마디 코드를 사용하여 UGUI 그림의 드래그를 실현하는지 배울 것입니다. 좌표의 변환이 필요 없고, Piovt의 변환이 필요 없습니다

효과 프레젠테이션:


효과 시범
Tips:Show info 스크립트는 단지 필자가 마우스를 터치하는지 확인하기 위해 추가된 것일 뿐 쓸모가 없습니다

코드:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class movePic : MonoBehaviour,IDragHandler ,IPointerDownHandler{
    private RawImage img; 
    Vector3 offsetPos; //          -     
    void Start()
    {
        img = GetComponent();//    ,         RectTransform
    }
    public void OnDrag(PointerEventData eventData)
    {
        //            ,             position
        img.rectTransform.position = new Vector3(Mathf.Clamp(Input.mousePosition.x, 0, Screen.width), Mathf.Clamp(Input.mousePosition.y, 0, Screen.height), 0) + offsetPos;
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        offsetPos = img.rectTransform.position - Input.mousePosition;
    }
}


Tips:

  • 가장 간단한 코드는Rect 좌표 변환과 관련이 없고 Piovt를 고려하지 않는다.
  • 필요using UnityEngine.EventSystem
  • 2개 인터페이스IDragHandler,IPointerDownHandler를 계승하고 인터페이스의 실현에 이미지 이동 논리
  • 를 추가한다.

    단순 확장


    입력 상자의 배경으로 사용할 수 있으며, 입력 상자는 아름답고 실용적이다

    특별히 관심을 가지다


    상기 코드가 실현되는 전제는:Canvas-renderMode-ScreenSpaceOverlay를 실현하려면:Canvas-renderMode-Word Space 아래의 그림을 드래그하면 좌표 변환과 관련된 것도 간단합니다.
    using System;
    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    
    public class MoveImage : MonoBehaviour, IDragHandler, IPointerDownHandler
    {
        private Image img;
        Vector3 offsetPos; //          -     
        Vector3 arragedPos; //          ,      
        void Start()
        {
            img = GetComponent();//    ,         RectTransform
        }
        public void OnDrag(PointerEventData eventData)
        {
            //            ,             position
            img.transform.position =Camera.main.ScreenToWorldPoint(new Vector3(Mathf.Clamp(Input.mousePosition.x, 0, Screen.width), Mathf.Clamp(Input.mousePosition.y, 0, Screen.height), 0) + offsetPos);
        }
        public void OnPointerDown(PointerEventData eventData)
        {
            offsetPos = Camera.main.WorldToScreenPoint(img.rectTransform.position) - Input.mousePosition;
        }
    }
    

    Tips: 주의해 주세요. Camera.main.WorldToScreenPointCamera.main.ScreenToWorldPoint기타 실현 방식: UGUI 연구원에서 UI 서브노드가 Canvas에 있는 2D 좌표를 획득(12)
    라벨:Unity3d,UGUI,IDragHandler,IPointerDownHandler,그림 드래그,RectTransformUtility.ScreenPointToLocalPointInRectangle

    좋은 웹페이지 즐겨찾기