using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;public class FlyBtnScript : MonoBehaviour
{/// <summary>/// 拖拽时按钮最大位移距离/// </summary>[Tooltip(" 拖拽时按钮最大位移距离")]public float MaxDragPosition = 500;/// <summary>/// 放开时最小起可飞距离/// </summary>[Tooltip(" 放开时最小起可飞距离")]public float CanFlyDistance = 300;/// <summary>/// 按钮起飞后触发距离/// </summary>[Tooltip(" 按钮起飞后触发距离")]public float Bnt_TakeEffectDistance = 2000;public String Msg;[HideInInspector]public Button Btn;[HideInInspector]public EventTrigger eventTrigger;[HideInInspector]public Vector3 AwakePoint;[HideInInspector]public Vector3 StartPoint;[HideInInspector]public Vector3 EndPoint;[HideInInspector]public bool IsDown;[HideInInspector]public bool CanMove;private void Awake(){//AwakePoint = transform.position;AwakePoint = new Vector3(0.0F, 1.0F, 90.0F);print(AwakePoint);}// Start is called before the first frame updatevoid Start(){Btn = transform.GetComponent<Button>();eventTrigger = transform.GetComponent<EventTrigger>();if (eventTrigger == null){eventTrigger = gameObject.AddComponent<EventTrigger>();}AddPointerEvent(eventTrigger, EventTriggerType.PointerDown, PointDown);AddPointerEvent(eventTrigger, EventTriggerType.PointerEnter, PointerEnter);AddPointerEvent(eventTrigger, EventTriggerType.PointerUp, PointUp);}private void PointerEnter(BaseEventData arg0){}private void PointUp(BaseEventData arg0){print("transform.localPosition.y:" + transform.localPosition.y);if (transform.localPosition.y > CanFlyDistance){Debug.Log("PointUp:" + transform.name);EndPoint =Input.mousePosition;float D = (EndPoint - StartPoint).magnitude;//print(D);if (D > 200){CanMove = true;}else{print("D "+D);transform.DOMove(AwakePoint, 0.5f);}}else{transform.DOMove(AwakePoint, 0.5f);}IsDown = false;}private Vector3 distance;private void PointDown(BaseEventData arg0){//Debug.Log("PointDown" + transform.name);StartPoint = Input.mousePosition;distance = transform.localPosition - Input.mousePosition;IsDown = true;}// Update is called once per framevoid Update(){if (IsDown){if (Vector3.Distance(Input.mousePosition, StartPoint)> MaxDragPosition){//print(Vector3.Distance(Input.mousePosition, StartPoint));Vector3 point = ((Input.mousePosition - AwakePoint)) + AwakePoint;transform.localPosition = point+distance;}else{Vector3 mousePositionOnScreen = Input.mousePosition + distance;transform.localPosition = mousePositionOnScreen;}}if (CanMove){//print("CanMove");transform.Translate((EndPoint - StartPoint).normalized*10);if ((transform.position - AwakePoint).magnitude > Bnt_TakeEffectDistance){//print()Invok();CanMove = false;//transform.localPosition = AwakePoint;}}}public void Invok(){//print("触发");SendNetWorkMessage.Instance.SocketSendMessage(Msg);MessageManager1.Instance.SendMsgToOtherScreen(Msg);PageManager.Instance.ShowOnePage(2);Page2Script.Instance.ShowOneTittle(transform.GetSiblingIndex());}/// <summary>/// 为EventTrigger注册事件/// </summary>/// <param name="eventTrigger">需要添加事件的EventTrigger</param>/// <param name="eventTriggerType">事件类型</param>/// <param name="callback">回调函数</param>void AddPointerEvent(EventTrigger eventTrigger, EventTriggerType eventTriggerType, UnityEngine.Events.UnityAction<BaseEventData> callback){EventTrigger.Entry entry = new EventTrigger.Entry();entry.eventID = eventTriggerType;entry.callback = new EventTrigger.TriggerEvent();entry.callback.AddListener(callback);eventTrigger.triggers.Add(entry);//Debug.Log("AddPointerEnterEvent");}
}

