Unity 鼠标拖动UI图标生成场景内的物体并随鼠标移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

//拖塔建塔
public class UI_HeroItemCtrl : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    GameObject tower;
    TowerCtrl towerCtrl;
    public void OnBeginDrag(PointerEventData eventData)
    {
        //创建防御塔
        tower = ObjectPool.Instance.Spawn("Tower_Arrow", GameObject.Find("TowerPool").transform);
        //获取防御塔脚本
        towerCtrl = tower.GetComponent<TowerCtrl>();        
    }

    public void OnDrag(PointerEventData eventData)
    {
        //拖动防御塔的逻辑
        if (towerCtrl != null)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            Vector3 screenSpace = Vector3.zero;
            if (Physics.Raycast(ray, out hit))
            {
                //Debug.Log("Raycast");
                screenSpace = new Vector3(hit.point.x, hit.point.y, 0);
            }
            else
            {
                //Debug.Log("ScreenToWorldPoint");
                Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                screenSpace = new Vector3(pos.x, pos.y, 0);
            }
            tower.transform.position = screenSpace;
        }
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        //鼠标松开时判断防御塔是否拖在地基上,以及该地基是否已经建造防御塔
        
        if (towerCtrl.TowerPlaneList.Count > 0)
        {
            TowerPlane plane = towerCtrl.TowerPlaneList[0];
            if (!plane.haveTower)
            {
                plane.BuildTower();//设置地基上已经建造了防御塔
                tower.transform.SetParent(plane.transform, false);//将防御塔的父节点设为地基上
                tower.transform.localPosition = Vector3.zero;
                towerCtrl.Init(1);
            }
            else
            {
                ObjectPool.Instance.Unspawn(tower);//如果该地基已经建造塔,则回收
            }
        }
        else
        {
            ObjectPool.Instance.Unspawn(tower);//如果没有拖到地基处,则回收
        }
        
    }

    void Start()
    {
        
    }

    void Update()
    {
        
    }
}

猜你喜欢

转载自blog.csdn.net/cuijiahao/article/details/122011225