失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > UGUI图片拖拽_保留原图

UGUI图片拖拽_保留原图

时间:2020-08-30 04:56:42

相关推荐

UGUI图片拖拽_保留原图

需求:

因为同一个公式,需要拖到四个位置,如果不保留原图,往第二个位置拖时,就没的拖了

解决:

在拖动的开始,新建一个替代品

以下是我参照“船到桥头自然沉”兄弟的脚本写的

using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.EventSystems;public class UGUIForDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IDropHandler{//创建一个Gameobject作为拖拽时被拖拽对象的代替品private GameObject drag_icon;//该物体是否可以进行拖拽public bool isCanDrug;//匹配信息public string matching;/// <summary>/// 拖拽时为新生成的拖拽图片进行位置更新/// </summary>/// <param name="eventData"></param>public void OnDrag(PointerEventData eventData){if (!isCanDrug) return;//并将拖拽时的坐标给予被拖拽对象的代替品Vector3 pos;if (RectTransformUtility.ScreenPointToWorldPointInRectangle(drag_icon.GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out pos)){drag_icon.transform.position = pos;//drag_icon.transform.localScale = new Vector3(1,1,1) ;}}/// <summary>/// 拖拽图片初始/// </summary>/// <param name="eventData"></param>public void OnBeginDrag(PointerEventData eventData){if (!isCanDrug) return;//代替品实例化drag_icon = new GameObject("icon");drag_icon.transform.SetParent(GameObject.Find("Canvas").transform, false);drag_icon.AddComponent<RectTransform>();var img = drag_icon.AddComponent<Image>();img.sprite = this.GetComponent<Image>().sprite;drag_icon.transform.GetComponent<RectTransform>().sizeDelta = new Vector2(60.8F, 43.8F);//如果不设置尺寸,生成的替代品尺寸,和原图不一样//防止拖拽结束时,代替品挡住了准备覆盖的对象而使得 OnDrop() 无效CanvasGroup group = drag_icon.AddComponent<CanvasGroup>();group.blocksRaycasts = false;}/// <summary>/// 拖拽结束/// </summary>/// <param name="eventData"></param>public void OnEndDrag(PointerEventData eventData){if(drag_icon.transform.localPosition.y>= -32 && drag_icon.transform.localPosition.y <=21){drag_icon.transform.localPosition = new Vector3(54,-8,0);}else if(drag_icon.transform.localPosition.y >=-130&& drag_icon.transform.localPosition.y <=-81){drag_icon.transform.localPosition = new Vector3(54,-104,0);}else if (drag_icon.transform.localPosition.y >= -235 && drag_icon.transform.localPosition.y <=-117){drag_icon.transform.localPosition = new Vector3(54,-207,0);}else if (drag_icon.transform.localPosition.y >=-338&& drag_icon.transform.localPosition.y <=-283){drag_icon.transform.localPosition = new Vector3(54,-310,0);}else//拖拽结束,销毁代替品{Destroy(drag_icon);}}/// <summary>/// 拖拽到当前图片上/// </summary>/// <param name="eventData"></param>public void OnDrop(PointerEventData eventData){//根据代替品的信息,改变当前对象的Sprite。var obj = eventData.pointerDrag;UGUIForDrag drag = obj.GetComponent<UGUIForDrag>();//检测拖拽物品是否是可拖拽的 if (drag != null){if (!drag.isCanDrug){return;}}//信息匹配if (IsSameMessage(drag)){Debug.Log("信息匹配成功");}else{Debug.Log("信息匹配失败");return;}this.GetComponent<Image>().sprite = obj.GetComponent<Image>().sprite;}/// <summary>/// 信息匹配/// </summary>/// <param name="message"></param>/// <returns></returns>bool IsSameMessage(UGUIForDrag message){if (message.matching == matching)return true;elsereturn false;}}

如果觉得《UGUI图片拖拽_保留原图》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。