首页 > 其他分享 >对象池

对象池

时间:2023-07-15 20:33:47浏览次数:26  
标签:poolDic obj name 对象 GameObject transform public

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


public class PoolData
{
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>() { obj };
}

public void PushObj(GameObject obj)
{
obj.SetActive(false);
//存起来
poolList.Add(obj);
//设置父对象
obj.transform.parent = fatherObj.transform;
poolList = new List<GameObject>() { obj };
obj.transform.parent = fatherObj.transform;
obj.SetActive(false);
}

public GameObject GetObj()
{
GameObject obj = null;
//取出第一个
obj = poolList[0];
poolList.RemoveAt(0);

obj.SetActive(true);
obj.transform.parent = null;
return obj;
}
}
public class PoolManager
{
private static PoolManager instance;

public static PoolManager Instance
{
get
{
if (instance == null)
{
instance = new PoolManager();
}
return instance;
}
}


public Dictionary<string, PoolData> poolDic = new Dictionary<string, PoolData>();

private GameObject pool;

/// <summary>
/// 获取对象
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public GameObject GetObj(string name)
{
GameObject obj = null;
if (poolDic.ContainsKey(name) && poolDic[name].poolList.Count > 0)
{
//有东西
obj = poolDic[name].GetObj();
}
else
{
//没有东西
obj = GameObject.Instantiate(Resources.Load<GameObject>(name));
obj.name = name;
}
return obj;
}

/// <summary>
/// 还回对象
/// </summary>
/// <param name="name"></param>
/// <param name="obj"></param>
public void PushObj(string name, GameObject obj)
{
if (pool == null)
pool = new GameObject("#Pool#");

obj.transform.parent = pool.transform;


obj.SetActive(false);
if (poolDic.ContainsKey(name))
{
poolDic[name].PushObj(obj);
}
else
{
poolDic.Add(name,new PoolData(obj,obj));
}
}

/// <summary>
/// 清空缓冲池的方法,主要用于切换场景
/// </summary>
public void Clear()
{
poolDic.Clear();
pool = null;
}
}

标签:poolDic,obj,name,对象,GameObject,transform,public
From: https://www.cnblogs.com/wl-2619/p/17556860.html

相关文章

  • 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作
    Redis是一个开源的、高性能的、基于内存的键值数据库,它支持多种数据结构,如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操作,如何使用Redis的散列(Hash)结构来缓存和查询对象的属性值,以及如何用Lambda表达式树来简化......
  • Perl学习笔记1_面向对象语法
    perl面向对象没有什么特别的语法,以例子介绍如下.例子中涉及三个文件:main.pl,AllPerson.pm,Person.pm.其中:main.pl是主脚本,它要用到AllPerson.pm.AllPerson.pm是一个class,它要用到Person.pm.Person.pm是一个class,存储人员信息.main.pl#!/usr/bin/perlusestr......
  • Spartacus Product List Page ProductSearchPage Observable 对象的设计明细
    源代码如下:readonlymodel$:Observable<ProductSearchPage>=using(()=>this.searchByRouting$.subscribe(),()=>this.searchResults$).pipe(shareReplay({bufferSize:1,refCount:true}));上面这段代码是基于Angular框架和RxJS库的,RxJS是一个用于处理......
  • 关于 Observable 对象调用 subscribe 方法时不传递任何参数值的用法讨论
    在RxJS中,subscribe方法是用于订阅Observable对象并接收数据的关键方法。通过subscribe方法,我们可以注册观察者(Observer)来处理Observable发出的数据、错误和完成信号。该方法接收三个可选的回调函数作为参数:next、error和complete。下面是subscribe方法的作用和示例......
  • Rxjs 里 Observable 对象的 tap 操作
    在RxJS中,tap操作符是一种用于在Observable流中插入额外的副作用操作的工具。它允许我们在数据流中进行调试、记录日志、执行辅助操作等,而不会改变原始的Observable数据流。tap操作符接收一个回调函数,该函数会在每个值通过Observable时被调用。tap操作符的使用场景有很......
  • 75.数组和对象有哪些原生方法,列举一下
    75.数组和对象有哪些原生方法,列举一下?数组和字符串的转换方法:toString()、toLocalString()、join()其中join()方法可以指定转换为字符串时的分隔符。数组尾部操作的方法pop()和push(),push方法可以传入多个参数。数组首部操作的方法shift()和unshift()重排序的方......
  • 134.Reflect对象创建目的
    134.Reflect对象创建目的?1.将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty,放到Reflect对象上。2.修改某些Object方法的返回结果,让其变得更合理。3.让Object操作都变成函数行为。4.Reflect对象的方法与Proxy对象的方法一一对应,只要是Prox......
  • Java创建对象的四种方式
    1.new创建新的对象Stringstr=newString("str");2.通过Java的反射机制publicstaticvoidmain(String[]args)throwsException{//获取类的Class对象Stringstr=(String)Class.forName("java.lang.String").newInstance();System.out.p......
  • 面向对象
    要想面向对象,操作对象,首先便要拥有对象;要创建对象,必须要先定义类,所谓的类可以理解为对象的模型;程序中可以根据类创建指定类型的对象;举例来说:可以通过Person类来创建人的对象,通过Dog类创建狗的对象,不同的类可以用来创建不同的对象;定义类class类名{属性名:类型;......
  • 面向对象 第三部分 继承和多态
    classAnimal(object):defrun(self):print('Animalisrunning...')classDog(Animal):defrun(self):#继承的好处:多态print('Dogisrunning...')defeat(self):print('Eatingmeat...')classCat(An......