游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:554

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 1416|回复: 10

[脚本] Unity Editor中怎么给属性面板中的Sprite赋值

[复制链接]  [移动端链接]
6蛮牛粉丝
1079/1500
排名
2460
昨日变化
9

25

主题

152

帖子

1079

积分

Rank: 6Rank: 6Rank: 6

UID
149679
好友
0
蛮牛币
1001
威望
0
注册时间
2016-5-24
在线时间
358 小时
最后登录
2018-9-19
发表于 2018-3-8 18:41:49 | 显示全部楼层 |阅读模式
20蛮牛币
本帖最后由 zzzsss 于 2018-3-8 18:43 编辑

自己在Editor中生成了一个类的asset文件,然后想把一些值赋值过去,因为太多了,所以想通过Editor代码实现。其他几个属性的赋值都搞定了,但是sprite不知道怎么弄。通过文件加载图片,然后赋值过去好像不行,可能Unity这个资源的赋值应该是资源的一个编号,然后加载的时候通过编号加载的。
QQ截图20180308183724.jpg

回复

使用道具 举报

4四处流浪
424/500
排名
7504
昨日变化
4

0

主题

36

帖子

424

积分

Rank: 4

UID
33761
好友
0
蛮牛币
758
威望
0
注册时间
2014-7-11
在线时间
230 小时
最后登录
2018-9-18
发表于 2018-3-8 18:41:50 | 显示全部楼层
通过AssetDataBase读取到Sprite类型的资源,然后再使用SerializedObject进行赋值

回复

使用道具 举报

5熟悉之中
745/1000
排名
3545
昨日变化
19

2

主题

75

帖子

745

积分

Rank: 5Rank: 5

UID
9302
好友
1
蛮牛币
1509
威望
0
注册时间
2013-12-1
在线时间
276 小时
最后登录
2018-9-19
发表于 2018-3-9 09:21:27 | 显示全部楼层

自动加载Sprite

自动加载Sprite

回复

使用道具 举报

6蛮牛粉丝
1079/1500
排名
2460
昨日变化
9

25

主题

152

帖子

1079

积分

Rank: 6Rank: 6Rank: 6

UID
149679
好友
0
蛮牛币
1001
威望
0
注册时间
2016-5-24
在线时间
358 小时
最后登录
2018-9-19
 楼主| 发表于 2018-3-9 14:26:47 | 显示全部楼层

我说的代码赋值,而且每个图片都不一样,不是一样的
[发帖际遇]: zzzsss 在论坛发帖时没有注意,被小偷偷去了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1079/1500
排名
2460
昨日变化
9

25

主题

152

帖子

1079

积分

Rank: 6Rank: 6Rank: 6

UID
149679
好友
0
蛮牛币
1001
威望
0
注册时间
2016-5-24
在线时间
358 小时
最后登录
2018-9-19
 楼主| 发表于 2018-3-9 14:57:00 | 显示全部楼层
devilwarrior 发表于 2018-3-9 09:39
通过AssetDataBase读取到Sprite类型的资源,然后再使用SerializedObject进行赋值

谢谢,可以了,AssetDatabase.LoadAssetAtPath加载资源就行了,Resources加载也行,但是图片都要在Resources文件里比较麻烦

回复

使用道具 举报

4四处流浪
409/500
排名
6140
昨日变化
1

0

主题

49

帖子

409

积分

Rank: 4

UID
171301
好友
0
蛮牛币
633
威望
0
注册时间
2016-9-23
在线时间
134 小时
最后登录
2018-8-22
发表于 2018-3-9 15:14:33 | 显示全部楼层
zzzsss 发表于 2018-3-9 14:57
谢谢,可以了,AssetDatabase.LoadAssetAtPath加载资源就行了,Resources加载也行,但是图片都要在Resour ...

直接用ScriptableObject赋值是不行的;像int float 这样的值类型这么赋值是可以;
但像Texture2D,Sprite这样的引用类型是不行的,你赋值后Asset与Texture,Sprite的引用的关系只是临时保存在内存中,Texure,Sprite的guid没有被直接写入磁盘上Asset文件中,当你重新打开工程的时候会发现之前赋值设置的Sprite又丢失了

回复

使用道具 举报

4四处流浪
409/500
排名
6140
昨日变化
1

