Unity使用对象池来解决子弹的频繁生成和销毁

这篇具有很好参考价值的文章主要介绍了Unity使用对象池来解决子弹的频繁生成和销毁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 对象池用来干什么?

降低频繁生成和销毁对象的性能消耗,实现对象的反复使用。一般用于生成和销毁比较频繁的对象,比如:子弹,开火特效,爆炸特效等。

2. 解决子弹频繁生成和销毁案例

2-1. 场景搭建

两面墙壁加地板,还有一炮台

Unity使用对象池来解决子弹的频繁生成和销毁

2-2. 单例脚本

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

public class Singleton<T> where T : class
{
   
    private static T instance;

    public static T Instance
    {
   
        get
        {
   
            if(instance == null)
            {
   
                instance = (T)System.Activator.CreateInstance(typeof(T), true);
            }

            return instance;
        }
    }
}

2-3. 对象池脚本

对象池
池子的数据结构 字典<对象名,List<对象类型>>
a. 需要用到对象的时候(拿)
(1). 先去池子看看有没有我所需要的对象,没有这个对象就去实例化
(2). 有我所需要用到的对象,则拿这个对象出来使用
b. 将对象放入对象池中(放)
(1). 如果该对象不是在池子中被拿出去的,则根据传递过来的Key新建一个新的列表将其保存
(2). 如果该对象有在池子中,则根据传递过来的Key将其保存到原来的列表中文章来源地址https://www.toymoban.com/news/detail-409823.html

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

public class Pool : Singleton<Pool>
{
   
    private Dictionary<string, List<GameObject

到了这里,关于Unity使用对象池来解决子弹的频繁生成和销毁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Effective第三版 中英 | 第2章 创建和销毁对象 | 当面临多个参数的构造器时考虑使用构建器

    大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 effective-java 书籍。同时也把自己学习该书时的笔记,代码分享出来,供大家学习交流,如若笔记中有不对的地方,那一定是当时我的理解还不够,希望你能及时提出。如果对于该笔记存在很多疑惑,

    2024年02月07日
    浏览(34)
  • keep-alive 是 Vue 的一个内置组件,用于缓存其他组件的实例,以避免重复渲染和销毁,它可以在需要频繁切换的组件之间提供性能优化

    目录 keep-alive  使用 keep-alive 的示例代码: 手动清除组件缓存的示例代码: keep-alive 组件有以下几个优点: keep-alive 的原理: 使用 keep-alive 组件,你可以包裹需要缓存的组件,然后这些组件在切换时将会被缓存起来,而不是每次都重新创建。 使用 keep-alive 的示例代码: 我们

    2024年02月08日
    浏览(29)
  • CPU飙升 频繁GC排查-使用jmap histro命令来查看JVM中对象的直方图

    jmap是Java Virtual Machine Tool的一部分,它允许您生成JVM堆转储文件并执行各种诊断操作。可以使用jmap histro命令来查看JVM中对象的直方图。 以下是使用jmap histro命令的语法: 参数pid是JVM进程的ID。请注意,您需要具有足够的权限才能执行此命令。 执行上述命令后,您将获得JVM堆

    2024年01月19日
    浏览(38)
  • 【Android】使用对象池(Object Pool)来缓存已经创建的字节数组,避免频繁地进行内存分配和回收操作提高性能

    在Android中,使用new byte[]创建字节数组是在堆上分配内存,不会直接导致Native内存的增长。但是,如果我们频繁地创建和销毁字节数组,就可能会导致堆内存不足,并触发GC,从而影响应用程序的性能。 在Android中,堆内存的大小是有限制的。如果我们频繁地创建和销毁字节数

    2024年02月09日
    浏览(36)
  • unity实现弹射子弹

    unity实现弹射子弹,子弹在不同敌人之间来回弹射,发射自动选择最近的敌人,然后每次随机选择附近的敌人进行弹射,可以控制弹射次数,比如3次后子弹销毁 可以通过以下步骤在Unity中实现弹射子弹的效果: 1.创建一个子弹对象和敌人对象,并在子弹对象上添加一个控制脚

    2024年02月10日
    浏览(81)
  • Unity 3D子弹发射制作

    1.导入一个枪的模型,调整好枪的位置 2.点击ScifiRifle(枪)右键创建一个Crete Empty(空的物体)命名fireponint代表子弹生成的位置 3. 制作一个简易的子弹,右键3D object→spher这里我们选用spher将其命名为bulletpoint放到合适的位置 4.编写子弹发射脚本 点击Add Component→Guncontral在Asset

    2024年02月03日
    浏览(34)
  • Unity--随机生成游戏对象

    在脚本中声明数组 RandomObjects 用于保存生成对象的类型,在project文件中拖入对象。 先将脚本拖到一个对象上,然后点击检查器-覆盖-应用到全部,这样将使所有预制件都拥有该属性。

    2024年02月15日
    浏览(31)
  • Spring中动态注册和销毁对象

            通常我们项目中想要往spring容器中注入一个bean可以在项目初始化的时候结合@Bean注解实现。但是该方法适合项目初始化时候使用,如果后续想要继续注入对象则无可奈何。本文主要描述一种在后续往spring容器注入bean的方法。 2.1.1 注册bean 定义BeanDefinition,注册类定

    2024年01月18日
    浏览(23)
  • Unity 实现简单的发射子弹功能

    前言:对于射击类游戏,相信大家并不陌生。那么想要实现这一功能,我们通常会使用两种方法: 1.射线追踪。  2.子弹实例化。 今天,我们就通过第二种方式去实现发射的功能。 一、首先,我们准备好一把枪的模型,将其放到场景中,调整好位置。  二、 我们在枪口前面

    2024年02月11日
    浏览(61)
  • Unity中玩家的攻击(发射子弹,挥剑)

    目前来说,我就知道玩家两种攻击方式,1.发射(子弹,弓箭),2.挥剑 1.发射子弹 想要玩家发射子弹,需要制作两个部分(玩家发射动画除外),第一个部分就是控制玩家的脚本,第二部分则是子弹部分,子弹部分需要将子弹做成预制件的形式。 制作思路:1.首先先把子弹

    2023年04月09日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包