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

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);//把图片资源添加到dicDictionary<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.lryc.cn/news/498891.html

相关文章:

  • 烟草行业通过Profinet转EthernetIP网关打通数据壁垒
  • 2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序
  • ip地址显示本地局域网什么意思?ip地址冲突怎么解决
  • [软件工程]八.软件演化
  • 【大数据学习 | 面经】yarn的资源申请和分配的单位-Container
  • WiFi受限不再愁,电脑无网络快速修复指南
  • 【组件封装】uniapp vue3 封装一个完整的Tabs(标签页)组件教程,功能由简到杂实现讲解。
  • TDesign:Picker 选择器
  • 【AI赋能心理学论文创作策略】第十二章 AI辅助临床启示撰写指南
  • Pynsist 打包应用 和 PyWebIO 构建Web 应用
  • git 使用配置
  • 记一次Mysql的SELECT command denied to user...报错(非权限问题)
  • element-plus的el-tree的双向绑定
  • 代码随想录-算法训练营day41(动态规划04:01背包,01背包滚动数组,分割等和子集)
  • c#中context.SaveChanges()方法
  • 李飞飞首个“空间智能”模型发布:一张图,生成一个3D世界 | LeetTalk Daily
  • Node.js简单接口实现教程
  • AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!
  • windows文件下换行, linux上不换行 解决CR换行符替换为LF notepad++
  • npm, yarn, pnpm之间的区别
  • 静态链接和动态链接的特点
  • Mac曲线救国实现Bandizip右键一级菜单
  • 进度与预算
  • 【教程】创建NVIDIA Docker共享使用主机的GPU
  • CEEMDAN-CPO-VMD二次分解(CEEMDAN+冠豪猪优化算法CPO优化VMD)
  • 图论理论基础和存储方式的实现
  • 【实分析】【二】2.2 (c)自然数的序
  • STM32串口接收与发送(关于为什么接收不需要中断而发生需要以及HAL_UART_Transmit和HAL_UART_Transmit_IT的区别)
  • k8s 之storageclass使用nfs动态申请PV
  • vue移动端实现下载(截图)功能