⭐ Unity 对象池的应用 Cube流星落

此次Demo里生成一些 Cube 从天上往下掉,并且当它们掉到特定高度(例如 y 轴小于 0)时销毁。为了优化性能,避免频繁创建和销毁物体,使用 对象池(Object Pooling) 技术来复用这些 Cube。

先看一下效果 观察Cube的生成

Cube对象池

 对象池管理器脚本

using System.Collections.Generic;
using UnityEngine;public class ObjectPool : MonoBehaviour
{// Cube 预制体public GameObject cubePrefab;// 对象池大小public int poolSize = 10;// 用于存储 Cube 对象的列表private List<GameObject> pool;void Start(){// 初始化对象池pool = new List<GameObject>();for (int i = 0; i < poolSize; i++){GameObject obj = Instantiate(cubePrefab);obj.SetActive(false);  // 初始化时设置为不活跃状态pool.Add(obj);}}// 从对象池中获取对象public GameObject GetObject(){foreach (var obj in pool){if (!obj.activeInHierarchy){obj.SetActive(true);  // 激活对象return obj;}}// 如果没有可用对象,可以选择扩展对象池GameObject newObj = Instantiate(cubePrefab);newObj.SetActive(true);pool.Add(newObj);return newObj;}// 将对象返回池中(实际上是禁用它)public void ReturnObject(GameObject obj){obj.SetActive(false);  // 禁用对象}
}

 

Cube 下落逻辑

using UnityEngine;public class FallingCube : MonoBehaviour
{public float fallSpeed = 2f;  // 下落速度public float minHeight = -1f; // 当 Cube 掉落到这个高度时消失private ObjectPool objectPool;void Start(){// 获取对象池的引用objectPool = FindObjectOfType<ObjectPool>();}void Update(){// 让物体下落transform.Translate(Vector3.down * fallSpeed * Time.deltaTime);// 如果物体高度小于 minHeight,将其返回对象池if (transform.position.y < minHeight){objectPool.ReturnObject(gameObject);}}
}

 

创建控制器生成 Cube

using UnityEngine;public class CubeSpawner : MonoBehaviour
{public ObjectPool objectPool;  // 对象池引用public float spawnInterval = 1f;  // Cube 生成的时间间隔public float spawnHeight = 5f;    // Cube 掉落的高度public Vector2 spawnArea = new Vector2(-5f, 5f);  // 生成的范围private float timeSinceLastSpawn;void Update(){timeSinceLastSpawn += Time.deltaTime;// 如果时间超过生成间隔,生成一个新的 Cubeif (timeSinceLastSpawn >= spawnInterval){SpawnCube();timeSinceLastSpawn = 0f;}}void SpawnCube(){// 从对象池中获取一个 CubeGameObject cube = objectPool.GetObject();// 随机设置生成位置float randomX = Random.Range(spawnArea.x, spawnArea.y);cube.transform.position = new Vector3(randomX, spawnHeight, 0f);}
}

设置场景步骤

  1. 创建空的 GameObject:Hierarchy 中创建一个空的 GameObject,命名为ObjectPoolManager。将 ObjectPool 脚本挂载到 ObjectPoolManager,并将 cubePrefab 设置为你的 Cube 预制体。

  2. 创建 CubeSpawner: 创建另一个空的 GameObject,命名为 CubeSpawner将 CubeSpawner 脚本挂载到 CubeSpawner。将 ObjectPoolManager 中的 ObjectPool 组件拖入 CubeSpawner 的 ObjectPool 引用槽中。

  3. Cube 预制体配置: 打开你的 Cube 预制体,将 FallingCube 脚本挂载到 Cube 上,并配置下落速度和销毁高度。

感谢大家的观看,您的点赞和关注是我最大的动力

不定时更新知识点和干货呦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch9 策略梯度方法 Box 8.1 马尔可夫决策过程的平稳分布

Box 8.1&#xff1a; 马尔可夫决策过程的平稳分布 整理自 链接 分析平稳分布的关键工具是 P π ∈ R n n P_\pi \in {\mathbb R}^{n\times n} Pπ​∈Rnn&#xff0c;它是给定策略 π π π 下的概率转移矩阵。 如果状态被索引为 s 1 , ⋯ , s n s_1,\cdots, s_n s1​,⋯…

idea2021git从dev分支合并到主分支master

1、新建分支 新建一个名称为dev的分支&#xff0c;切换到该分支下面&#xff0c;输入新内容 提交代码到dev分支的仓库 2、切换分支 切换到主分支&#xff0c;因为刚刚提交的分支在dev环境&#xff0c;所以master是没有 3、合并分支 点击push&#xff0c;将dev里面的代码合并到…

图片尺寸不合适?这3款免费好用的AI绘图神器帮你免费无缝拓展!一键扩展画面之外的内容,真的泰裤啦!

大家好&#xff0c;我是灵魂画师向阳 在处理图片素材时&#xff0c;大家有没有遇到过尺寸不合适但又不能裁切的情况&#xff1f;是不是也想过图像要是能自己“长”出一块就好了&#xff1f;这种要求在以前或许很难实现&#xff0c;但生产式 AI 技术出现后它就不再是问题了&…