拖拽松开飞走触发按钮(飞屏按钮)相关推荐

  1. Taro项目 实现一个在页面内自由拖拽的滑块,仿苹果手机的辅助按钮

    效果:自由拖拽,松手会自动吸附到边上 组件代码: import { EventProps, ITouchEvent, View } from '@tarojs/components' import { ...

  2. html 手机端拖拽效果,JS实现移动端触屏拖拽功能

    1.html 2.css * { margin: 0; padding: 0; } html, body { width: 100%; height: 100%; } #div1 { width: 5 ...

  3. android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮

    IOS的Assistive Touch效果很炫酷,可以任意拖拽,同时点击后会展开菜单栏.然而,这不只是IOS的特权,Android也可以实现.但是由于悬浮窗需要申请权限,所以本文仅在app内实现,可以 ...

  4. Android自定义可拖拽的悬浮按钮---DragFloatingActionButton

    悬浮按钮FloatingActionButton是Android 5.0系统添加的新控件,FloatingActionButton是继承至ImageView,所以FloatingActionButto ...

  5. 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素

    介绍 HTML5 提供了专门的拖拽与拖放的 API,目前各浏览器都已支持,包括 IE.HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能.例如,用户可使用鼠标选择可拖 ...

  6. JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.阻止事件冒泡和默认行为 二.拖拽 1, 实现拖拽相关的三大事件: 2, 实现拖拽思路: 1, 给目标元素添加onmous ...

  7. 盒子拖拽-登录验证/阻止a链接跳转/页面换肤(点击小图,切换大图)/

    01-盒子拖拽-登录验证 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset=& ...

  8. 【墙裂推荐】【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing 还是古法炮制、传统工艺的原生代码兼容性最好,推荐

    以下方式的劣势就是在放弃拖拽那一刻会触发click事件,通常如果被拖拽元素还有其他点击事件,会重复触发,往往并非业务需求.优势就是-额-貌似这段代码没什么屌优势! <div class='dra ...

  9. dom 元素拖拽实现

    文章目录 原生 JS 实现 div 拖拽 HTML 拖拽 API REF   之前找实习的时候,面试官出了道 "原生 JS 实现 div 元素拖拽",当时实现了个大概,不过很多细节 ...

最新文章

  1. tf.nn.relu
  2. jpg在线合并jpg_JPG如何运作
  3. 基于纯 CSS3 技术实现美观的标签云效果
  4. 阿里云MaxCompute香港开服 将引入更多人工智能服务
  5. MySQL优化(二):索引的类型、匹配原则、创建原则
  6. Android 应用性能优化(2)---优化Android 应用启动速度
  7. mac apache 日志_Mac OS X中的Apache日志文件并进行分析
  8. 【luogu P2831 愤怒的小鸟】 题解
  9. echarts实现2d柱状_记录echarts比较难实现的图1(一个背景上呈现三个柱状图)
  10. MySQL不能插入中文字段的解决办法
  11. vmware fusion 文件共享_颜值至上,杜伽fusion我是真的被它的颜值吸引了
  12. 时光 php,ctphp-php教程-时光划过那刹那-PHP教程--创业的风,吹向了年轻之长藤个人博客网站...
  13. Chrome浏览器的Network面板介绍
  14. tq210 开发板 刷linux,TQ210开发板嵌入式笔记.pdf
  15. 微型计算机m3500q,爆发“小”宇宙 创新与实用完美结合 ——联想ThinkCentre M3500q超小商用台式机新品发布...
  16. CF833D Red-Black Cobweb 点分治、树状数组
  17. 爬虫36计之1.1 爬取高清MM图片壁纸
  18. mysql数据库全局搜索_数据库全局搜索
  19. 微软新专利暗示:多功能Surface Pen触控笔可能问世
  20. ETC“大跃进”乱象背后:超级工程引发新的AI盛宴

热门文章

  1. vtk梯度算子--边缘检测
  2. 【Python】太炫酷了,这里有一个用于制作数据面板大屏的Python模块
  3. python简单操作题,Python常用操作运算符及练习题
  4. 【电子学会】2022年09月图形化三级 -- 躲避游戏
  5. 如何使用php调用打印机驱动程序,网络打印服务器怎么安装和使用?
  6. 闪击战壁纸【拿走不谢】
  7. Smartbi电子表格故事之高效营销活动后的自助数据分析
  8. 日语学习软件意见反馈
  9. 有限元仿真的流程:三大步三小步
  10. PL/SQL developer连接64位oracle关于ori.dll的问题以及中文乱码解决方案