0

主题

49

帖子

409

积分

Rank: 4

UID
171301
好友
0
蛮牛币
633
威望
0
注册时间
2016-9-23
在线时间
134 小时
最后登录
2018-8-22
发表于 2018-3-9 15:21:49 | 显示全部楼层
zzzsss 发表于 2018-3-9 14:57
谢谢,可以了,AssetDatabase.LoadAssetAtPath加载资源就行了,Resources加载也行,但是图片都要在Resour ...

[AppleScript] 纯文本查看 复制代码
    [MenuItem("MyAsset/SetValue")]
    static void SetValue()
    {
        AssetDemo originalAsset = AssetDatabase.LoadAssetAtPath<AssetDemo>("Assets/MyAsset.asset");
        AssetDemo newAd = ScriptableObject.CreateInstance<AssetDemo>();
        newAd.floatValue = originalAsset.floatValue;
        newAd.strValue = "newValue";
        newAd.textureValue = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/111.png");
        newAd.spriteValue = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/Circle.png");

        AssetDemo[] array = new AssetDemo[] { newAd };
        InternalEditorUtility.SaveToSerializedFileAndForget(array, "Assets/MyAsset.asset", false);
        AssetDatabase.Refresh();
    }


InternalEditorUtility.SaveToSerializedFileAndForget 用这个方法保存下 Asset才会更新你新添加的Sprite的guid信息,并又不会破坏其他脚本对Asset的引用 关系

回复

使用道具 举报

6蛮牛粉丝
1079/1500
排名
2460
昨日变化
9

25

主题

152

帖子

1079

积分

Rank: 6Rank: 6Rank: 6

UID
149679
好友
0
蛮牛币
1001
威望
0
注册时间
2016-5-24
在线时间
358 小时
最后登录
2018-9-19
 楼主| 发表于 2018-3-9 17:00:59 | 显示全部楼层
sh348862335 发表于 2018-3-9 15:21
[mw_shl_code=applescript,true]    [MenuItem("MyAsset/SetValue")]
    static void SetValue()
    {

不用的,我是通过Resources加载Asset文件,然后直接修改加载出来类的数据就行了,你那是新创建一个的一个实例,然后需要保存。

回复

使用道具 举报

4四处流浪
409/500
排名
6140
昨日变化
1

0

主题

49

帖子

409

积分

Rank: 4

UID
171301
好友
0
蛮牛币
633
威望
0
注册时间
2016-9-23
在线时间
134 小时
最后登录
2018-8-22
发表于 2018-3-9 17:41:13 | 显示全部楼层
zzzsss 发表于 2018-3-9 17:00
不用的,我是通过Resources加载Asset文件,然后直接修改加载出来类的数据就行了,你那是新创建一个的一个 ...

你重新打开工程 看看 你修改后的 东西还在不在

回复

使用道具 举报

4四处流浪
409/500
排名
6140
昨日变化
1

0

主题

49

帖子

409

积分

Rank: 4

UID
171301
好友
0
蛮牛币
633
威望
0
注册时间
2016-9-23
在线时间
134 小时
最后登录
2018-8-22
发表于 2018-3-9 17:51:46 | 显示全部楼层
zzzsss 发表于 2018-3-9 17:00
不用的,我是通过Resources加载Asset文件,然后直接修改加载出来类的数据就行了,你那是新创建一个的一个 ...

如果你要说 你重新打开工程后 你用代码设置的Sprite引用还在的 麻烦你告诉我下你Unity的版本哈 我用的5.5.4 打开后 用代码设置的Sprite 是丢失的

回复

使用道具 举报

6蛮牛粉丝
1079/1500
排名
2460
昨日变化
9

25

主题

152

帖子

1079

积分

Rank: 6Rank: 6Rank: 6

UID
149679
好友
0
蛮牛币
1001
威望
0
注册时间
2016-5-24
在线时间
358 小时
最后登录
2018-9-19
 楼主| 发表于 2018-3-12 09:53:48 | 显示全部楼层
sh348862335 发表于 2018-3-9 17:51
如果你要说 你重新打开工程后 你用代码设置的Sprite引用还在的 麻烦你告诉我下你Unity的版本哈 我用的5.5 ...

用的5.5.3,重新打开资源是没问题的。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表