您的位置:首页 > 移动开发 > Unity3D

【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并不知道,然后就出现了错误



发现替换精灵的图片的名称不对,这个时候,就要重新导入图片,使得图片和精灵的名称一致

路径太长ImageSprite/BodyCloth/Clothtest001/Clothtest001B/hand/Cloth_Left_Hand_1,缺少斜杠

逻辑的方向是对的,就要从一点一滴开始实践
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: