【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(4)

【Claude Code · VibeCoding】13|实战演示:水果消消乐 VibeCoding 用「水果消消乐」走一遍 VibeCoding:提示、生成、试玩、改需求、再生成。 阅读详情

四、相册已满时的提示

(1)制作提示窗口的UI
在这个项目中,我们一共需要三个弹出窗口,所以这里先新建UI>Canvas,命名为Popup Window Canvas,将所有弹出窗口都放到这个画布下。
在Popup Window Canvas下新建UI>Panel,重命名为Alert,按照之前介绍的方法设置大小、位置、背景图等。(参考大小:长600宽300)
在Alert下新建UI>Text,放到Alert偏上居中的位置,调整大小。(参考大小:长460宽180)在Text的Text组件中输入以下文字并调整字体、字号等:
相册已满!
请至少删除一张图片后再尝试截屏
在Alert下新建UI>Button,放到Alert偏下居中的位置,命名为Alert Btn,调整大小。在Alert Btn的子物体Text的Text组件中,输入文字“确定”,并调整字体、字号等。
完成后的提示窗口UI将类似于下图:
做完提示窗口UI后,取消勾选Alert,令其隐藏。
(2)当相册已满时,弹出提示窗口
这一步并不难,之前我们已经做完了截图功能,现在我们只需要加一个条件,也就是当已有截图数量小于相册格子数时才进行截图,否则就显示警告窗口。因为这里我们声明了一个公开的GameObject变量,所以记得写完脚本后要回到Inspector中,将Alert挂载到相应栏位。
public GameObject alertWindow; void Start() { //给警告窗口的关闭按钮加上监听事件 alertBtn.onClick.AddListener(CloseAlertWindow); } void Update() { //按S键截图 if (Input.GetKeyDown(KeyCode.S)) { //如果已有截图数量小于相册格子数,则进行截图 if(fileCount < slots.Count) { StartCoroutine(CaptureScreenshot()); } //如果已有截图数量大于相册格子数,则显示警告窗口 else { this.GetComponent<AlbumManager>().alertWindow.SetActive(true); } } } //关闭警告窗口 public void CloseAlertWindow() { alertWindow.SetActive(false); }
到这步为止的脚本如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System; using UnityEngine.UI; using System.IO; using UnityEditor; using System.Linq; public class AlbumManager : MonoBehaviour { private string folderPath; DirectoryInfo screenshotDir; private int screenshotCount = 0; static List<int> screenshotlist = new List<int>(); private string screenshotFileName; private int fileCount = 0; Texture2D[] textures; Sprite[] sprites; String[] screenshotNames; String[] screenshotPaths; public List<GameObject> slots = new List<GameObject>(); public GameObject album; public Button albumCloseBtn; bool isOpen = false; public Button albumCloseBtn; public GameObject alertWindow; void Start() { folderPath = Application.persistentDataPath + "/Textures/"; screenshotDir = new DirectoryInfo(folderPath); if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); albumCloseBtn.onClick.AddListener(ShowOrHideAlbum); screenshotlist.Add(screenshotCount); screenshotCount = PlayerPrefs.GetInt("MaxNumber"); albumCloseBtn.onClick.AddListener(ShowOrHideAlbum); alertBtn.onClick.AddListener(CloseAlertWindow); ReplaceImages(); } void Update() { if (Input.GetKeyDown(KeyCode.A)) { ShowOrHideAlbum(); } if (Input.GetKeyDown(KeyCode.S)) { if(fileCount < slots.Count) { StartCoroutine(CaptureScreenshot()); } else { this.GetComponent<AlbumManager>().alertWindow.SetActive(true); } } } private IEnumerator CaptureScreenshot() { screenshotCount ++; screenshotlist.Add(screenshotCount); PlayerPrefs.SetInt("MaxNumber", screenshotlist.Max()); screenshotFileName = "Screenshot_" + screenshotCount + ".png"; ScreenCapture.CaptureScreenshot(folderPath + screenshotFileName); yield return new WaitForSeconds(0.5f); #if UNITY_EDITOR AssetDatabase.Refresh(); #endif } public void CreateSprites() { FileInfo[] screenshotFiles = screenshotDir.GetFiles("*.png"); fileCount = screenshotDir.GetFiles("*.png").Length; Array.Resize(ref textures, fileCount); Array.Resize(ref sprites, fileCount); Array.Resize(ref screenshotNames, fileCount); Array.Resize(ref screenshotPaths, fileCount); for (int i = 0; i < fileCount; i++) { textures[i] = new Texture2D (256, 256); screenshotPaths[i] = screenshotFiles[i].FullName; screenshotNames[i] = screenshotFiles[i].Name; byte[] rawPNG = File.ReadAllBytes(screenshotPaths[i]); textures[i].LoadImage(rawPNG); sprites[i] = Sprite.Create(textures[i], new Rect(0f, 0f, textures[i].width, textures[i].height), Vector2.zero, 100.0f); sprites[i].name = "Sprite" + i; } } public void ReplaceImages() { CreateSprites(); for (int j = 0; j < slots.Count; j++) { slots[j].transform.GetChild(0).gameObject.GetComponent<Image>().sprite = null; slots[j].transform.GetChild(0).gameObject.SetActive(false); } for (int i = 0; i < sprites.Length; i++) { if (slots[i].transform.GetChild(0).gameObject.activeInHierarchy == false) { slots[i].transform.GetChild(0).gameObject.SetActive(true); slots[i].transform.GetChild(0).gameObject.GetComponent<Image>().sprite = sprites[i]; } } } public void ShowOrHideAlbum() { isOpen = !isOpen; album.SetActive(isOpen); } public void CloseAlertWindow() { alertWindow.SetActive(false); }
CentOS7全隔离环境部署Nvidia Tesla A100 40G驱动与CUDA工具包实战 本文详细介绍了在CentOS7全隔离环境下部署Nvidia Tesla A100 40G显卡驱动与CUDA工具包的实战经验。通过构建本地YUM仓库、解决驱动依赖问题以及三重验证法,确保Tesla A100与CUDA 11.7的完美兼容。同时分享了Anaconda3离线部署技巧,帮助用户在隔离环境中高效搭建Python GPU开发环境。 阅读详情

相关推荐

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 267

【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(1)

游戏相册是大家喜闻乐见的一个功能。有了相册,我们就可以将游戏中动人心魄的美景,精彩绝伦的战斗场面或是任何承载游戏回忆的瞬间截图保存下来,方便日后随时翻看。这个小教程就将带大家来做一个简单的游戏截图相册,它可以很方便地植入你的游戏项目中。首先要说明的是,这是一个针对新手的教程,我本人也是边学边做。虽然我尽量让这个教程简明易懂,并考虑了许多在编程中可能遇到的问题,但实现方法不一定是最优解。欢迎大家交流...

unityofficial的博客 343

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 1026

【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(6)(完结篇)

六、点击相册中的图片,放大显示(“欣赏”模式)(1)制作带相框大图的UI在Popup Window Canvas下新建UI>Panel,命名为Picture Show,按照之前介绍的方法设置大小、位置、背景图等。(参考大小:长1208宽730)在Picture Show下新建UI>Image,命名为Picture,调整大小和位置。(参考大小:长1180宽690)它将用来存放显示的截图。...

unityofficial的博客 322

从零开始:如何用Python手绘波特图并分析电路稳定性

本文详细介绍了如何使用Python绘制波特图并分析电路稳定性,涵盖从基础理论到实际应用的完整流程。通过NumPy和Matplotlib实现频域分析,包括RC低通滤波器和RLC带通滤波器的案例,以及相位裕度计算等高级技巧,为电子工程师提供了一套高效的电路分析解决方案。

hhh00的博客 371

R语言绘图进阶:五大工具高效组合多图(cowplot、patchwork、layout、par、gridExtra)

本文详细介绍了R语言中五大高效组合多图的工具:cowplot、patchwork、layout、par和gridExtra。针对不同场景提供了实用指南,帮助数据分析师解决图表排版难题,提升报告专业度。特别推荐cowplot用于ggplot2图形组合,patchwork提供最简洁语法,layout则支持完全自定义布局。

weixin_42544663的博客 288

【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(3)

三、将保存的截图显示在相册UI中(1)生成截图的Sprite无论是png文件还是Texture2D文件,都不能直接显示在UI中,我们要先将它们转换为Sprite格式。private int fileCount = 0; Texture2D[] textures; Sprite[] sprites; String[] screenshotNames; String[] screenshotPaths...

unityofficial的博客 197

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2397

【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(5)

五、删除相册中的图片(1)制作删除图片窗口的UI在Popup Window Canvas下新建UI>Panel,命名为Confirm,按照之前介绍的方法设置大小、位置、背景图等。(参考大小:长550宽320)在Confirm下新建UI>Text,放到Confirm偏上居中的位置,调整大小。(参考大小:长450宽150)在Text的Text组件中输入以下文字并调整字体、字号等:是否确定删...

unityofficial的博客 285

KEPServerEX作为MQTT客户端

打开软件: 测试没有连接上MQTT代理。

低码开发 1681

Python-编写点云处理软件(二)点云软件ui制作之仿CC界面

至本篇结束,我们已经能够获得一个有点模子的界面了,但是具体的功能还没有编写,后续的文章将逐渐完善功能。

weixin_43894929的博客 3953

【菜菜丸的菜鸟教程】做一个简单的游戏截图相册(2)

二、实现游戏内截图和保存(1)在层级窗口中新建空物体,命名为Album Manager,即相册管理器。在项目窗口中新建文件夹,命名为Scripts,用来存放脚本。在Scripts中新建C#脚本AlbumManager,拖到Album Manager上。(2)开始编辑脚本,首先定义命名空间using System.Collections; using System.Collections.Gener...

unityofficial的博客 219

【LLC快速上手系列】LLC轻载时,死区时间怎么调才对?别再傻傻乱搞了!

死区时间,就是指。如果你死区设得好,就能让开通前 ( V_DS to 0 ),完美实现!

weixin_43199439的博客 1856

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 425

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 102

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 901

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Claude Fable 5.2 登顶:65 分、单发做游戏,和一份 $26.54 一单的账单

Anthropic 发布 Claude Fable 5.2:AA 智能指数 65 分登顶历史第一,但性能 #71、成本 #73、冗余度 #72——最强能力、最贵成本、最慢速度的矛盾体。同底层 Mythos 5.2 无护栏反而更强。文章拆解:65 分构成、官方实战验收、基准提升真伪、一条提示词一晚做出街机游戏的完整流水线(自写机器人跑完 12 关自检)、$26.54 账单与 98% 缓存折扣下的真实成本重估。

johnsong2009的博客 236

Unity 数据存储指南:本地存储、个性化设置、缓存与 Resources/StreamingAssets 的区别

在 Unity 开发中,“数据存到哪里”、“缓存能不能清”、“打包后资源有什么区别” 是新手最容易混淆、老手也经常踩坑的问题。Unity 本地存储机制(包括 Unity 放在 C 盘的内容);Unity 个性化设置(编辑器首选项 Editor Preferences);Unity 缓存的打开、关闭与清理;打包后 Resources 与 StreamingAssets 的区别;其他可自定义存储的内容汇总。为方便理解,本文配有一个可直接运行的演示工程,所有代码见文末"配套工程说明"。

zhchyun 216

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 644

HarmonyOS 游戏与图形渲染入门:Canvas、渲染管线与掉帧排查

本文详解鸿蒙图形渲染选型与优化,指出多数“游戏感”需求仅需Canvas+requestAnimationFrame即可实现。通过deltaTime保证跨设备流畅性,优先使用animateTo声明式动画,避免逐帧绘制开销。强调性能优化应从主线程长任务、过度绘制、对象分配入手,结合Profiler排查掉帧。XComponent适用于高负载场景,但需权衡开发成本。最后提醒引擎迁移三要点:性能模型差异、打包流程匹配、版本兼容。核心结论:先用简单方案验证,再决定是否上引擎。

信息安全领域优质创作者|操作系统领域专家 420

Windows远程桌面实现之二十:实现 moonlight 游戏串流协议之(一)

本文介绍在xdisp_virt中集成Moonlight游戏串流协议的实现过程。基于开源项目Sunshine逆向的GameStream协议,作者从零研究并自研实现Moonlight服务端网络通信部分,涵盖mDNS设备发现、nvhttp/nvhttps加密通信、nvrtsp协议交互及三类UDP数据通道(视频、音频、控制)。重点解决多客户端并发问题,采用串行处理机制确保连接一致性。通过自定义证书验证与密钥管理,完成配对与安全通信,最终实现低延迟、高性能的游戏串流体验,显著优于WebRTC浏览器方案。

fanxiushu的专栏 168

二进制木马免杀-游戏嵌套与图标替换

二进制木马免杀-游戏嵌套与图标替换

2503_94637398的博客 237

Unity UGUI布局组件(LayoutGroup、ContentSizeFitter、LayoutElement)详解

UGUI 自动布局是一套的 C# 排版系统,和 Transform 原生锚点完全隔离;整套布局;最终输出只有对 RectTransform 的sizeDelta的赋值。

m0_63330263的博客 264

mark 黑塞《玻璃球游戏》

【最近在读黑塞的《玻璃球游戏》-“ai预言“ - 优快云 App】

2502_94306440的博客 192

Cocos Creator3.8.8 + Xcode27.2 编译运行失败

Cocos Creator3.8构建IOS工程后,使用最新的Xcode27.2版本进行真机调试,遇到C++标准库冲突,如is_floating_point、is_arithmetic和is_signed失败,以及webp对齐失败等问题。

HYNN12的博客 401

给 AI 一台贴图工厂:TexGen 程序化贴图引擎与 MCP 架构实践

但它很快就撞墙——一张贴图往往是多层叠加的:底色 + 噪波 + 砖缝 + 暗角 + 高光。所以 TexGen 的核心抽象是图层栈 + JSON 指令表codeTgSpec├── 几何: shape(8 种) + center / size / radius / rotation / cornerRadius├── 绘制: fill(7 种) + color / edgeColor / 渐变 + pattern + warp└── 合成: blend(11 种) + opacity / blur。

邹杭特的博客 375
上一篇: Unity寻路专题——回顾与优化(一)
下一篇: Unity类饥荒3D生存游戏课程介绍
Unity官方开发者社区
博客等级 码龄3年 597粉丝 752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值