> 技术文档 > Unity学习--2D相关--SpriteRender组件_unity spriterenderer

Unity学习--2D相关--SpriteRender组件_unity spriterenderer

·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找

一、SpriteRender是什么

二、2D对象创建

1.直接拖入

·注意要提前把图片转化为Sprite类型

2.右键创建

 ·需要拖入一个Sprite类型的图片

3.空物体添加脚本

·先创建一个空物体,再在空物体上添加Sprite Render组件

·之后和2一样的

三、参数相关:

·Sprite:

放入的图片不同,在场景中显示的图片就不同,可以通过代码控制切换

·Color:

可以改变图片的颜色【可以做受伤变红闪烁的效果】

·Flip:

翻转图片【人物左右转向可以调用改变】,用Scale取相反数也可以做到相同效果

·Draw Mode:

Simple:

整个图像一起变化缩放

Sliced:

先把图片Mesh Type选为Full Rect。然后去Sprite Editor设置九宫格

四个角的不会变化

改了横向Width的变化

改了纵向Height的变化

特别适合这种只有中间没什么细节的四角细节都很多的背景图,可以把小图变大图

特别节约资源

Tiled:

把十字区域中间部分不是拉伸而是平铺

可以平铺中间的点点

Continuous是不管什么都平铺,Adaptive是达到阈值之后才平铺

·Mask Interaction 遮罩交互

·Sprite Sort Point 和 Material 

默认的材质不会受到光源的影响

·高级设置

和精灵被渲染的前后关系有关

层级越高,越先被渲染

四、代码设置

动态加载图片

动态加载图集中的图片

五、总结

SpriteRender是可以用于渲染出设置为Sprite类型的图片的一个组件,同时它提供了三种不同的绘制模式(Draw Mode),与图片的九宫格有关,可以帮助我们快速制作一些背景图之类的拉伸效果。并且在代码中可以动态地加载入图片与图集,图集的载入则先需要载入到一个数组中,再在数组中用索引将其取出

六、课后作业

制作一个更方便加载图集中图片的类

需求:传入图集名字,图片名字,就能够返回相应的精灵图片

考虑:①加载之后,可以保存在内存里,每个精灵图片可以由对应精灵图片名字找到,而每个图集可以由图集名字找到,所以可以用一个字典作为数据结构,来存储

②当然,加载了之后,肯定要考虑卸载释放资源与清空内存

代码如下:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class LoadSpriteAlta{ //工具类的话,同单例模式调用更加方便 private static LoadSpriteAlta instance = new LoadSpriteAlta(); public static LoadSpriteAlta Instance => instance; private LoadSpriteAlta() { } //私有构造函数 //输入图集名和图片名,就返回相应的Sprite //而且考虑到当加载过了之后,我们就可以把他存储在内存中,当下一次又要加载的适合,可以直接读取而不用再次加载 //如果这样的话,那就要注意当游戏运行结束的时候,要卸载资源并清空释放内存 Dictionary<string,Dictionary> dic = new Dictionary<string,Dictionary>(); ///  /// 加载图集中的图片,并保存在内存中 ///  /// 图集名 /// 图片名 /// 精灵图片 public Sprite LoadSprite(string atlasName, string spriteName) { if (dic.ContainsKey(atlasName)) { //需要加载的图集已经加载过了 if (dic[atlasName].ContainsKey(spriteName)) return dic[atlasName][spriteName]; } else { //还没加载过图集,那就把图集加载进来,并顺便把它对应的图片都缓存到内存中 Sprite[] sprites = Resources.LoadAll(atlasName); Dictionary tempDic = new Dictionary(); for(int i = 0; i < sprites.Length; i++) { tempDic.Add(sprites[i].name, sprites[i]); } dic.Add(atlasName, tempDic); //要检查一下是不是这里面找得到对应的图片 if(tempDic.ContainsKey(spriteName)) return tempDic[spriteName]; } //如果找不到对应的图片,就返回一个默认的空白图片 Debug.LogWarning(\"Can\'t find sprite: \" + spriteName + \" in atlas: \" + atlasName); return Resources.Load(\"Default\"); } ///  /// x清空内存,释放资源 ///  public void Clear() { dic.Clear(); Resources.UnloadUnusedAssets(); } }

思考:制作工具类的时候要首先明确输入与输出的具体要求,再通过这个需求,衍生考虑怎么能够更全面地实现这个效果,思考需要哪些数据结构来实现这些效果。之后再动手具体写代码。

先想后做