【Unity精灵】2D精灵图片替换常见的问题
2017-01-07 21:25
771 查看
一开始就从大的方向建立起一堆逻辑代码,然而对于一个新手来说,大的逻辑是正确的
小的毛病很多,这就造成了很多小的逻辑的麻烦
替换精灵,如果精灵已经建立起来,并且有了标签tag的时候,遍历同一个标签的物体,将是最好的打算,然后在
把范围缩小,使得最后找到目标
动态更换物体的2D精灵最简单的两句代码
这个路径是Resources文件夹下面的ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/文件夹的Cloth_Left_Hand_1文件,不管是什么,最好是对应的图片
Sprite spr = Resources.Load<Sprite>("ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/Cloth_Left_Hand_1");//生成精灵
gameObject.GetComponent<SpriteRenderer>().sprite = spr;
然后遍历相同标签的物体
foreach (var cloth_respawn in cloth_respawns)
{
Debug.Log(cloth_respawn.name);
}
这个遍历函数也是正确的,那么就开始判断
foreach (var cloth_respawn in cloth_respawns)
{
string sprspr = Cloth_RPath + cloth_respawn.name;//获得文件路径
Debug.Log(sprspr);//查看 是否是正确的
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;//再看这句话是否正确执行
}
发现大量 要替换的精灵 没有被替换成想要的精灵
看着看着发现是因为,有的 相同标签的物体的精灵 其中有一部分是不用 换精灵的,在
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
使用了Debug.Log(spr.name);
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;//再看这句话是否正确执行
发现报错,spr不存在,没有实例化。既然没有实例化,那么就是为空的,如果不为空,那么Debug.Log(spr.name);说不定就可以
foreach (var cloth_respawn in cloth_respawns)
{
string sprspr = Cloth_RPath + cloth_respawn.name;
Debug.Log(sprspr);
//下面的精灵图片的文件路径
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
if (spr != null)
{
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;
}
}
然后发现的确是这样,当这个精灵为空的时候,UNITY并不知道,然后就出现了错误
![](https://img-blog.csdn.net/20170107213614742?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQnVsYWRlTWlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
发现替换精灵的图片的名称不对,这个时候,就要重新导入图片,使得图片和精灵的名称一致
路径太长ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/Cloth_Left_Hand_1,缺少斜杠
逻辑的方向是对的,就要从一点一滴开始实践
小的毛病很多,这就造成了很多小的逻辑的麻烦
替换精灵,如果精灵已经建立起来,并且有了标签tag的时候,遍历同一个标签的物体,将是最好的打算,然后在
把范围缩小,使得最后找到目标
动态更换物体的2D精灵最简单的两句代码
这个路径是Resources文件夹下面的ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/文件夹的Cloth_Left_Hand_1文件,不管是什么,最好是对应的图片
Sprite spr = Resources.Load<Sprite>("ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/Cloth_Left_Hand_1");//生成精灵
gameObject.GetComponent<SpriteRenderer>().sprite = spr;
然后遍历相同标签的物体
foreach (var cloth_respawn in cloth_respawns)
{
Debug.Log(cloth_respawn.name);
}
这个遍历函数也是正确的,那么就开始判断
foreach (var cloth_respawn in cloth_respawns)
{
string sprspr = Cloth_RPath + cloth_respawn.name;//获得文件路径
Debug.Log(sprspr);//查看 是否是正确的
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;//再看这句话是否正确执行
}
发现大量 要替换的精灵 没有被替换成想要的精灵
看着看着发现是因为,有的 相同标签的物体的精灵 其中有一部分是不用 换精灵的,在
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
使用了Debug.Log(spr.name);
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;//再看这句话是否正确执行
发现报错,spr不存在,没有实例化。既然没有实例化,那么就是为空的,如果不为空,那么Debug.Log(spr.name);说不定就可以
foreach (var cloth_respawn in cloth_respawns)
{
string sprspr = Cloth_RPath + cloth_respawn.name;
Debug.Log(sprspr);
//下面的精灵图片的文件路径
Sprite spr = Resources.Load<Sprite>(sprspr);//生成精灵
if (spr != null)
{
cloth_respawn.gameObject.GetComponent<SpriteRenderer>().sprite = spr;
}
}
然后发现的确是这样,当这个精灵为空的时候,UNITY并不知道,然后就出现了错误
发现替换精灵的图片的名称不对,这个时候,就要重新导入图片,使得图片和精灵的名称一致
路径太长ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/Cloth_Left_Hand_1,缺少斜杠
逻辑的方向是对的,就要从一点一滴开始实践
相关文章推荐
- UNity UGUI 2D图片追随问题
- Unity 2D Sprite 一张精灵图片【自动切割(Automatic )】成【不规则的许多个小图片】的步骤
- KING_UNITY学习之Unity2D代码动态为Sprite Renderer的Sprite赋值sprite精灵图片
- Unity有关Atlas图集的 制作,更新,替换,与有关单独精灵显示相关的一些问题
- 【Unity&NGUI&UGUI】2D精灵物体变色彩透明以及图片高亮变色的方法
- [Unity]截图图片自动转换为2D精灵
- [Unity]箭头2D图片精灵的Pivot锚点怎么设置
- Unity 3D项目问题笔记 //01_在 unity 中切割 2D图片
- 【Unity&DragonBones】图片从DragonBones导入Unity2D像素图片边缘模糊的问题
- [常见问题] 全面理解Unity加载和内存管理
- python 常见面试问题(3)-单例模式/lambda函数/类型转换/文件操作/查询和替换/Fibonacci数列
- Web自动化测试中针对图片验证码问题的常见解决思路
- [推荐] CSS图片垂直居中方法整理集合 !(常见问题解答)
- CSS图片垂直居中方法整理集合 !(常见问题解答)
- 【Unity 3D 游戏引擎】使用 2DToolkit 插件 制作2D精灵动画
- Unity 3D 用图片作背景按钮文字被遮盖的问题
- 常见问题,状态条的隐藏,图片里的按钮
- Unity 用指定图片替换鼠标指针
- 常见数据库中null值替换问题
- Direct2d绘制图片的问题