using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
public class FlyBtnScript : MonoBehaviour
{
///
/// 拖拽时按钮最大位移距离
///
[Tooltip(" 拖拽时按钮最大位移距离")]
public float MaxDragPosition = 500;
///
/// 放开时最小起可飞距离
///
[Tooltip(" 放开时最小起可飞距离")]
public float CanFlyDistance = 300;
///
/// 按钮起飞后触发距离
///
[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 update
void Start()
{
Btn = transform.GetComponent();
eventTrigger = transform.GetComponent();
if (eventTrigger == null)
{
eventTrigger = gameObject.AddComponent();
}
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 frame
void 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());
}
///
/// 为EventTrigger注册事件
///
/// 需要添加事件的EventTrigger
/// 事件类型
/// 回调函数
void AddPointerEvent(EventTrigger eventTrigger, EventTriggerType eventTriggerType, UnityEngine.Events.UnityAction 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");
}
}
拖拽松开飞走触发按钮(飞屏按钮)
关注
打赏