基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue

基于GIKT深度知识追踪模型的习题推荐系统 目录结构 Flask-BackEnd flask后端 app 后端主体文件 alg 深度学习模块 data 数据集data_process.py 数据预处理gikt.py GIKT模型pebg.py PEBG模型params.py 一些参数train.py 仅模型训练train_test.py 模型训练和测试-五折交叉验证t…

WebGIS开发四大开源框架对比

本篇文章主要介绍GIS开发四大地图框架的差异和特点。 Cesium: Cesium是目前主流的一款三维地图框架&#xff0c;支持桌面端、web端、移动端等多平台。Mapbox&#xff1a;高清经纬度矢量瓦片&#xff0c;个性化前端表达&#xff0c;前端矢量绘制&#xff0c;支持海量地名地址。…

数据库实验2—1

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…

[论文总结] 深度学习在农业领域应用论文笔记13

文章目录 1. Downscaling crop production data to fine scale estimates with geostatistics and remote sensing: a case study in mapping cotton fibre quality &#xff08;Precision Agriculture &#xff0c;2024&#xff0c; IF5.585&#xff09;背景方法结果结论个人总…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

C语言实现常见的数据结构

栈 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构 #include <stdio.h> #include <stdlib.h>#define MAX 100typedef struct {int data[MAX];int top; } Stack;// 初始化栈 void init(Stack *s) {s->top -1; }// 判断栈是否为空…

kafka 消息位移提交几种方式:消息重复消息、消息丢失的关键

消费位移 Kafka 中的位移&#xff08;offset&#xff09;是用来记录消息在分区中的位置的标志&#xff0c;简单说就是记录消费者的消费进度&#xff0c;每次消息消费后需要更新消费进度&#xff0c;也就是位移提交 由此可见一旦位移提交发生异常&#xff0c;会导致消费进度不正…

VBA技术资料MF204:右键多按钮弹出菜单中使用图标

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

p,div等里面支持br换行 对应后台换过来的textarea的富文本内容

如何使用CSS来支持或者允许<br>标签在HTML中创建换行。<br>标签是一个空元素&#xff0c;它的存在表示在HTML中的那个位置需要一个换行。 在CSS中&#xff0c;使用white-space属性来控制文本的换行行为。设置white-space: pre-wrap; 这样的属性&#xff0c;这样就…

【python】【绘制小程序】动态爱心绘制

背景介绍 参考链接&#xff1a;https://blog.csdn.net/Python_HUHU/article/details/139703289点的背景颜色在开始修改&#xff1b;文字的颜色在最后修改。文字内容可以修改。 python 代码 import tkinter as tk import random from math import sin, cos, pi, log from PIL…

学习篇 | Jupyter 使用(notebook hub)

1. JupyterHub 1.1 快速尝试 jupyterhub -f/path/jupyter_config.py --no-ssl1.2 长期后台运行 bash -c "nohup jupyterhub -f/path/jupyter_config.py --no-ssl" > ~/jupyterhub.log 2>&1 &1.3 帮助 jupyterhub --help2. Jupyter Notebook 2.1 快…

Cocos 3.8.3 实现外描边效果(逃课玩法)

本来想着用Cocos 的Shader Graph照搬Unity的思路来加外描边&#xff0c;发现不行&#xff0c;然后我就想弄两个物体不就行了吗&#xff0c;一个是放大的版本&#xff0c;再放大的版本上加一个材质&#xff0c;这个材质面剔除选择前面的面剔除就行了&#xff0c;果不其然还真行。…

如何使用ssm实现基于java web的防疫工作志愿者服务平台的设计与实现

TOC ssm693基于java web的防疫工作志愿者服务平台的设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进…

详细解读,F5服务器负载均衡的技术优势

在现代大规模、高流量的网络使用场景中&#xff0c;为应对高并发和海量数据的挑战&#xff0c;服务器负载均衡技术应运而生。但凡知道服务器负载均衡这一名词的&#xff0c;基本都对F5有所耳闻&#xff0c;因为负载均衡正是F5的代表作&#xff0c;换句通俗易懂的话来说&#xf…

makefile和CMakeLists/C++包管理器

make 大家可能会很奇怪&#xff0c;都什么年代了&#xff0c;还学makefile&#xff0c;cmake都有些过时了&#xff0c;为什么还要再学这个呢&#xff1f; 我是这么看待这个问题的&#xff0c;cmake跨平台性还是很有有优势的&#xff0c;有着多年积累的底蕴&#xff0c;借助大模…

海尔嵌入式硬件校招面试题及参考答案

使用 QT 的经验及对控件和信号与槽机制的了解 我使用 QT 有一段时间了,在项目开发中积累了较为丰富的经验。 QT 中的控件丰富多样,涵盖了各种常见的界面元素需求。例如按钮、文本框、列表框、进度条等。这些控件具有良好的可定制性,可以通过属性设置、样式表等方式来调整外观…

基于springboot的驾校预约管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的驾校预约管理系统5拥有三种角色&#xff1a;管理员、教练、学员 管理员&#xff1a;学员管理、教练管理、车辆管理、车辆关联、维修管理等 教练&#xff1a;学员查看/毕…