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

【Unity程序技巧】异步保险箱管理器

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==II==)<font color=green >涉及知识点
    • 🎶(==W==) 异步保险箱管理器
        • 1.知识点
        • 2.特点
        • 3.脚本
    • 🅰️


前言


🎶(II涉及知识点


  • List泛型类
    在这里插入图片描述
    在这里插入图片描述

  • Dictionary泛型类

在这里插入图片描述
在这里插入图片描述

  • hashtable的遍历 和 Dictionary 遍历API的区别对比
    +

🎶(W 异步保险箱管理器


1.知识点

在这里插入图片描述

2.特点

  • 由两个部分组成:保险箱数据 和 缓存池管理器
  • 减少了GC的回收,提高了性能,实现了闭环
  • 代码自动创建对象
  • 首先得再面板中创建衣柜对象,而后会由代码进行保险箱的创建
  • 用异步加载是因为考虑到有大资源的情况下
  • 缺点:现在的这个只能放GameObject类型的资源


当音乐管理器需要把音频资源放入缓存池时,此时的缓存池不足以支持存取,因为此时只能存取GameObject类型的资源,需要进行修改,有两个办法:
1.将其变成泛型(1.用到泛型占位符,2.用到泛型约束)
2.将其重载

3.脚本

//缓存池管理器
public class BoxManager: SingleManager<BoxManager>
{//缓存池里面存保险箱public Dictionary<string, PoolData> poolDic = new Dictionary<string, PoolData>();private GameObject poolObj;public void GetObj(string name, UnityAction<GameObject> callBack){//有箱子并且箱子里有东西if (poolDic.ContainsKey(name) && poolDic[name].poolList.Count > 0){callBack(poolDic[name].GetObj());}else{//异步加载ResourceManager.GetInstance().LoadAsync<GameObject>(name, (o) =>{o.name = name;callBack(o);});}}//放东西进箱子public void PushObj(string name, GameObject obj){if (poolObj == null) //防止报错poolObj = new GameObject("Pool");if (poolDic.ContainsKey(name)){poolDic[name].PushObj(obj);}else{poolDic.Add(name, new PoolData(obj, poolObj));}}//清空缓存池——在场景切换时public void Clear(){poolDic.Clear();poolObj = null;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;//缓存池保险箱
public class BoxData
{//保险箱的名字public GameObject fatherObj;//保险箱的容器public List<GameObject> poolList;public PoolData(GameObject obj, GameObject poolObj){fatherObj = new GameObject(obj.name);fatherObj.transform.parent = poolObj.transform;poolList = new List<GameObject>() {};PushObj(obj);}//放进箱子public void PushObj(GameObject obj){obj.SetActive(false);poolList.Add(obj);obj.transform.parent = fatherObj.transform;}//从箱子中取出public GameObject GetObj(){GameObject obj = null;obj = poolList[0];    //取出箱子容器中的第一个poolList.RemoveAt(0); //然后容器中移除       obj.SetActive(true);      obj.transform.parent = null;  //断开了父子关系return obj;}
}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


http://www.lryc.cn/news/204520.html

相关文章:

  • ChatGPT 助力英文论文翻译和润色
  • 【2024秋招】腾讯云智武汉后端开发一面 2023-9-20
  • k8s-----16、配置管理-ConfigMap
  • QML QTP0001 not set 警告
  • Mac M1编译 swift 5.8.1源码
  • [极客大挑战 2019]EasySQL
  • 统信UOS技术开放日:四大领域全面接入AI大模型能力
  • 【Linux系统编程:信号】产生信号 | 阻塞信号 | 处理信号 | 可重入函数
  • Linux NFS的整体架构与核心代码解析
  • 28、Flink 的SQL之DROP 、ALTER 、INSERT 、ANALYZE 语句
  • 正则表达式[总结]
  • 【docker】搭建xxl-job
  • k8s-----3、kubernetes集群部署(kubeadm部署)
  • 党建展馆vr仿真解说员具有高质量的表现力和互动性
  • Webpack 基础以及常用插件使用方法
  • ROCESS SPID 代表什么进程
  • oracle rac了解
  • 力扣 -- 44. 通配符匹配
  • 电脑msvcp100.dll丢失的解决办法,靠谱的五个解决方法分享
  • HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)
  • VS Code C# 开发工具包正式发布
  • 【计算机网络】HTTPS 的加密流程
  • 若依和芋道
  • Linux流量监控
  • 高流量大并发Linux TCP性能调优
  • ATT 格式汇编语言语法
  • Linux系统编程学习 NO.8 ——make和Makefile、进度条程序
  • elementUI 中 date-picker 的使用的坑(vue3)
  • 1-07 React配置postcss-px-to-viewport
  • ITSource 分享 第3期【在线个人网盘】