Drag-and-Drop-Austausch von Rucksackartikeln und Beschreibungen von Rucksackartikeln

Der Effekt des Rucksackziehens ist bei Verwendung der vier Hauptschnittstellenklassen IInitializePotentialDragHandler und IBeginDragHandler immer noch derselbe

IDragHandler, IEndDragHandler

Studierende, die meinen letzten Blog gelesen haben, sollten die Rolle der vier Schnittstellen kennen.

Hier kommen wir direkt zum Thema: Drag-and-Drop-Austausch von Artikeln realisieren

Jeder weiß, dass alle Drag-and-Drop-Konvertierungen von Elementen in der OnEndDrag()-Methode implementiert werden müssen, da diese Methode die endgültige Ziehposition und die Position ist, die Sie tauschen möchten.

  GameObject go = eventData.pointerEnter; //Objekt angetroffen

Wir operieren, indem wir die Objekte, auf die wir stoßen, instanziieren. Hier bestimmen wir den Tag-Wert des Rucksackgitters und den Tag-Wert der Ausrüstung im Rucksack und führen dann die entsprechenden Vorgänge daran aus.

Wenn die Beschriftung des angetroffenen Objekts Pos ist, wird das Bild direkt dem Raster zugewiesen. Wenn das angetroffene Objekt die Beschriftung der Ausrüstung ist, führt das Ziehen des Elements zum Austausch der Ausrüstung.

   void Start()
    {
        tap = transform.GetChild(1).GetComponent<Text>();
        //pictures = GameObject.Find("phone").GetComponent<Image>();
        //gameImg = GameObject.FindGameObjectsWithTag("Enemy");

    }
    public void OnInitializePotentialDrag(PointerEventData eventData)//初始化拖拽
    {

        g = GetComponent<CanvasGroup>();
        img = GetComponent<Image>();

    }

    public void OnBeginDrag(PointerEventData eventData)//开始拖拽
    {
        print("开始拖拽");
        g.blocksRaycasts = false;//对象可拖拽

    }

    public void OnDrag(PointerEventData eventData)//正在拖拽
    {
        print("正在拖拽");
        transform.position = eventData.position;//把拖拽的对象,放到当前位置

    }

    public void OnEndDrag(PointerEventData eventData)//拖拽结束
    {
        print("拖拽结束");
        g.blocksRaycasts = true;//对象拖拽结束,位置固定
        GameObject go = eventData.pointerEnter; //碰到的对象

        if (go.CompareTag("Pos"))//背包格子tag值
        {
            transform.SetParent(go.transform);//碰到的对象设为父对象
            transform.localPosition = Vector3.zero;//居中

        }

        if (go.CompareTag("Enemy"))//背包装备tag值
        {
            //鼠标点击到的物品的位置的父级位置
            Transform Gezi = go.transform.parent;

            //砖石放入体力丹父级
            go.transform.parent = transform.parent;//位置交换,点击的对象父级位置和碰到的对象父级位置

            go.transform.localPosition = Vector3.zero;//自身局部位置居中

            //体力弹放入砖石父级
            transform.SetParent(Gezi, false);//碰到的对象位置,移动至点击对象的父级位置
            transform.localPosition = Vector3.zero;//自身局部位置居中
        }
    }

   Hier wird der Textinhalt angezeigt, wenn die Maus darauf platziert wird

public void OnPointerEnter(PointerEventData eventData)
    {         tap.gameObject.SetActive(true);     }

Hier ist der versteckte Textinhalt, nachdem die Maus gegangen ist

    public void OnPointerExit(PointerEventData eventData)
    {         tap.gameObject.SetActive(false);     }

Der obige Text muss sich auf zwei Schnittstellen IPointerEnterHandler und IPointerExitHandler beziehen

おすすめ

転載: blog.csdn.net/m0_71624363/article/details/129431549