区块链技术博客
www.b2bchain.cn

Unity 游戏框架搭建 2019 (六十) PoolManager求职学习资料

本文介绍了Unity 游戏框架搭建 2019 (六十) PoolManager求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

OK, 那我们过到下⼀个话题,什么叫做pool manager,我们现在知道市⾯上现在最火爆的就是各种各样的 MMO 的游戏,那么这种以 RPG,Role Playing为主,在很多时候这里的游戏都遇到需要频繁的去创建一些⻆色或者说是一些 NPC 、怪物等这些东西,那么一个最 Low 的做法就是我们每创建⼀个怪物的时候我们把角色 Create 进来,那么不⽤的时候就 Destroy 掉,那么这样以来就相当于从我们的应⽤里面把它 Load 到我们的内存中来,然后 Destroy 再把它释放掉,如果下次再遇到⼀个这样的NPC,就再重新这样做⼀次。那么这个过程本身它可能并不是很慢,如果用 c++ 来做的话这个机制可能没有太多问题,但是因为如果你采⽤用 C# 脚本,就涉及到一个 GC 的问题,这个过程是 一个⾮非常耗时的过程,所以我们说这样的一个⾏为是绝对不要做的。那么这样的结果就是我们去创建⼀个我们⾃己的 PoolManager。

那么怎么设计呢?

我们说有⼀种⾮常⾮常简单的设计,就是说我每⼀次能不能把我的⼀些已经 Load 到内存中的资源不要⻢上就把它 Destroy 掉,⽽是先把它放在⼀个池⼦⾥备用, 如果下一次再需要同样的东西,我就把它拿出来,⾮常⾮常简单的⼀个想法,如果你具备了这样的一个想法,那么我说你的这样的⼀个设计就可以应付大多数小型规模的游戏了。

那么做法怎么做呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
我们只要在你的程序⾥面加上⼀一行代码:

List<GameObject> dormantOnjects = new List<GameObject>();

代码中 dormant 意思是: 暂时不用的

有这么⼀个东西,凡是你⽤过一次暂时不用的东西,就把它扔到这个池⼦⾥面去。
我们会有两个典型的操作,⼀个叫 Spawn,⼀个叫做 Despawn。

Spawn 是什么意思呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
那么 Despawn 是什么意思呢?

如果说我现在有一个东⻄首次 Load 进来⽤完了,不要把它立刻 Destroy 掉,而是要把它放到这个池⼦里去。

OK,这两步了解之后,我们还要有一个 Trim 的操作,我们的池⼦不可能无限的⼤大,我把它定义一个尺⼨,比方说我最多只能装 100 个 NPC,超过这个数字的时候,因为放进去的时候是有顺序 的,0,1,2,3,4,5⼀一直到99,多了之后呢就把前⾯面的第 0 个,第 1 个,第 2 个推出去,这是⼀个队列的概念,先进先出。
Unity 游戏框架搭建 2019 (六十) PoolManager

OK, 那我们过到下⼀个话题,什么叫做pool manager,我们现在知道市⾯上现在最火爆的就是各种各样的 MMO 的游戏,那么这种以 RPG,Role Playing为主,在很多时候这里的游戏都遇到需要频繁的去创建一些⻆色或者说是一些 NPC 、怪物等这些东西,那么一个最 Low 的做法就是我们每创建⼀个怪物的时候我们把角色 Create 进来,那么不⽤的时候就 Destroy 掉,那么这样以来就相当于从我们的应⽤里面把它 Load 到我们的内存中来,然后 Destroy 再把它释放掉,如果下次再遇到⼀个这样的NPC,就再重新这样做⼀次。那么这个过程本身它可能并不是很慢,如果用 c++ 来做的话这个机制可能没有太多问题,但是因为如果你采⽤用 C# 脚本,就涉及到一个 GC 的问题,这个过程是 一个⾮非常耗时的过程,所以我们说这样的一个⾏为是绝对不要做的。那么这样的结果就是我们去创建⼀个我们⾃己的 PoolManager。

那么怎么设计呢?

