你的帖子已经被社区标记并被临时隐藏。
顶~
实际应用中好像还是喜欢excel+prefab的工作流多一点~~~

不过也为大佬点赞
谁来验证下原生正常不
我咋看不到附图
cdn崩了,现在修复了。不过原文章不能改了
可以点传送门到商店页面看
新版验证通过
更新了1.0.3版本
兼容3.7.x
大部分平台发布测试通过
传送门:Cocos Store
ScriptableAsset
简介
提供和Unity的ScriptableObject的一样的功能
方便配置复杂结构的数据,方便协作,方便引用其他资源
和平时配置prefab的component数据一样,但不需要节点,不需要挂组件
引擎版本支持
>= 3.7.0
3.7.x的对于显示有些问题

不影响正常使用
测试的发布平台
| H5 | 微信小游戏 | Android原生 | iOS原生 | 抖音小游戏 | OPPO小游戏 | vivo小游戏 |
| — | --------- | ----------- | ------- | -------- | ------- | ------- |
|
|
|
|
|
|
|
|
特性和规划
-
[x] 自定义ScriptableAsset类型
-
[x] 预览和编辑
-
[x] 拖拽赋值到组件字段(指定自定义ScriptableAsset类型)识别
-
[x] 使用装饰器添加右键创建按钮
-
[x] 兼容3.7.x
-
[x] 测试更多发布平台
-
[ ] 支持搜索
-
[ ] 支持自定义ScriptableAsset的Inspector
使用
示例项目
Gitee scriptableasset_example
GitHub scriptableasset_example
创建
自动添加到右键菜单,创建自定义类型数据文件
ps:需要复制示例的脚本模板到项目中:
.creator\asset-template\typescript\ScriptableAssetScriptTemplate
可视化修改配置
修改配置和修改Component的字段数据一样
可以使用任何CocosCreator提供的属性装饰器
参考更多用法:Cocos Creator 3.8 手册 - 装饰器使用
引用和加载
和其他资源(cc.Prefab、cc.AudioClip、等)一样,进行引用和加载,以及对依赖资源加载,无需而外处理
被引用
import { _decorator, Component, Node } from 'cc';
import { bh } from 'db://scriptable-asset/scriptable_runtime';
import { CharSA } from './scripts/CharSA';
import { CharRender } from './scripts/CharRender';
const { ccclass, property } = _decorator;
@ccclass('TestRefScriptableAsset')
export class TestRefScriptableAsset extends Component {
// private _charData: CharSA;
// @property(bh.ScriptableAsset)
// get charData(): CharSA{
// return this._charData;
// };
// set charData(value: CharSA){
// debugger
// this._charData = value;
// }
// @bh.scriptableAsset
// charData: CharSA;
@property(CharRender)
charRender: CharRender;
@property(CharSA)
charData: CharSA;
start() {
console.log(this.charData.charName);
this.charRender.setCharAsset(this.charData);
}
update(deltaTime: number) {
}
}
界面
动态加载
import { _decorator, assetManager, Component, director, Node } from 'cc';
import { CharRender } from './CharRender';
import { CharSA } from './CharSA';
const { ccclass, property } = _decorator;
@ccclass('TestLoadScriptableAssetDynamic')
export class TestLoadScriptableAssetDynamic extends Component {
/**
*
*/
@property(CharRender)
charRender: CharRender = null;
@property
assetPath: string = "char/char_datas/CharSA"
start() {
}
update(deltaTime: number) {
}
loadScriptableAsset() {
assetManager.loadBundle('scriptable_asset_test_res', (err, bundle) => {
if (err) {
console.error(err);
return;
}
bundle.load(this.assetPath, (err, asset:CharSA) => {
if (err) {
console.error(err);
return;
}
console.log(asset);
this.charRender.setCharAsset(asset);
});
});
}
}
已知问题
-
自定义且用ccclass装饰器的类,非继承Component的,比如CustomClasss,需要赋予初始值
-
使用具体的ScriptableAsset类型会字段赋值旁边的打开搜索功能会搜索不到,需要使用基类ScriptableAsset作为字段装饰器类型,或者直接使用
@bh.scriptableAsset来标记@bh.scriptableAsset charData: CharSA; -
删除ScriptableAsset脚本,会让依赖的地方显示为UnknownType,恢复脚本后,重启编辑器即可
-
支持3.8.2版本的引擎
其他作品
-
编辑器控制台增强插件 EditorConsoleEnhancer
-
让你5000+资源的项目开发如燕般轻盈流畅。 Aswallow
-
[完美typescript插件模板]Cocos Store


