最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

unity小技巧:實現(xiàn)物品拖拽,位置交換,背包換格的效果

2023-06-26 21:18 作者:塵風(fēng)一枚  | 我要投稿

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.EventSystems;

using UnityEngine.UI;


public class MoveItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler

{

//記錄玩家開始拖拽時的位置

private Vector3 vector;

//需要移動物品的位置組件

private RectTransform rectTransform;

//UI事件管理器

private EventSystem _EventSystem;

private GraphicRaycaster gra;


private void Awake()

{

_EventSystem = FindObjectOfType<EventSystem>();

gra = FindObjectOfType<GraphicRaycaster>();


rectTransform = GetComponent<RectTransform>();

}


/// <summary>

/// 開始拖拽時執(zhí)行一次

/// </summary>

/// <param name="eventData"></param>

public void OnBeginDrag(PointerEventData eventData)

{

vector = this.transform.position;

}


/// <summary>

/// 拖拽時持續(xù)調(diào)用

/// </summary>

/// <param name="eventData"></param>

public void OnDrag(PointerEventData eventData)

{

this.rectTransform.anchoredPosition += eventData.delta;

}


/// <summary>

/// 結(jié)束拖拽時執(zhí)行一次

/// </summary>

/// <param name="eventData"></param>

public void OnEndDrag(PointerEventData eventData)

{

//判斷是否拖拽到格子上

bool isSolt = false;

//保存格子的位置

Vector3 SlotVector = new Vector3();

//通過定義的讀取方法讀取鼠標(biāo)所在位置的UI對象

var list = GraphicRaycaster(Input.mousePosition);

foreach (var item in list)

{

//檢測是否在物品上

if (item.gameObject.tag == "Item")

{

//如果在物品上則執(zhí)行以下代碼

//---交換位置---//

this.rectTransform.position = item.gameObject.transform.position;

item.gameObject.transform.position = vector;

}

//檢測是否在格子上

else if(item.gameObject.tag == "Slot")

{

//如果在格子上則將isSlot設(shè)置為true方便后續(xù)代碼

isSolt = true;

//保存格子位置坐標(biāo)以便切換位置

SlotVector = item.gameObject.transform.position;

}

}

//判斷是否檢測在格子上

if (isSolt)

{

//如果在格子上,則切換到格子上

this.rectTransform.position = SlotVector;

}

else

{

//如果不在格子上,則返回原位置

this.rectTransform.position = vector;

}

}


/// <summary>

/// 定義通過射線讀取所在位置的UI對象

/// </summary>

/// <param name="pos">射線位置</param>

/// <returns>返回讀取的所有UI對象</returns>

private List<RaycastResult> GraphicRaycaster(Vector2 pos)

{

var mPointerEventData = new PointerEventData(_EventSystem);

mPointerEventData.position = pos;

List<RaycastResult> results = new List<RaycastResult>();

gra.Raycast(mPointerEventData, results);

return results;

}


}

unity小技巧:實現(xiàn)物品拖拽,位置交換,背包換格的效果的評論 (共 條)

分享到微博請遵守國家法律
保德县| 陈巴尔虎旗| 安西县| 类乌齐县| 双城市| 调兵山市| 万荣县| 青海省| 静宁县| 富源县| 报价| 云龙县| 曲阳县| 淮安市| 左云县| 同心县| 东莞市| 磴口县| 舟曲县| 平江县| 阜新市| 乌兰县| 沅陵县| 五原县| 钟山县| 海盐县| 镇坪县| 潼关县| 贵阳市| 邵阳县| 张家川| 张北县| 平果县| 竹北市| 进贤县| 台江县| 浮梁县| 嵊州市| 土默特右旗| 隆子县| 竹山县|