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

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好,代码也耦合度也低,但是我有个简单的写法同样能实现一样的效果,所以我就充分发挥了一下主观能动性

相较于基本功能,这一版做出了如下改动

1.限制了对象池最大数量,多出来的要入池就会销毁掉

  // 最大容量private int maxCapacity = 100;

2.对生成出来的对象做出了二级分类更加清晰

 public void SetParent(string name, GameObject obj) {// 设置一级父对象if (poolObjF == null)poolObjF = new GameObject("一级分类");// 查找或创建二级父对象if (!poolObjS.ContainsKey(name)) {//创建临时物体当作二级分类空对象,之后添加到字典中GameObject tempObj = new GameObject("二级分类" + name);tempObj.transform.parent = poolObjF.transform;poolObjS[name] = tempObj;}obj.transform.parent = poolObjS[name].transform;}

98e18a00ff7a4b409b6f1ac7c7ecd596.gif

3.优化了清空池的方法

 public void ClearPool() {foreach (var item in pool) {foreach (var obj in item.Value) {GameObject.Destroy(obj);}}pool.Clear();poolObjF = null;poolObjS.Clear();}

4.添加了处理其他逻辑的函数,可以写一些重置AI状态的逻辑,会在拿出物体的时候调用

   /// <summary>/// 处理其他事情的逻辑可以写在这里面,比如重置怪物血量等/// </summary>public void OtherThing(){ }

 

5.切换场景不销毁池物品调用方法即可

    //public void DontDestoryPool(GameObject gameObject)//    {//   GameObject.DontDestroyOnLoad(gameObject);//}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyPool : SingleBase<MyPool> {// 一级父对象private GameObject poolObjF;// 二级父对象字典private Dictionary<string, GameObject> poolObjS = new Dictionary<string, GameObject>();// 抽屉字典 string => 物品名字,List => 具体物品public Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>();// 最大容量private int maxCapacity = 100;/// <summary>/// 得到对象池中的物品/// </summary>/// <param name="path">预制体路径</param>/// <returns></returns>public GameObject GetObj(string path) {GameObject obj = null;// 如果有该物体,从抽屉中取出,如果没有则创建一个if (pool.ContainsKey(path) && pool[path].Count > 0) {obj = pool[path][0];pool[path].RemoveAt(0);}else {obj = GameObject.Instantiate(Resources.Load<GameObject>(path));obj.name = path;}obj.SetActive(true);//OtherThing();return obj;}/// <summary>/// 向对象池放回物品/// </summary>/// <param name="name">要放回的抽屉名</param>/// <param name="obj">要放回的物品对象</param>public void PutBackObj(string name, GameObject obj) {SetParent(name, obj);obj.SetActive(false);// 如果有抽屉则放回去,没有则新建一个抽屉放进去,同时注意限制最大数量if (pool.ContainsKey(name)) {if (pool[name].Count < maxCapacity) {pool[name].Add(obj);}else {GameObject.Destroy(obj);}}else {pool.Add(name, new List<GameObject>() { obj });}}public void SetParent(string name, GameObject obj) {// 设置一级父对象if (poolObjF == null)poolObjF = new GameObject("一级分类");// 查找或创建二级父对象if (!poolObjS.ContainsKey(name)) {//创建临时物体当作二级分类空对象,之后添加到字典中GameObject tempObj = new GameObject("二级分类" + name);tempObj.transform.parent = poolObjF.transform;poolObjS[name] = tempObj;}obj.transform.parent = poolObjS[name].transform;}public void ClearPool() {foreach (var item in pool) {foreach (var obj in item.Value) {GameObject.Destroy(obj);}}pool.Clear();poolObjF = null;poolObjS.Clear();}/// <summary>/// 处理其他事情的逻辑可以写在这里面,比如重置怪物血量等/// </summary>public void OtherThing(){ }
}

 

 

相关文章:

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好&#xff0c;代码也耦合度也低&#xff0c;但是我有个简单的写法同样能实现一样的效果&#xff0c;所以我就充分发挥了一下主观能动性 相较于基本功能&#xff0c;这一版做出了如下改动 1.限制了对象池最大数量&#xff0c;多出来的…...

vue3<script setup>中computed

在 Vue 3 中&#xff0c;<script setup> 语法糖是 Composition API 的一种简化写法&#xff0c;它允许你更简洁地编写组件逻辑。在 <script setup> 中使用 computed 与在普通 <script> 标签中使用 Composition API 的方式类似&#xff0c;但通常我们会借助 i…...

【已解决】使用JAVA语言实现递归调用-本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。

本关任务&#xff1a;用循环和递归算法求 n&#xff08;小于 10 的正整数&#xff09; 的阶乘 n!。 测试说明 平台会对你编写的代码进行测试&#xff0c;比对你输出的数值与实际正确数值&#xff0c;只有所有数据全部计算正确才能通过测试&#xff1a; 测试输入&#xff1a;1…...

BiRefNet 教程:基于 PyTorch 实现的双向精细化网络

