目录
[dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片,结构如图:](#dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片,结构如图:)
[SpriteRenderer 讲解:](#SpriteRenderer 讲解:)
[Resources.LoadAll<> 讲解:](#Resources.LoadAll<> 讲解:)
实现给出图集名字和图片名字生成对应的图片:
代码示例:
cs
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: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片,结构如图:
测试代码:
cs
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
的详细解释:
-
用途:
SpriteRenderer
组件用于渲染精灵(Sprite)并控制其在 2D 和 3D 项目场景中的可视化效果。
-
添加组件:
- 创建精灵时(通过
GameObject > 2D Object > Sprite
),Unity 会自动创建一个附加了SpriteRenderer
组件的游戏对象。也可以通过Components
菜单(Component > Rendering > Sprite Renderer
)将该组件添加到现有的游戏对象。
- 创建精灵时(通过
-
属性:
- 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 根据精灵到摄像机的距离来渲染精灵的顺序。
-
脚本中的使用:
- 可以通过脚本获取
SpriteRenderer
组件,并对其属性进行操作。例如,改变精灵的颜色或翻转精灵。
- 可以通过脚本获取
SpriteRenderer
是 Unity 2D 开发中的核心组件之一,它为开发者提供了丰富的选项来控制精灵的渲染和表现。
Resources.LoadAll<>
讲解:
是 Unity 提供的一个泛型方法,它允许开发者从 Unity 项目的 Resources
文件夹中加载指定路径下的所有资源。这个方法对于动态加载多个同类型资源特别有用,比如加载多个精灵(Sprite)、纹理(Texture)、音频剪辑(AudioClip)等。
以下是 Resources.LoadAll<>
方法的一些详细说明:
基本用法
Resources.LoadAll<>
方法的基本语法如下:
cs
Resources.LoadAll<T>(path);
T
是你想要加载的资源类型,比如Sprite
、Texture2D
、AudioClip
等。path
是相对于Resources
文件夹的路径,不包括文件扩展名。
返回值
这个方法返回一个包含所有加载资源的数组。如果指定路径下没有找到任何资源,或者资源类型不匹配,返回的数组将是空的。
示例
假设你有一个包含多个精灵的图集(Texture Atlas),你可以这样加载所有的精灵:
cs
Sprite[] sprites = Resources.LoadAll<Sprite>("path/to/your/sprites");
这里 "path/to/your/sprites"
是你的资源相对于 Resources
文件夹的路径。
注意事项
-
性能考虑 :
Resources.LoadAll<>
会将所有匹配的资源一次性加载到内存中,这可能会导致较大的内存消耗,特别是在加载大量资源时。 -
资源管理 :由于
Resources.LoadAll<>
会加载路径下的所有资源,因此你需要确保路径的准确性,避免不必要的资源被加载。 -
资源类型 :确保你加载的资源类型与
Resources
文件夹中的资源类型一致。 -
路径正确性 :路径错误或资源未正确放置在
Resources
文件夹中都会导致加载失败。 -
后缀名 :调用
Resources.LoadAll<>
时不需要包含文件的后缀名。 -
异步加载 :如果你需要异步加载资源,可以考虑使用
AssetBundle
或Resources.UnloadAsset
等方法。 -
资源清理 :由于
Resources.LoadAll<>
加载的资源会被保留在内存中,你需要手动管理这些资源,比如在不再需要时卸载它们。
Resources.LoadAll<>
是 Unity 资源管理中一个非常有用的工具,它提供了一种简单直接的方式来动态加载和管理项目中的资源。