label有没有办法在代码改string之后,还可以获得在编辑器中设置的值

如我在编辑器中设置“这是{item}",在代码中设置后,变成了"这是枪”,我还想能获得“这是{item}"

替换之前保存一下就好了

初始化脚本

onLoad(){
    yourNode["_string"]=yourNode.getComponent(Label).string
}

其他地方或其他文件用的时候

yourNode.getComponent(Label).string=yourNode["_string"]

我现在就是在start时,先把label里的值取出来存成全局变量,然后再赋值替换,感觉有点麻烦,每个类都要这样写,想有简单点的。如果没有就只能自己继承Label加个tempString属性来了

这也是一个思路,只是还是得每个类去写一遍

image
可以参考一下 扩展cc.Label的原型属性 在.prototype上存取数据

Object.defineProperty(Label.prototype, ‘string’, {
set(value) {},
get() {}
});
这样可以不

1赞

昨天我也回了个扩展原型的 不过又被我撤回了 :joy: 本质还是属性存取 所以应该也不算污染原型

不过我的代码有个问题就是修改之前要先触发获取一下原始的字符串 后面就没想好怎么弄了

image
修改原型还是不太敢写啊 写不好很容易污染原型 虽然达到帖子的需求了 但我觉得还是就在脚本onLoad的时候存起来比较好

可以直接拓展Label的onLoad函数
image

:ok_hand::rofl: :ok_hand: 可以可以 方便多了

就是有两个小问题 如果不触发.string的setter的话 直接调用.origin无法获取到值 另外如果.origin也可以被set

试了一下还是绕不开.string的setter的影响 我上面的代码虽然长了点 但测试后基本没啥问题

有没有可能origin可以不用Obejct.defineProperty定义,我直接在onLoad里面调用就相当于定义origin的变量 你可以直接使用

如果label是预制体的一部分,那可以从预制体对象里面读取到原始值
预制体相当于是模版

你打印一下就知道了 说的可能不是一码事

你应该没试过吧?
image image

抱歉我的 你是对的 昨天可能迷糊了

我是建议尽量不要去重新定义已经存在的属性 因为你不知道cocos会改成什么样 :14: