Unity中实现背包物品拖动和更换位置

本文介绍了一个Unity中UI元素拖拽的实现案例。该案例通过定义一个名为PointMoveController的脚本,实现了UI元素的开始拖拽、拖拽过程中及结束拖拽的行为。在拖拽过程中,UI元素会跟随鼠标移动,并且根据目标对象的标签进行不同的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using UnityEngine;

using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class PointMoveController : MonoBehaviour,IBeginDragHandler, IDragHandler,IEndDragHandler
{

//// Use this for initialization
//void Start () 
//{

//}

//// Update is called once per frame
//void Update () 
//{ 
//}

private Vector3 Original;
private Transform OriginalParent;
/// <summary>
/// 开始拖动
/// </summary>
/// <param name="EventData"></param>
public void OnBeginDrag(PointerEventData EventData)
{
    OriginalParent = this.transform.parent;//设置父位置点
    Original = this.transform.position;
    this.GetComponent<CanvasGroup>().blocksRaycasts = false;//设置射线穿透
}
/// <summary>
/// 正在拖拽
/// </summary>
/// <param name="EventData"></param>
public void OnDrag(PointerEventData EventData)
{
    this.transform.position = Input.mousePosition;//当前位置为鼠标所在位置
    if (EventData.pointerEnter.tag == "Weapon")
    {
        this.transform.SetParent(EventData.pointerEnter.transform);
    }
    if (EventData.pointerEnter.tag == "P")
    {
        this.transform.SetParent(EventData.pointerEnter.transform.parent);
    }
}
public void OnEndDrag(PointerEventData EventData)
{
    this.transform.localPosition = new Vector3(0,0,0);
    this.GetComponent<CanvasGroup>().blocksRaycasts = true;
    if (EventData.pointerEnter.tag == "P")
    {
        EventData.pointerEnter.transform.position = Original;
        EventData.pointerEnter.transform.SetParent(OriginalParent);
    }
    if (EventData.pointerEnter.tag == this.name)
    {
        this.transform.FindChild("Text").GetComponent<Text>().text = int.Parse(this.transform.FindChild("Text").GetComponent<Text>().text) +int.Parse(EventData.pointerEnter.transform.FindChild("Text").GetComponent<Text>().text)+"";
    }
    if (EventData.pointerEnter.tag == "BackGround")
    {
        GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
        go.tag = "P";
        this.transform.FindChild("Text").GetComponent<Text>().text = (int.Parse(this.transform.FindChild("Text").GetComponent<Text>().text) - 1) + "";
        OriginalParent = this.transform.parent;
        Original = this.transform.position;
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值