Unity 鼠标悬停RawImage获取关联存档文件实现方法
跨脚本关联数据传递的实现方案
不需要复杂的事件系统或者全局数据管理器,直接用组件引用赋值就能解决当前的传值问题:
- 在
SavedGamesSlots脚本的实例化逻辑里,拿到每一个saveSlotPrefab的生成实例后,直接通过GetComponent获取挂载在槽位上的MouseHover脚本实例 - 在
MouseHover脚本中提前定义一个公开的字符串字段,比如public string associatedSaveFileName; - 遍历到每个截图对应的文件名(也就是代码里的
string fileName = imagesToLoad[i];)时,直接把这个文件名赋值给对应槽位的MouseHover实例的字段:slotInstance.GetComponent<MouseHover>().associatedSaveFileName = fileName; - 后续不管是悬停交互、点击跳转,直接读取当前
MouseHover实例上的associatedSaveFileName字段就行,完全不需要额外绕路从Texture2D的Name属性里取字符串,也不会出现路径匹配错位的问题
分文件夹存储的配对逻辑优化说明
完全可以通过分目录存储的方式简化配对逻辑,而且这种方案比同目录下靠文件名模糊匹配的稳定性更高:
- 你可以固定磁盘存储的目录结构,把截图和存档分别放在独立的一级目录下,参考结构如下:
游戏运行根目录/ ├─ screenshots/ (存放所有存档槽位截图) │ ├─ slot_0.png │ ├─ slot_1.png │ └─ slot_9.png └─ saves/ (存放对应槽位的存档文件) ├─ slot_0.sav ├─ slot_1.sav └─ slot_9.sav
只要保证两个目录下的文件主文件名完全一致(比如截图叫slot_0.png,对应存档就叫slot_0.sav),遍历截图时只需要去掉截图的后缀,直接拼接存档目录的路径就能拿到对应存档的全路径,不需要写复杂的字符串匹配逻辑
- 这种存储结构还能避免之前同目录下混放两类文件带来的遍历问题——之前如果把截图和存档放同一个目录,遍历截图的时候还要额外加判断过滤非png文件,分目录之后遍历逻辑会更简单
开发避坑:不要为了跨脚本传值把关联数据存在Unity内置组件(比如RawImage、Texture2D)的自定义扩展字段上,这类字段在场景重载、资产序列化的过程中很容易出现值丢失的问题,直接把自定义数据存在自己写的MonoBehaviour脚本实例的公开字段上,是Unity里最稳定的实例数据传递方式。
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

