美文网首页
Unity中,允许在Inspector界面中配置字典数据的内容

Unity中,允许在Inspector界面中配置字典数据的内容

作者: 全新的饭 | 来源:发表于2024-01-29 16:17 被阅读0次

说明

  1. 通过Init真正生成字典,通过Destroy销毁字典。
  2. 通过TryGetValue获取目标值,通过TryAdd添加数据,通过Remove删除数据。
  3. 通过ShowDict打印字典内容。

代码

FanDict.cs

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class FanDict<K, T>
{
    [SerializeField]
    private FanKeyValue<K, T>[] _keyValueElements;
    private Dictionary<K, T> _dict;

    public void Init()
    {
        _dict = new Dictionary<K, T>();
        foreach (var e in _keyValueElements)
        {
            TryAdd(e.Key, e.value);
        }
    }
    public void Destroy()
    {
        _dict.Clear();
        _dict = null;
    }

    public bool TryGetValue(K key, out T value)
    {
        return _dict.TryGetValue(key, out value);
    }
    public bool TryAdd(K key, T value)
    {
        return _dict.TryAdd(key, value);
    }
    public bool Remove(K key)
    {
        return _dict.Remove(key);
    }

    public void ShowDict()
    {
        Debug.Log("字典中的元素总数:" + _dict.Keys.Count);
        foreach (var key in _dict.Keys)
        {
            Debug.Log(key + ":" + _dict[key]);
        }
        Debug.Log("_____________________________________");
    }

    [System.Serializable]
    private class FanKeyValue<M, N>
    {
        [SerializeField]
        private M _key;
        public M Key => _key;
        [SerializeField]
        private N _value;
        public N value => _value;
    }
}

测试代码

FanTest.cs

using UnityEngine;

public class FanTest : MonoBehaviour
{
    [SerializeField]
    private int _key;
    [SerializeField]
    private string _value;

    [SerializeField]
    private FanDict<int, string> _testDict;


    private void Start()
    {
        _testDict.Init();
    }

    private void OnDestroy()
    {
        _testDict.Destroy();
    }

    private void Update()
    {
        // 显示字典信息
        if (Input.GetKeyDown(KeyCode.A))
        {
            _testDict.ShowDict();
        }
        // 获取指定Key对应的值
        else if (Input.GetKeyDown(KeyCode.B))
        {
            if (_testDict.TryGetValue(_key, out string value))
            {
                Debug.Log("获得指定key对应的value:" + _key + " : " + value);
            }
            else
            {
                Debug.Log("字典中不存在key:" + _key);
            }
        }
        // 向字典中新增数据
        else if (Input.GetKeyDown(KeyCode.C))
        {
            if (_testDict.TryAdd(_key, _value))
            {
                Debug.Log("向字典中新增了数据:" + _key + " : " + _value);
            }
            else
            {
                Debug.Log("向字典中添加数据失败:" + _key);
            }
        }
        // 移除数据
        else if (Input.GetKeyDown(KeyCode.D))
        {
            if (_testDict.Remove(_key))
            {
                Debug.Log("从字典中移除数据:" + _key);
            }
            else
            {
                Debug.Log("从字典中移除数据失败:" + _key);
            }
        }
    }
}

相关文章

  • Unity EditorWindow修改Asset数据刷新

    在unity开发中,有时需要在EditorWindow或者Inspector中修改Asset的数据。例如一些图片打...

  • 投影矩阵推导

    1、正交投影 上图就是unity中的摄像机,把摄像机设置为正交投影,我们可以在inspector界面调整clipp...

  • Odin Inspector 系列教程 --- Text Are

    Text Area Attribute:Unity自带属性,用于在inspector面板中给字符绘制一个填写区域 ...

  • 配置文件view思路(一)

    一、配置文件的思路 通过列表保存字典,字典中以键值对的形式保存,我们要用到的内容 q用来查询数据库内容,其中val...

  • Unity3D零碎笔记

    新装unity渲染问题 阴影 在灯光的inspector中,设置Shadow Type为Soft Shadows,...

  • ios开发

    允许ios访问网络内容 发送异步请求网页内容显示在webview中 异步请求json,并且转成字典

  • jenkins之新建用户和赋权限

    新建用户 通过系统管理进入全局安全配置界面中 用户权限配置 配置界面:全局安全配置 安全域允许用户注册:将创建用户...

  • 「Unity3D」(4)使用AnimBool自定义Inspect

    Unity自己的组件,Inspector面板都有动画效果,本文将会结合UGUI中ImageEditor的动画效果,...

  • SerializeField和Serializable

    Serialize功能 Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示...

  • 6、将数据库中数据在前台显示

    1、将后端数据传递回前端界面(常用格式列表字典) views.py中Render中参数context传递动态数据 ...

网友评论

      本文标题:Unity中,允许在Inspector界面中配置字典数据的内容

      本文链接:https://www.haomeiwen.com/subject/qxogodtx.html