我们说有⼀种⾮常⾮常简单的设计,就是说我每⼀次能不能把我的⼀些已经 Load 到内存中的资源不要⻢上就把它 Destroy 掉,⽽是先把它放在⼀个池⼦⾥备用, 如果下一次再需要同样的东西,我就把它拿出来,⾮常⾮常简单的⼀个想法,如果你具备了这样的一个想法,那么我说你的这样的⼀个设计就可以应付大多数小型规模的游戏了。

那么做法怎么做呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
我们只要在你的程序⾥面加上⼀一行代码:

List<GameObject> dormantOnjects = new List<GameObject>();

代码中 dormant 意思是: 暂时不用的

有这么⼀个东西,凡是你⽤过一次暂时不用的东西,就把它扔到这个池⼦⾥面去。
我们会有两个典型的操作,⼀个叫 Spawn,⼀个叫做 Despawn。

Spawn 是什么意思呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
那么 Despawn 是什么意思呢?

如果说我现在有一个东⻄首次 Load 进来⽤完了,不要把它立刻 Destroy 掉,而是要把它放到这个池⼦里去。

OK,这两步了解之后,我们还要有一个 Trim 的操作,我们的池⼦不可能无限的⼤大,我把它定义一个尺⼨,比方说我最多只能装 100 个 NPC,超过这个数字的时候,因为放进去的时候是有顺序 的,0,1,2,3,4,5⼀一直到99,多了之后呢就把前⾯面的第 0 个,第 1 个,第 2 个推出去,这是⼀个队列的概念,先进先出。
Unity 游戏框架搭建 2019 (六十) PoolManager

OK, 那我们过到下⼀个话题,什么叫做pool manager,我们现在知道市⾯上现在最火爆的就是各种各样的 MMO 的游戏,那么这种以 RPG,Role Playing为主,在很多时候这里的游戏都遇到需要频繁的去创建一些⻆色或者说是一些 NPC 、怪物等这些东西,那么一个最 Low 的做法就是我们每创建⼀个怪物的时候我们把角色 Create 进来,那么不⽤的时候就 Destroy 掉,那么这样以来就相当于从我们的应⽤里面把它 Load 到我们的内存中来,然后 Destroy 再把它释放掉,如果下次再遇到⼀个这样的NPC,就再重新这样做⼀次。那么这个过程本身它可能并不是很慢,如果用 c++ 来做的话这个机制可能没有太多问题,但是因为如果你采⽤用 C# 脚本,就涉及到一个 GC 的问题,这个过程是 一个⾮非常耗时的过程,所以我们说这样的一个⾏为是绝对不要做的。那么这样的结果就是我们去创建⼀个我们⾃己的 PoolManager。

那么怎么设计呢?

我们说有⼀种⾮常⾮常简单的设计,就是说我每⼀次能不能把我的⼀些已经 Load 到内存中的资源不要⻢上就把它 Destroy 掉,⽽是先把它放在⼀个池⼦⾥备用, 如果下一次再需要同样的东西,我就把它拿出来,⾮常⾮常简单的⼀个想法,如果你具备了这样的一个想法,那么我说你的这样的⼀个设计就可以应付大多数小型规模的游戏了。

那么做法怎么做呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
我们只要在你的程序⾥面加上⼀一行代码:

List<GameObject> dormantOnjects = new List<GameObject>();

代码中 dormant 意思是: 暂时不用的

有这么⼀个东西,凡是你⽤过一次暂时不用的东西,就把它扔到这个池⼦⾥面去。
我们会有两个典型的操作,⼀个叫 Spawn,⼀个叫做 Despawn。

Spawn 是什么意思呢?

Unity 游戏框架搭建 2019 (六十) PoolManager
那么 Despawn 是什么意思呢?

如果说我现在有一个东⻄首次 Load 进来⽤完了,不要把它立刻 Destroy 掉,而是要把它放到这个池⼦里去。

OK,这两步了解之后,我们还要有一个 Trim 的操作,我们的池⼦不可能无限的⼤大,我把它定义一个尺⼨,比方说我最多只能装 100 个 NPC,超过这个数字的时候,因为放进去的时候是有顺序 的,0,1,2,3,4,5⼀一直到99,多了之后呢就把前⾯面的第 0 个,第 1 个,第 2 个推出去,这是⼀个队列的概念,先进先出。
Unity 游戏框架搭建 2019 (六十) PoolManager

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Unity 游戏框架搭建 2019 (六十) PoolManager求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们