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

unity3d—demo(实现给出图集名字和图片名字生成对应的图片)

目录

实现给出图集名字和图片名字生成对应的图片:

代码示例:

dic: 键 是图集名称   值是一个字典  该字典键是图片名称 值是图片,结构如图:

测试代码:

结果:

SpriteRenderer 讲解:

Resources.LoadAll<> 讲解:

基本用法

返回值

示例

注意事项


实现给出图集名字和图片名字生成对应的图片:

代码示例:

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

public class MultipleMgr
{
    private static MultipleMgr instance = new MultipleMgr();
    public static MultipleMgr Instance => instance;

    private MultipleMgr()
    { }

    //存储图集
    private Dictionary<string, Dictionary<string, Sprite>> dic = new Dictionary<string, Dictionary<string, Sprite>>();

    /// <summary>
    /// 
    /// </summary>
    /// <param name="mulpleName">图集名称</param>
    /// <param name="spriteName">图片名称</param>
    /// <returns></returns>
    public Sprite GetSprite(string mulpleName,string spriteName)
    {
        //如果已经加载过图集
        if(dic.ContainsKey(mulpleName))
        {
            //找到对应图片
            if(dic[mulpleName].ContainsKey(spriteName))
            {
                return dic[mulpleName][spriteName];
            }
        }
        //第一次加载
        else
        {
            //加载图集资源
            Sprite[] sprites = Resources.LoadAll<Sprite>(mulpleName);
            //把图片资源添加到dic
            Dictionary<string, Sprite> dicSprite = new Dictionary<string, Sprite>();
            for(int i = 0; i < sprites.Length;i++)
            {
                dicSprite.Add(sprites[i].name, sprites[i]);
            }
            dic.Add(mulpleName, dicSprite);
            
            //找到图片返回
            if(dicSprite.ContainsKey(spriteName))
            {
                return dicSprite[spriteName];
            }
        }

        return null;
    }

    //清理资源
    public void ClearInfo()
    {
        dic.Clear();
        //卸载资源
        Resources.UnloadUnusedAssets();
    }
}
dic: 键 是图集名称   值是一个字典  该字典键是图片名称 值是图片,结构如图:

测试代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        GameObject obj = new GameObject();
        SpriteRenderer sr = obj.AddComponent<SpriteRenderer>();
        sr.sprite = MultipleMgr.Instance.GetSprite("RobotBoyIdleSprite", "RobotBoyIdleSprite_0");
    }
}
结果:

SpriteRenderer 讲解:

                                             

SpriteRenderer 是 Unity 中用于渲染 2D 精灵并控制其在场景中视觉效果的一个组件。以下是对 SpriteRenderer 的详细解释:

  1. 用途

    • SpriteRenderer 组件用于渲染精灵(Sprite)并控制其在 2D 和 3D 项目场景中的可视化效果。
  2. 添加组件

    • 创建精灵时(通过 GameObject > 2D Object > Sprite),Unity 会自动创建一个附加了 SpriteRenderer 组件的游戏对象。也可以通过 Components 菜单(Component > Rendering > Sprite Renderer)将该组件添加到现有的游戏对象。
  3. 属性

    • Sprite:定义组件应该渲染的精灵纹理。点击右侧的圆圈图标可以打开对象选择器,从列表中选择对应的精灵资源。
    • Color:定义精灵的顶点颜色,可以对精灵图像进行着色或重新着色。使用颜色选择器来设置渲染精灵纹理的顶点颜色。
    • Flip:沿着勾选的轴翻转精灵纹理,这不会影响游戏对象的 Transform 位置。
    • Material:定义用于渲染精灵纹理的材料。
    • Draw Mode(绘制模式):定义精灵在尺寸变化时的缩放方式。有以下几种选项:
      • Simple:尺寸变化时,整个图像都缩放。这是默认选项。
      • Sliced:如果精灵是 9-slice(9切片),则选择此模式。
      • Size:输入精灵的新宽度和高度来缩放 9-slice 精灵。
      • Tiled:默认情况下,此模式会导致 9-Slice 精灵的中间部分在尺寸变化时平铺而不是缩放。使用 Tile Mode 控制精灵的平铺行为。
      • Continuous:在 Continuous 模式下,中间部分在精灵尺寸变化时均匀平铺。
      • Adaptive:在 Adaptive 模式下,精灵纹理在尺寸变化时拉伸,类似于 Simple 模式。当变化的尺寸达到 Stretch Value 时,中间部分开始平铺。
      • Stretch Value(仅在 Adaptive 模式下可用):使用滑块设置 0 到 1 之间的值。最大值是 1,代表原始精灵尺寸的两倍。
    • Mask Interaction:设置 Sprite Renderer 在与 Sprite Mask 交互时的行为。
    • Sprite Sort Point:当 Sprite Renderer 的 Draw Mode 设置为 Simple 时,此属性可用。在正交投影模式下,Unity 根据精灵到摄像机的距离来渲染精灵的顺序。
  4. 脚本中的使用

    • 可以通过脚本获取 SpriteRenderer 组件,并对其属性进行操作。例如,改变精灵的颜色或翻转精灵。

SpriteRenderer 是 Unity 2D 开发中的核心组件之一,它为开发者提供了丰富的选项来控制精灵的渲染和表现。

 

Resources.LoadAll<> 讲解:

是 Unity 提供的一个泛型方法,它允许开发者从 Unity 项目的 Resources 文件夹中加载指定路径下的所有资源。这个方法对于动态加载多个同类型资源特别有用,比如加载多个精灵(Sprite)、纹理(Texture)、音频剪辑(AudioClip)等。

以下是 Resources.LoadAll<> 方法的一些详细说明:

基本用法

Resources.LoadAll<> 方法的基本语法如下:

Resources.LoadAll<T>(path);
  • T 是你想要加载的资源类型,比如 SpriteTexture2DAudioClip 等。
  • path 是相对于 Resources 文件夹的路径,不包括文件扩展名。

返回值

这个方法返回一个包含所有加载资源的数组。如果指定路径下没有找到任何资源,或者资源类型不匹配,返回的数组将是空的。

示例

假设你有一个包含多个精灵的图集(Texture Atlas),你可以这样加载所有的精灵:

Sprite[] sprites = Resources.LoadAll<Sprite>("path/to/your/sprites");

这里 "path/to/your/sprites" 是你的资源相对于 Resources 文件夹的路径。

注意事项

  1. 性能考虑Resources.LoadAll<> 会将所有匹配的资源一次性加载到内存中,这可能会导致较大的内存消耗,特别是在加载大量资源时。

  2. 资源管理:由于 Resources.LoadAll<> 会加载路径下的所有资源,因此你需要确保路径的准确性,避免不必要的资源被加载。

  3. 资源类型:确保你加载的资源类型与 Resources 文件夹中的资源类型一致。

  4. 路径正确性:路径错误或资源未正确放置在 Resources 文件夹中都会导致加载失败。

  5. 后缀名:调用 Resources.LoadAll<> 时不需要包含文件的后缀名。

  6. 异步加载:如果你需要异步加载资源,可以考虑使用 AssetBundleResources.UnloadAsset 等方法。

  7. 资源清理:由于 Resources.LoadAll<> 加载的资源会被保留在内存中,你需要手动管理这些资源,比如在不再需要时卸载它们。

Resources.LoadAll<> 是 Unity 资源管理中一个非常有用的工具,它提供了一种简单直接的方式来动态加载和管理项目中的资源。


http://www.kler.cn/a/428462.html

相关文章:

  • 使用 `scanpy` 观察 `AnnData` 对象内部数据结构
  • 实战演示:利用ChatGPT高效撰写论文
  • 30天开发操作系统 第 17 天 -- 命令行窗口
  • HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战
  • Saas Paas Iaas服务区别
  • 博客搭建 — GitHub Pages 部署
  • 腾讯云 AI 代码助手:AI Agent 构建企业新一代研发范式
  • 时频转换 | Matlab实小波变换Real wavelet transform一维数据转二维图像方法
  • 使用Jackson库美化JSON输出
  • Llama-3.1-405B-Instruct 开源体验|对比|亮点|使用|总结
  • PDF拆分之怎么对批量的PDF文件进行分割-免费PDF编辑工具分享
  • 【问题解决方案】项目路径更改后pycharm选定解释器无效
  • windows下如何开启HUGE PAGES unavailable
  • yarn : 无法加载文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁
  • 音视频入门基础:MPEG2-TS专题(13)——FFmpeg源码中,解析Section Header的实现
  • OpenHarmony-4.GPIO驱动
  • 【Compose multiplatform教程】01 创建你的多平台项目 <官网搬运>
  • 多线程编程:线程间的同步与通信
  • 《向量数据库指南》——Mlivus Cloud:OPPO的向量数据库选型秘籍
  • AGameModeBase和游戏模式方法
  • 03、Node.js安装及环境配置
  • 如何在自动化安全测试中,实现多工具集成与数据融合,以提高对Spring Boot应用程序安全漏洞的检测效率与准确性?
  • C++(十一)
  • Spring Security集成JWT
  • 【数学建模】论文排版教程
  • Linix学习一