m0_71275421 2022-07-31 09:11 采纳率: 50%
浏览 61
已结题

UnityUI组件连线问题

我绿色按键并没有安装脚本,但是还是会被连接,有什么办法能不让按键被连接。
如果还能提供撤销上一次连线和删除所有连线的方法,我可以适当追加酬金。

img

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;

public class Class1 : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IEndDragHandler
{
[Header("线宽度")]
public float lineWidth = 3f;
[Header("线颜色")]
public Color lineColor = Color.white;
[Header("线材质")]
public Material dongtai;
[Header("限制多选")]
bool isUP = true;
public Button ok;
//连线
GameObject lineObj = null;
RectTransform lineObjRT = null;
Image lineObjImg;
//初始点
Vector3 startPos = Vector3.zero;
Vector3 endPos = Vector3.zero;
// 最后落脚的物体
GameObject GetObj;

public void OnDrag(PointerEventData eventData)
{
    if (isUP)
    {
        endPos = Input.mousePosition;
        Vector3 durationPos = endPos - startPos;
        lineObjRT.sizeDelta = new Vector2(durationPos.magnitude, lineWidth);
        float angle = Mathf.Atan2(durationPos.y, durationPos.x) * Mathf.Rad2Deg;
        lineObjRT.localRotation = Quaternion.Euler(0, 0, angle);
    }
}

public void OnEndDrag(PointerEventData eventData)
{
    if (isUP)
    {
        if (eventData.pointerEnter != null)
        {
            print(eventData.pointerEnter.name);

            endPos = eventData.pointerEnter.transform.position;
            Vector3 durationPos = endPos - startPos;
            lineObjRT.sizeDelta = new Vector2(durationPos.magnitude, lineWidth);
            float angle = Mathf.Atan2(durationPos.y, durationPos.x) * Mathf.Rad2Deg;
            lineObjRT.localRotation = Quaternion.Euler(0, 0, angle);

            isUP = false;
        }
        else
        {

            print("未选中,结果为空");
        }
    }
}
public void OnPointerDown(PointerEventData eventData)
{


    //限制多选
    if (isUP)
    {
        lineObj = new GameObject("LineObj");
        lineObj.SetActive(false);

        lineObjRT = lineObj.AddComponent<RectTransform>();
        lineObjRT.pivot = new Vector2(0, 0.5f);
        lineObjRT.localScale = Vector3.one;

        lineObjImg = lineObj.AddComponent<Image>();
        lineObjImg.color = lineColor;
        lineObjImg.raycastTarget = false;

        lineObjRT.SetParent(transform);

        startPos = transform.position;

        lineObjRT.position = startPos;
        lineObjRT.sizeDelta = Vector2.zero;
        lineObj.SetActive(true);
    };


}
public void OnPointerUp(PointerEventData eventData)
{
    if (isUP)
    {
        if (eventData.pointerEnter != null)
        {
            GetObj = eventData.pointerEnter;

        }
        if (eventData.pointerEnter == null)
        {
            DestroyImmediate(lineObjRT.gameObject);
        }
    }
    if (eventData.button == PointerEventData.InputButton.Right)
    {
        DestoryAll();
        isUP = true;
    }

}
//销毁自身所有的线
void DestoryAll()
{
    for (int i = 0; i < transform.childCount; i++)
    {
        Destroy(transform.GetChild(i).gameObject);
    }

}

}

  • 写回答

1条回答 默认 最新

  • 周周的Unity小屋 2022-07-31 12:19
    关注

    你可以采用unity自动组件linerenderer来实现连线呀,这样撤销连线或一键取消连线也容易些

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 7月31日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题