当前位置: 首页 > news >正文

[Unity]在场景中随机生成不同位置且不重叠的物体

1.前言

最近任务需要用到Unity在场景中随机生成物体,且这些物体不能重叠,简单记录一下。

参考资料:How to ensure that spawned targets do not overlap ?

2.结果与代码

结果如下所示:
在这里插入图片描述

代码如下所示:

using System.Collections.Generic;
using UnityEngine;namespace Assets.Scripts
{public class NewMonoBehaviour : MonoBehaviour{public GameObject objectForSpawn;private List<SpawnObject> spawnObjectList;private int objectCount = 50;private void Start(){CreateCollections();Generate(objectCount);}void CreateCollections(){spawnObjectList = new List<SpawnObject>();}void Generate(int objectCount){CreateObjects();void CreateObjects(){for (int i = 0; i < objectCount; i++){Vector3 objectPosition = GetPosition();SpawnObject sO = new SpawnObject(objectPosition);spawnObjectList.Add(sO);}}     SpawnGameObjects();void SpawnGameObjects(){List<SpawnObject> spawnedObjects = new List<SpawnObject>();List<SpawnObject> notSpawnedObjects = new List<SpawnObject>();foreach (SpawnObject item in spawnObjectList){Vector3 spawnPosition = GetPosition();if (item.objectPosition != spawnPosition){Instantiate(objectForSpawn, spawnPosition, transform.rotation);spawnedObjects.Add(item);}else{notSpawnedObjects.Add(item);}}Debug.Log("Object spawned :" + spawnedObjects.Count);Debug.Log("Object notSpawned :" + notSpawnedObjects.Count);}}Vector3 GetPosition(){Vector3 randmPosition;randmPosition.x = Random.Range(1, 100);randmPosition.y = Random.Range(1, 100);randmPosition.z = Random.Range(1, 100);return randmPosition;}}public class SpawnObject{public Vector3 objectPosition;public SpawnObject(Vector3 objectPosition){this.objectPosition = objectPosition;}}
//In case you want serialize this position for example for save you better use float[3] for position then vector.
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#-了解ORM框架SqlSugar并巧妙使用(附相关数据库工具)
  • 数据结构——排序(2):选择排序+交换排序
  • 算法力扣刷题记录 六十九【动态规划基础及509. 斐波那契数】
  • 鸿蒙AI功能开发【文档扫描控件】 场景识别服务
  • 【c++学习技术栈】
  • 如何利用现成的网络抓取工具提高效率和生产力
  • [kimi笔记]为什么csc.exe不可以双击运行
  • Java面试题(基础篇)②
  • 攻击者劫持 Facebook 页面用于推广恶意 AI 照片编辑器
  • 将nestjs项目迁移到阿里云函数
  • 【开端】通过Java 过滤器灵活配置URL访问权限,并返回403
  • 浅谈基础的图算法——Tarjan求强联通分量算法(c++)
  • 本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏
  • java学习笔记 VSCode
  • Promethues Metrics
  • JavaScript 如何正确处理 Unicode 编码问题!
  • (三)从jvm层面了解线程的启动和停止
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CentOS7简单部署NFS
  • classpath对获取配置文件的影响
  • codis proxy处理流程
  • Joomla 2.x, 3.x useful code cheatsheet
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 分布式事物理论与实践
  • 给初学者:JavaScript 中数组操作注意点
  • 坑!为什么View.startAnimation不起作用?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法-插入排序
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 交换综合实验一
  • ​io --- 处理流的核心工具​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #### go map 底层结构 ####
  • #laravel 通过手动安装依赖PHPExcel#
  • (1)Android开发优化---------UI优化
  • (2)nginx 安装、启停
  • (8)STL算法之替换
  • (ZT)一个美国文科博士的YardLife
  • (二)WCF的Binding模型
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 中的轻量级线程安全
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • /var/lib/dpkg/lock 锁定问题
  • @font-face 用字体画图标
  • @取消转义
  • [20150707]外部表与rowid.txt
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • [BJDCTF2020]EzPHP1