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