Tutor:DragAndDrop

Материал из GreatGalaxy
Перейти к: навигация, поиск

Drad & Drop System Unity

// GGTeam
// Скрипт Drag&Drop
using UnityEngine;
using System.Collections;
 
public class Drag_and_drop: MonoBehaviour
{
    GameObject Canvas;        //Наш канвас
    GameObject[] slots;       //Массив всех слотов
    Transform startPar;       //Стартовый родитель итема
    Vector3 startPos;         //Стартовая позиция итема
    //---------------------------------------------------------------------------------------------------------------------------------
    void Start()
    {
        slots = GameObject.FindGameObjectsWithTag("slot"); //Заполняем массив слотов
        Canvas = GameObject.Find("Canvas");                //Ищем канвас по имени
    }
    //---------------------------------------------------------------------------------------------------------------------------------
    void OnMouseDown()                                     //Если мы нажали на итем
    {
        startPar = transform.parent;                       //Запоминаем стартового родителя
        startPos = transform.position;                     //Запоминаем стартовую позицию
        transform.SetParent(Canvas.transform);             //Делаем родителем наш канвас (Чтобы итем, при перетаскивании, был поверх всего)
    }
    //---------------------------------------------------------------------------------------------------------------------------------
    void OnMouseDrag()                                     //Если мы тащим итем
    {
        //Считаем координаты курсора (ИМЕННО ScreenToWorldPoint), приравниваем результат к mousePos
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z));
        transform.position = mousePos;                           //Меняем текущую позицию итема на mousePos
    }
    //---------------------------------------------------------------------------------------------------------------------------------
    void OnMouseUp()                                       //Если мы отпускаем итем
    {
        foreach (GameObject slot in slots)                 //Ищим нужный слот в наше массиве
        {
            Vector3 offset = slot.transform.position - transform.position; //
            float dist = offset.sqrMagnitude;                              //Считаем дистанцию от итема до каждого слота
            if (dist < 0.5f)                                               //Если расстояние меньше чем 0.5
            {
                transform.position = slot.transform.position;              //Меняем текущую позицию итема на позицию слота
                transform.SetParent(slot.transform);                       //Делаем новый слот нашим новым родителем
                startPar = transform.parent;                               //Обновляем старового родителя
                startPos = transform.position;                             //Обновляем стартовую позицию
            }
        }
        if (transform.parent.tag != "slot")                                //Если ниодин слот не подошел и текущий родитель не является слотом
        {
            transform.position = startPos;                                 //Возвращаем итем на старую позицию
            transform.SetParent(startPar);                                 //Возвращаем старого родителя
        }
    }
    //---------------------------------------------------------------------------------------------------------------------------------
 
 
 
}





Drad and Drop System Unity