Unity学习记录:list的应用案例

1、引言

在制作unity项目的时候,例如,照片墙项目时,点击图片查看大图和图片信息,但是,不能让所有的图片都能打开,这时候需要我们限制打开的个数,达到节约性能和让程序不卡。这时候就需要用到list列表(当然还有更好的方法,不过我用的是列表,以后遇到需要的情况再来补充)。

2、效果展示

 有多个text,当点击的时候,只能显示最多三个文字,最先点开的文字会消失,从列表中移除,最后点开的文字,会移入列表。(类似于一个队列,先进先出。)

3、Hierarchy面板

 4、脚本

TestItem脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestItem : MonoBehaviour
{
    Button btn;
    public Text text;

    void Start()
    {
        //组件设置
        btn = GetComponent<Button>();
        text = transform.GetChild(0).GetComponent<Text>();

        //默认文字隐藏
        text.gameObject.SetActive(false);

        //按钮监听
        btn.onClick.AddListener(ButtonEvent);
    }

    #region 按钮事件

    //点击按钮,文字出现,再点一次,文字消失
    void ButtonEvent()
    {
        if (!text.gameObject.activeSelf) 
        {
            text.gameObject.SetActive(true);
            //打开文字个数的限制
            TestManager.GetInstance().Show(this);
        }
        else
        {
            text.gameObject.SetActive(false);
            TestManager.GetInstance().DisShow(this);
        }
    }
    #endregion

}

TestManager脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestManager : MonoBehaviour
{
    public List<GameObject> textList;

    #region 单例
    static TestManager instance;

    public static TestManager GetInstance()
    {
        return instance;
    }

    private void Awake()
    {
        instance = this;
    }

    #endregion
    
    public void Show(TestItem _testItem)
    {
        textList.Add(_testItem.text.gameObject);
        if (textList.Count>3)
        {
            //最先出现的文字消失
            textList[0].SetActive(false);
            //从列表中移除
            textList.RemoveAt(0);

        }
    }

    public void DisShow(TestItem _testItem)
    {
        textList.Remove(_testItem.text.gameObject);
    }
}

ok,结束了,再给大家推荐一个链接,这里比较详细的讲了list的用法,可以学习一下哦

Unity基础——List的用法_鱼儿-1226的博客-优快云博客_unity 遍历list

### Unity 中 ES3 (Easy Save 3) 的使用教程及案例 #### Easy Save 3 简介 Easy Save 3 是一款用于简化 Unity 游戏开发中的存档和加载操作的插件。该工具支持多种数据存储方式,包括但不限于 JSON 文件、二进制文件以及 CSV 文件等[^3]。 #### 安装与配置 为了在项目中集成 Easy Save 3,开发者可以从官方提供的下载链接获取最新版本并按照说明文档完成安装过程。通常情况下,只需将解压后的 `Assets` 文件夹拖拽到自己的工程目录下即可实现快速部署。 #### 数据保存功能演示 下面是一个简单的例子来展示如何利用 ES3 进行玩家进度的数据持久化: ```csharp using UnityEngine; using Ludiq.EasySave; public class PlayerProgress : MonoBehaviour { private int score = 0; // 假设这是要保存的游戏分数 void OnApplicationQuit() { // 应用程序关闭前自动调用此函数执行保存动作 ES3.Save<int>("playerScore", score); } public void LoadData(){ // 加载之前已有的游戏记录 if(ES3.KeyExists("playerScore")){ score = ES3.Load<int>("playerScore"); } } } ``` 这段代码展示了基本的操作模式——通过键名关联特定类型的变量值来进行存取工作。这里选择了整型作为示范对象,实际应用时可根据需求调整为其他类型或者复杂结构体/类实例。 #### 处理CSV文件 对于更复杂的场景比如表格形式的数据集处理,则可以借助于 ES3 对 `.csv` 文件的支持特性。例如,在某些游戏中可能需要频繁读写道具清单列表这样的二维表单信息,此时就可以采用如下所示的方法: ```csharp // 导出当前拥有的物品至CSV文件 void ExportItemsToCsv(List<Item> items){ string[] headers = new string[]{"ID","Name"}; List<string[]> rows = new List<string[]>(); foreach(var item in items){ rows.Add(new[]{item.Id.ToString(), item.Name}); } ES3.Export.ToFile(items, "items.csv",headers,rows.ToArray()); } // 从CSV导入物品数据 List<Item> ImportItemsFromCsv(){ var importedRows = ES3.Import.FromFile<List<object[]>>("items.csv"); List<Item> result = new List<Item>(); foreach(var row in importedRows.Skip(1)){ // 跳过首行列头 Item newItem = new Item(); newItem.Id = Convert.ToInt32(row[0]); newItem.Name = row[1].ToString(); result.Add(newItem); } return result; } ``` 上述两个方法分别实现了向外部导出内部状态为 CSV 表格的功能,同时也提供了反向解析的能力以便恢复先前的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值