随机生成UI不重叠

news2026/4/2 3:04:02

注释

简单的随机生成UI且不发生重叠,可以修改算法进行更深入的探索

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CellInfo
{
    /// <summary>
    /// 物体位置
    /// </summary>
    public Vector2 pos;
    /// <summary>
    /// 物体宽
    /// </summary>
    public float width;
    /// <summary>
    /// 物体高
    /// </summary>
    public float height;
}


/// <summary>
/// 屏幕随机生成文字并不叠加
/// </summary>

public class TextTest : MonoBehaviour
{
    /// <summary>
    /// 外面的父级
    /// </summary>
    public RectTransform parent;
    /// <summary>
    /// 想要显示的子物体集合
    /// </summary>
    [Header("想要显示的子物体集合")]
    public List<GameObject> cells = new List<GameObject>();
    /// <summary>
    /// 已经存在的子物体信息
    /// </summary>
    private List<CellInfo> hadCells = new List<CellInfo>();
    /// <summary>
    /// 最大尝试的次数
    /// </summary>
    [Header("最大尝试的次数")]
    public int maxIndex;


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(CreateGameObject());
        }
    }

    /// <summary>
    /// 生成图片
    /// </summary>
    /// <returns></returns>
    public IEnumerator CreateGameObject()
    {
        int i = 0;
        while (i < cells.Count)
        {
            float ItmeWidth = cells[i].GetComponent<RectTransform>().rect.width / 2;
            float ItmeHeigh = cells[i].GetComponent<RectTransform>().rect.height / 2;

            Vector2 cellPos = new Vector2(Random.Range(ItmeWidth, parent.rect.width - ItmeWidth),
                Random.Range(ItmeHeigh, parent.rect.height - ItmeHeigh));
            //尝试更新新坐标的次数
            int index = 0;
            while (index < maxIndex)
            {
                if (i == 0 || (i != 0 && TwoPointDistance2D2(cellPos, ItmeWidth, ItmeHeigh)))
                {
                    CellInfo cellinfo = new CellInfo();
                    cellinfo.pos = cellPos;
                    cellinfo.width = ItmeWidth;
                    cellinfo.height = ItmeHeigh;
                    hadCells.Add(cellinfo);
                    GameObject obj = Instantiate<GameObject>(cells[i], parent);
                    obj.GetComponent<RectTransform>().position = cellPos;
                    break;
                }
                index++;
            }
            i++;
            yield return null;
        }
    }

    /// <summary>
    /// 进行距离比较
    /// </summary>
    /// <param name="p1"></param>
    /// <param name="p2"></param>
    /// <returns></returns>
    private bool TwoPointDistance2D2(Vector2 currentPos, float w, float h)
    {
        float x1 = currentPos.x - w;
        float x2 = currentPos.x + w;
        float y1 = currentPos.y - h;
        float y2 = currentPos.y + h;

        for (int i = 0; i < hadCells.Count; i++)
        {
            float x11 = hadCells[i].pos.x - hadCells[i].width;
            float x22 = hadCells[i].pos.x + hadCells[i].width;
            float y11 = hadCells[i].pos.y - hadCells[i].height;
            float y22 = hadCells[i].pos.y + hadCells[i].height;

            if ((x2 < x11 || x1 > x22) && (y1 > y22 || y2 < y11))
            {
                continue;
            }
            else
            {
                return false;
            }
        }
        return true;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1417909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MYSQL基本查询(CURD:创建、读取、更新、删除)

文章目录 前言一、Create1.全列插入2.指定列插入3.插入否则更新4.替换 二、Retrieve1.SELECT列2.WHERE条件3.结果排序4.筛选分页结果 三、Update四、Delete1.删除数据2.截断表 五、插入查询结果六、聚合函数 前言 操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型…

用友U9 PatchFile.asmx 任意文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

CC攻击类型有几种?有什么有用的防御方法?

CC攻击&#xff08;Challenge Collapsar Attack&#xff09;是一种复杂的网络攻击&#xff0c;它利用了一种分布式拒绝服务攻击工具来发动攻击。这种攻击方式通常由黑客组织或恶意竞争者发起&#xff0c;旨在破坏目标网络或系统的正常运行。 CC攻击的核心在于使用大量的虚假请…

如何选择便捷安全的黄金交易平台?

黄金交易平台的介绍 黄金交易平台是一个提供方便、安全的方式进行黄金交易的网上平台。 投资者可以通过这些平台进行黄金的买卖&#xff0c;参与黄金市场的投资活动。 这些平台提供了一个简单易用的界面&#xff0c;让投资者可以方便地进行交易操作。 选择合适的黄金交易平台…

Kafka-服务端-GroupMetadataManager

GroupMetadataManager是GroupCoordinator中负责管理Consumer Group元数据以及其对应offset信息的组件。 GroupMetadataManager底层使用Offsets Topic,以消息的形式存储Consumer Group的GroupMetadata信息以及其消费的每个分区的offset,如图所示。 consumer_offsets的某Partiti…

LLM之Agent(九)| 通过API集成赋能Autogen Multi-Agent系统

随着大型语言模型的快速发展&#xff0c;构建基于LLM驱动的自治代理&#xff08;autonomous agents&#xff09;已经成为一个备受关注的话题。仅在过去一年中&#xff0c;就出现了许多基于这一理念的新技术和框架。 ​ 本文将探索微软开源的Agent框架&#xff1a;Autogen…

259:vue+openlayers: 显示海量多边形数据,10ms加载完成

第259个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。 本示例数据为5000个多边形,加载速度超级快。 直接…

D35XB80-ASEMI整流桥D35XB80参数、封装、尺寸

编辑&#xff1a;ll D35XB80-ASEMI整流桥D35XB80参数、封装、尺寸 型号&#xff1a;D35XB80 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-5 最大重复峰值反向电压&#xff1a;800V 最大正向平均整流电流(Vdss)&#xff1a;35A 功率(Pd)&#xff1a; 芯片个数&#xff1…

Web 开发 6:Redis 缓存(Flask项目使用Redis并同时部署到Docker详细流程 附项目源码)

大家好&#xff01;欢迎来到第六篇 Web 开发教程&#xff0c;今天我们将探讨一个非常重要的话题&#xff1a;Redis 缓存。作为一个互联网开发者&#xff0c;你一定知道在处理大量请求时&#xff0c;性能优化是至关重要的。而 Redis 缓存正是帮助我们提升系统性能的利器。Redis …

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

MATLAB环境下一种贝叶斯稀疏盲反卷积算法

稀疏盲反卷积贝叶斯估计方法通常使用伯努利-高斯分布(BG)先验的稀疏序列建模&#xff0c;并利用马尔可夫链蒙特卡罗(MCMC)方法进行未知估计。然而&#xff0c;BG模型的离散性会有计算瓶颈。为了解决这个问题&#xff0c;提出一个替代方案&#xff0c;采用MCMC方法对稀疏序列进行…

Mac下查看、配置和使用环境变量

Mac下查看、配置和使用环境变量 一&#xff1a;Mac怎么查看环境变量命令 printenv一&#xff1a;这个命令会一次性列出所有环境变量的键值对&#xff0c;输出格式为&#xff1a; VAR1value1 VAR2value2 ...二&#xff1a; 也可以通过给这个命令加上环境变量名参数&#xff0…

Linux CPU 负载说明

一、背景 工作中我们经常遇到CPU 负载高&#xff0c;CPU负载高意味着什么&#xff1f; CPU的负载是怎么计算的&#xff1f; top指令中的各个指标代表什么含义&#xff1f; 二、CPU 负载计算方法 在系统出现负载问题&#xff0c;通常会使用uptime和top确认负载&#xff0c;这两…

云微呼云呼叫中心:颠覆传统客户服务模式的数字化创新

1. 引言 随着云计算技术的不断成熟和普及&#xff0c;云呼叫中心作为一种全新的客户服务解决方案&#xff0c;正在以其高效、灵活和智能的特点&#xff0c;逐渐颠覆传统的客户服务模式。本文将深入探讨云呼叫中心的定义、特点、优势以及对企业的重要意义。 2. 云呼叫中心的定…

龙行龘龘•前程朤朤 | 联诚发2023年度述职大会与年会圆满举行

1月27日上午&#xff0c;以“不忘初心・砥砺前行”为主题的2023年度述职大会在联诚发深圳总部隆重举行&#xff0c;本次大会总结了过去一年的成就与不足&#xff0c;展望了未来一年的方向和目标。联诚发创始人兼总裁龙平芳、董秘毛强军、各部门负责人以及深圳总部全体职工出席了…

JSP概述和基本使用

1&#xff0c;JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS等静态内容&#xff0c;还可以定义 Java代码的动态内容&#xff0c;也就是 JSP HTML Jav…

LabVIEW探测器CAN总线系统

介绍了一个基于FPGA和LabVIEW的CAN总线通信系统&#xff0c;该系统专为与各单机进行系统联调测试而设计。通过设计FPGA的CAN总线功能模块和USB功能模块&#xff0c;以及利用LabVIEW开发的上位机程序&#xff0c;系统成功实现了CAN总线信息的收发、存储、解析及显示功能。测试结…

【更新】省级产业结构合理化+高度化+高级化数据(2000-2022年)

数据指标测算&#xff1a; &#xff08;1&#xff09;参考袁航等人&#xff08;2018&#xff09;的测算方法&#xff0c;采用泰尔指数来衡量产业结构合理化指标&#xff0c;用产业结构层次系数来表示产业结构高度化指标&#xff1a; &#xff08;2&#xff09;参考张欣艳等人&…

免费分享一套微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序外卖跑腿点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现) &#xff0c;分享下哈。 项目视频演示 【免费】微信小程序外卖跑腿点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现)…

解锁亚马逊鲲鹏系统奥秘:自动生成AI角色,随心定制养号计划

亚马逊鲲鹏系统是一款强大的软件&#xff0c;是一款可以批量注册亚马逊买家账号并能自动化养号的软件。其独特的功能和操作流程使得用户能够轻松管理多个账号&#xff0c;实现高效的运营和管理。 首先&#xff0c;该软件提供了AI智能养号功能&#xff0c;用户可以自动生成具有真…