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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?