当前位置: 首页 > news >正文

Unity中列表List使用出类似字典Dictionary的感觉

首先为什么会有这个标题?

因为字典很好用,只需要键就能拿到值,这种感觉是真的爽,新手最喜欢用了,遇事不决就字典,但是也有不好的地方,字典的内存开销比列表List要大,遍历也是List占优势(内存连续,但是查询、删除、插入是不如字典的)。

明明各有千秋,为什么我要使用List呢?标题是Unity,哈哈哈懂了吧,一般情况下字典无法在untiy的inspector页面上展示出来,这就使得添加数据和查看数据成为了麻烦,但巧了List可以。

欸,这个时候必定有杠精要来说,你不会自定义属性绘制器吗,这样不就展示出来了吗?

欸,就等你这句话了,对此,我都说了"一般情况下",各位想重写的可以去写,unity不提供,是因为Unity的序列化系统并不直接支持标准的.NET Dictionary类型,一般来说序列化的数据都能再inspector上显示。

欸,但是别急,想在inspector上看到依旧是有很多方法的,不建议写。毕竟已经有大佬写了:

(这三个都是,都可以使用)

SerializableDictionaryForUnity

SerializableDictionaryLite

unity3d-ordered-dictionary

这里先介绍List如何使用出字典的感觉:

[CreateAssetMenu(fileName = "New Audio Data",menuName = "ScriptableObject/Audios Data")]
public class AudioScriptableObject : ScriptableObject
{[Tooltip("音频组")]public List<AudioWithTag> audio;
}[System.Serializable]
public class AudioWithTag
{public string tag;[Tooltip("音频")]public AudioClip audio_clip;
}

这是我写的一个用于创建ScriptableObject的数据对象工具,这是个音频数据对象

可以看到用的就是List,在inpector上展示如下:

我们拿数据怎么拿?

如下:

             //找到对应tag的音频AudioWithTag audio = audio_data.audio.Find((_audio)=>{return _audio.tag.Equals("Enter");});

这是因为List中有查询的方法,当然还有是否存在的方法,

优化一下,在该类中定义获取方法。

    /// <summary>/// 获取音频/// </summary>/// <param name="tag">音频tag</param>/// <param name="audio">返回的音频</param>/// <returns>找到则返回true,否则返回false</returns>public bool TryGetAudioGroup(string tag,out AudioClip clip){if(audio!=null){Debug.LogError($"音频组为空");clip = null;return false;}AudioWithTag audio_withtag = audio.Find((_clip)=>{return _clip.tag.Equals(tag);});if(audio_withtag == null || audio_withtag.audio_clip == null){Debug.LogError($"音频{tag}没有找到!");clip = null;return false;}clip = audio_withtag.audio_clip;return true;}

是不是在找的时候用出了字典的感觉,字典我们拿数据是TryGetValue这个方法,方式相似,代码量相当。


http://www.mrgr.cn/news/81965.html

相关文章:

  • 【Spring】事务
  • 数据挖掘——关联规则挖掘
  • 【MySQL关于数据库和表结构的增删查改】
  • Oracle ASM命令行工具asmcmd命令及其使用方法
  • [MySQL报错]关于发生net start mysql 服务无法启动,服务没有报告任何错误的五种解决方案。
  • 基于Ubuntu2404桌面版制作qcow2镜像
  • UE5材质节点Panner
  • Elasticsearch:analyzer(分析器)
  • 工业大数据分析算法实战-day19
  • 学习笔记 --C#基础其他知识点(同步和异步)
  • Hugging Face Dataset的 dataset_info.json 文件详解
  • LoRA微调系列笔记
  • jpeg学习
  • Go语言入门
  • mac系统vsCode中使用Better Comments在.vue文件里失效
  • (一)人工智能其实可以看成是一个函数
  • SOME/IP 协议详解——信息格式
  • Llama系列关键知识总结
  • 012-spring的注解开发、bean的属性、IOC实现原理
  • arcface
  • QT 学习第十四天 QWidget布局
  • SpringBoot对静态资源的映射规则
  • STM32-笔记20-测量按键按下时间
  • 计算机网络期末复习
  • C++ 设计模式
  • BUG分析 - 重启有时失败