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 update
void 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 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());
}
/// <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");
}
}
フライアウェイトリガーボタン(オンザフライボタン)をドラッグアンドリリースします
おすすめ
転載: blog.csdn.net/weixin_45023328/article/details/121902217
おすすめ
ランキング