BiRefNet 教程&#xff1a;基于 PyTorch 实现的双向精细化网络 BiRefNet 是一个图像分割网络&#xff0c;专注于复杂任务如背景移除、掩码生成、伪装物体检测、显著性目标检测等。该模型结合了编码器、解码器、多尺度特征提取、以及梯度监督机制&#xff0c;能够有效处理不同类…...

Oracle 数据库安装和配置指南(新)

目录 1. 什么是Oracle数据库&#xff1f; 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量&#xff08;Linux&#xff09; 4.…...

JavaScript的注释与常见输出方式

注释 源码中注释是不被引擎所解释的&#xff0c;它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释&#xff0c;用//起头;另一种是多行注释&#xff0c;放在/*和*/之间。 单行注释&#xff1a; //这是单行注释 多行注释&#xff1a; /*这是 多行 注…...

深入探索Android开发之Java核心技术学习大全

Android作为全球最流行的移动操作系统之一&#xff0c;其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Java核心技术学习资料&#xff0c;包括详细的学习大纲、PDF文档、源代码以及配套视频教程&#xff0c;帮助您从Java基础到高级特性&#xff0c;再到A…...

vue3 选择字体的颜色,使用vue3-colorpicker来选择颜色

1、有的时候我们会用到颜色的选择器&#xff0c;像element-plus提供了&#xff0c;但是ant-design-vue并没有&#xff1a; 这个暂时没有看到&#xff1a; 但是Ant Design 5的版本有&#xff0c;应该不是vue的。 2、使用第三方提供的vue3-colorpicker&#xff1a;storybook/cli…...

windows C++ 并行编程-使用消息块筛选器

本文档演示了如何使用筛选器函数&#xff0c;使异步消息块能够根据消息的有效负载接受或拒绝消息。 创建消息块对象(例如 concurrency::unbounded_buffer、concurrency::call 或 concurrency::transformer)时&#xff0c;可以提供筛选器函数&#xff0c;用于确定消息块是接受还…...

【mysql技术内幕】

MySQL之技术内幕 1.MVCC模式2. 实现mvcc模式的基础点3.MySQL锁的类型4. 说下MySQL的索引有哪些吧&#xff1f;5. 谈谈分库分表6. 分表后的id咋么保证唯一性呢&#xff1f;7. 分表后非sharding key的查询咋么处理的&#xff1f; 1.MVCC模式 MVCC, 是multi-version concurrency c…...

快递物流单号识别API接口DEMO下载

单号识别API为用户提供单号识别快递公司服务&#xff0c;依托于快递鸟大数据平台&#xff0c;用户提供快递单号&#xff0c;即可实时返回可能的一个或多个快递公司&#xff0c;存在多个快递公司结果的&#xff0c;大数据平台根据可能性、单号量&#xff0c;进行智能排序。 应用…...

Jetpack——Room

概述 Room是谷歌公司推出的数据库处理框架&#xff0c;该框架同样基于SQLite&#xff0c;但它通过注解技术极大简化了数据库操作&#xff0c;减少了原来相当一部分编码工作量。在使用Room之前&#xff0c;要先修改模块的build.gradle文件&#xff0c;往dependencies节点添加下…...

Dynamic Connected Networks for Chinese Spelling Check(ACL2021)

Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一&#xff0e;概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系&#xff0c;从而导致了不连贯的问题。为些&#xff0c…...

前端vue-3种生命周期,只能在各自的领域使用

上面的表格可以简化为下面的两句话&#xff1a; setup是语法糖&#xff0c;下面的两个import导入是vue3和vue2的区别&#xff0c;现在的vue3直接导入&#xff0c;比之前vue2简单 还可以是导入两个生命周期函数...

el-upload如何自定展示上传的文件

Element UI 中&#xff0c;el-upload 组件支持通过插槽&#xff08;slot&#xff09;来自定义文件列表的展示方式。这通常是通过 file-list 插槽来实现的。下面是一个使用 el-upload 组件并通过 file-list 插槽来自定义文件列表展示的完整示例代码。 在这个示例中&#xff0c;…...

研1日记15

1. 文心一言生成&#xff1a; 在PyTorch中&#xff0c;nn.AdaptiveAvgPool1d(1)是一个一维自适应平均池化层。这个层的作用是将输入的特征图&#xff08;或称为张量&#xff09;在一维上进行自适应平均池化&#xff0c;使得输出特征图的大小在指定的维度上变为1。这意味着&…...

基于Nginx搭建点播直播服务器

实现直播和点播离不开服务器⽀持&#xff0c;可以使用开源的NGINX服务器搭建直播和点播服务。 当然&#xff0c;NGINX本身是不⽀持视频的&#xff0c;需要为NGINX增加相应的RTMP模块进行支持。 1、下载nginx和rtmp模块 # nginx wget ht tp://nginx.org/download/nginx-1.18.…...

QT LineEdit显示模式

QT LineEdit显示模式 QLineEdit 显示模式:   Normal 普通模式   NoEcho 不回写&#xff0c;即输入内容是有的&#xff0c;但是显示不出来,就是不在 QLineEdit 输入框中显示&#xff0c;但是触发例如 textChanged 信号会将所输入的文字写出来   Password 显示密码   Pa…...

