拖动ui生成物体,当按下鼠标时,实例化物体
//鼠标按下生成物体
public void OnPointerDown(PointerEventData eventData)
{
isDrag = true;
dragObj = Instantiate(prefab);
}
用射线检测,使生成物体的位置跟随鼠标,当鼠标抬起,拖动事件结束
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 1000f))
{
dragObj.transform.position = hit.point;
dragObj.SetActive(true);
}
else
{
dragObj.SetActive(false);
}
if (Input.GetMouseButtonUp(0))
{
if (!dragObj.activeSelf)
{
Destroy(dragObj);
}
isDrag = false;
dragObj = null;
完整代码。仅供参考,一起加油,还有很多可以改动的地方。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
//------------------------------------挂在要拖动的UI上--------------------------------------
public class Drag : MonoBehaviour, IPointerDownHandler
{
//要生成的物体
public GameObject prefab;
//生成的物体
private GameObject dragObj;
//是否正在拖动
private bool isDrag;
private void Update()
{
if (isDrag)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 1000f))
{
dragObj.transform.position = hit.point;
dragObj.SetActive(true);
}
else
{
dragObj.SetActive(false);
}
if (Input.GetMouseButtonUp(0))
{
if (!dragObj.activeSelf)
{
Destroy(dragObj);
}
isDrag = false;
dragObj = null;
}
}
}
//鼠标按下生成物体
public void OnPointerDown(PointerEventData eventData)
{
isDrag = true;
dragObj = Instantiate(prefab);
}
}