IT技术在数字化转型中的关键作用

IT技术在数字化转型中的关键作用 在当今数字化浪潮中&#xff0c;IT技术无疑扮演着核心角色。无论是企业的数字化转型&#xff0c;还是政府公共服务的智能化提升&#xff0c;信息技术都在推动着整个社会向更高效、更智能的方向发展。本文将探讨IT技术在数字化转型中的关键作用…...

【C++指南】C++中nullptr的深入解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、nullptr的引入背景 二、nullptr的特点 1.类型安全 2.明确的空指针表示 3.函数重载支…...

10分钟带你完成:Claude Code CC Switch 接入DeepSeek-V4

文章目录概要环境要求整体流程概要 本项目在 Windows 环境下&#xff0c;如何让强大的 AI 编程助手 Claude Code​ 成功“变身”&#xff0c;接入国产顶尖大模型 DeepSeek-V4。通过利用 DeepSeek 的 API 兼容性&#xff0c;不仅保留了 Claude Code 极致的终端交互体验&#xf…...

SystemC随机验证环境构建:从约束生成到覆盖率驱动的自动化测试

1. 项目概述&#xff1a;从确定性仿真到随机验证的跨越在芯片设计和验证领域&#xff0c;SystemC 早已不是陌生的名字。它作为 C 的类库扩展&#xff0c;为系统级建模和硬件/软件协同验证提供了强大的框架。然而&#xff0c;很多刚接触 SystemC 验证的朋友&#xff0c;往往止步…...

Grounding DINO:从零解析跨模态开放集检测的架构革新与实战

1. 开放集检测的革命&#xff1a;为什么需要Grounding DINO&#xff1f; 当你在手机相册里搜索"海边日落"时&#xff0c;传统视觉模型只能匹配预设的"沙滩""太阳"等标签&#xff0c;而Grounding DINO却能真正理解语义——这就是开放集检测的魅力…...

异步分布式k-mer计数算法DAKC解析与优化

1. 异步分布式k-mer计数算法解析 k-mer计数是基因组分析中的基础操作&#xff0c;它统计DNA序列中所有长度为k的子串出现频率。这项技术在基因组组装、宏基因组分析等场景中扮演着关键角色。传统方法在处理大规模数据时面临性能瓶颈&#xff0c;而分布式异步算法DAKC通过创新设…...

不懂PMP的项目经理,正在被AI和敏捷时代淘汰

一、一个正在发生的残酷事实 张伟是一家传统制造企业的项目经理&#xff0c;拥有十年工作经验。他的日常工作是这样的&#xff1a;每天早上整理Excel进度表&#xff0c;中午开会协调资源&#xff0c;晚上更新甘特图&#xff0c;睡前发送项目周报。他觉得自己很忙、很重要。 直到…...

离谱!上海交大一学生私吞 5000 奖金,还用豆包 P 假收据骗队友。网友:学历虽高但人品太低

①5 月 18 日&#xff0c;上海交大一则学生违纪通报冲上热搜&#xff0c;实锤了前几天网上曝光的一名学生侵占团队竞赛奖金、造假欺骗队友的恶劣行为。②在 2025 下半年&#xff0c;樊同学&#xff08;上交大智慧能源学院女生&#xff09;与 K 同学&#xff08;电院男生&#x…...

保姆级教程:解决PyTorchViz安装报错,手把手教你用AlexNet模型可视化

PyTorch模型可视化实战&#xff1a;从安装报错到AlexNet结构解析全指南 在深度学习模型开发过程中&#xff0c;可视化工具如同开发者的"第二双眼睛"。PyTorchViz作为PyTorch生态中轻量级但功能强大的可视化工具&#xff0c;能直观展示模型的计算图结构&#xff0c;帮…...

完整 Ubuntu 服务器 XFCE 桌面 + XRDP 远程桌面 部署使用全流程

一、系统初始化 & 基础依赖安装bash# 更新系统sudo apt update && sudo apt upgrade -y# 安装必备依赖sudo apt install wget curl libfuse2 libxcb-xinput0 libxkbfile1 libssl-dev lrzsz -y二、安装 XFCE 轻量图形桌面bash# 完整安装XFCE桌面环境sudo apt instal…...

机器学习中的过拟合与欠拟合:如何解决模型泛化问题

在人工智能技术飞速发展的当下&#xff0c;机器学习模型在软件测试领域的应用愈发广泛&#xff0c;从自动化测试用例生成到缺陷预测&#xff0c;再到性能瓶颈分析&#xff0c;都离不开机器学习的助力。然而&#xff0c;模型的泛化能力始终是制约其在实际测试场景中发挥作用的关…...

MIPI CSI调试实战:从时序不稳到稳定传输,我调了这三个关键点

MIPI CSI调试实战&#xff1a;从时序不稳到稳定传输的三大关键突破 调试MIPI CSI接口就像在解一道复杂的物理方程&#xff0c;每一个变量都可能成为图像花屏或数据丢包的罪魁祸首。去年在为一款工业摄像头模组开发驱动时&#xff0c;我遇到了令人抓狂的随机性图像撕裂问题——在…...