通知设置 新通知
cocos3.8.7中支持颜色混合
CocosCreator • GodChouyu 发表了文章 • 0 个评论 • 8 次浏览 • 11 小时前
两种方法。
1.可以修改源码的情况下,修改BlendMode.ts文件的apply函数。
public static apply(node: Node, blendMode: BlendMode) {
let f = factors[<number>blendMode];
node.components.forEach(component => {
if (component instanceof UIRenderer) {
component["_srcBlendFactor"] = f[0];
component["_dstBlendFactor"] = f[1];
}
})
}2.不修改源码,覆盖GObject的setup_beforeAdd方法。随意一个脚本中添加并调用Init();
public static init() {
const factors = [
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //normal
[gfx.BlendFactor.ONE, gfx.BlendFactor.ONE], //none
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE], //add
[gfx.BlendFactor.DST_COLOR, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //mul
[gfx.BlendFactor.ONE, gfx.BlendFactor.ONE_MINUS_SRC_COLOR], //screen
[gfx.BlendFactor.ZERO, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //erase
[gfx.BlendFactor.ZERO, gfx.BlendFactor.SRC_ALPHA], //mask
[gfx.BlendFactor.ONE_MINUS_DST_ALPHA, gfx.BlendFactor.DST_ALPHA], //below
[gfx.BlendFactor.ONE, gfx.BlendFactor.ZERO], //off
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom1
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom2
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom2
];
const GObjectSetupBeforeAdd = fgui.GObject.prototype.setup_beforeAdd;
fgui.GObject.prototype.setup_beforeAdd = function (this: fgui.GObject, buffer: ByteBuffer, beginPos: number) {
GObjectSetupBeforeAdd.call(this, buffer, beginPos);
let f = factors[<number>this.blendMode];
this.node.components.forEach(component => {
if (component instanceof cc.UIRenderer) {
component["_srcBlendFactor"] = f[0];
component["_dstBlendFactor"] = f[1];
}
})
}
}
因为blend模块的相关代码没有导出,所以先这么处理。factors数组是从fgui源码中复制出来的。
_srcBlendFactor和_dstBlendFactor两个属性的cocos源码在cocos源码地址。
已经提交pr,谷主看到的话希望能合并一下。
查看全部
两种方法。
1.可以修改源码的情况下,修改BlendMode.ts文件的apply函数。
public static apply(node: Node, blendMode: BlendMode) {
let f = factors[<number>blendMode];
node.components.forEach(component => {
if (component instanceof UIRenderer) {
component["_srcBlendFactor"] = f[0];
component["_dstBlendFactor"] = f[1];
}
})
}2.不修改源码,覆盖GObject的setup_beforeAdd方法。随意一个脚本中添加并调用Init();public static init() {
const factors = [
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //normal
[gfx.BlendFactor.ONE, gfx.BlendFactor.ONE], //none
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE], //add
[gfx.BlendFactor.DST_COLOR, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //mul
[gfx.BlendFactor.ONE, gfx.BlendFactor.ONE_MINUS_SRC_COLOR], //screen
[gfx.BlendFactor.ZERO, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //erase
[gfx.BlendFactor.ZERO, gfx.BlendFactor.SRC_ALPHA], //mask
[gfx.BlendFactor.ONE_MINUS_DST_ALPHA, gfx.BlendFactor.DST_ALPHA], //below
[gfx.BlendFactor.ONE, gfx.BlendFactor.ZERO], //off
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom1
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom2
[gfx.BlendFactor.SRC_ALPHA, gfx.BlendFactor.ONE_MINUS_SRC_ALPHA], //custom2
];
const GObjectSetupBeforeAdd = fgui.GObject.prototype.setup_beforeAdd;
fgui.GObject.prototype.setup_beforeAdd = function (this: fgui.GObject, buffer: ByteBuffer, beginPos: number) {
GObjectSetupBeforeAdd.call(this, buffer, beginPos);
let f = factors[<number>this.blendMode];
this.node.components.forEach(component => {
if (component instanceof cc.UIRenderer) {
component["_srcBlendFactor"] = f[0];
component["_dstBlendFactor"] = f[1];
}
})
}
}因为blend模块的相关代码没有导出,所以先这么处理。factors数组是从fgui源码中复制出来的。
_srcBlendFactor和_dstBlendFactor两个属性的cocos源码在cocos源码地址。
已经提交pr,谷主看到的话希望能合并一下。
在编辑器中将滑动条属性中的最大值设置为0时可能会报错
回复编辑器使用 • CursedOctopus 发起了问题 • 1 人关注 • 0 个回复 • 38 次浏览 • 2025-11-07 16:53
FairyEditor FPackage GetItemByPath用法
编辑器使用 • misakacirno 发表了文章 • 1 个评论 • 47 次浏览 • 2025-11-04 16:18
例如"/textures/shop/shop_icon_01"
例如"/textures/shop/shop_icon_01"
关于分支发布后组件的型别消失问题
CocosCreator • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 69 次浏览 • 2025-11-03 22:29
导入的是jpg格式图片,如何导出jpg格式的图片。
Unity • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 67 次浏览 • 2025-11-03 22:20
插件里FPackage中的ImportResource函数要怎么使用?
回复编辑器使用 • misakacirno 回复了问题 • 1 人关注 • 3 个回复 • 228 次浏览 • 2025-11-03 17:25
Fgui 插件Api CS.System.Array.CreateInstance()
Unity • 谷主 回复了问题 • 1 人关注 • 2 个回复 • 95 次浏览 • 2025-11-02 16:27
列表中组件部分资源无法被裁剪
Unity • 谷主 回复了问题 • 2 人关注 • 2 个回复 • 61 次浏览 • 2025-11-02 16:26
FairyGUI 在 Unity 中异步加载字体
Unity • hwei 发表了文章 • 0 个评论 • 129 次浏览 • 2025-10-23 17:07
为了解决这个问题,我们不用等待字体下载好,先提前显示 UI。
此时 UI 中的中文可能会无法显示。
不过没关系,等字体下载好再用下面这个函数来加载字体:
public static void SetFont(string name, Font font)
{
// 如果其他 UI 已经用过 name 字体,则获得该字体的动态字体对象,否则 GetFont 会自动返回一个默认动态字体。
var dynamicFont = FairyGUI.FontManager.GetFont(name) as FairyGUI.DynamicFont;
// 无论如何,更新这个字体背后的 Unity Font 对象
dynamicFont.nativeFont = font;
// version 变化会触发使用到这个字体的 UI 刷新
dynamicFont.version += 1;
}于是就做到了异步加载字体。
进一步优化:先用一个体积比较小的字体覆盖所有 UI 用到的字体,让中文先可读。然后等体积大的正式字体下载完毕再覆盖上去,提升画面效果。 查看全部
为了解决这个问题,我们不用等待字体下载好,先提前显示 UI。
此时 UI 中的中文可能会无法显示。
不过没关系,等字体下载好再用下面这个函数来加载字体:
public static void SetFont(string name, Font font)于是就做到了异步加载字体。
{
// 如果其他 UI 已经用过 name 字体,则获得该字体的动态字体对象,否则 GetFont 会自动返回一个默认动态字体。
var dynamicFont = FairyGUI.FontManager.GetFont(name) as FairyGUI.DynamicFont;
// 无论如何,更新这个字体背后的 Unity Font 对象
dynamicFont.nativeFont = font;
// version 变化会触发使用到这个字体的 UI 刷新
dynamicFont.version += 1;
}
进一步优化:先用一个体积比较小的字体覆盖所有 UI 用到的字体,让中文先可读。然后等体积大的正式字体下载完毕再覆盖上去,提升画面效果。
在cocos creator中3.8.4关联系统失效
CocosCreator • loop 回复了问题 • 2 人关注 • 2 个回复 • 162 次浏览 • 2025-10-13 20:31
[插件]invalid arguments to ToHexString异常问题
编辑器使用 • cnscj 回复了问题 • 2 人关注 • 2 个回复 • 158 次浏览 • 2025-10-13 09:47
Stage没有SetSize为屏幕的尺寸,而是设置为了一个小于屏幕的尺寸,在Unity正常捕获触摸,在其他平台触摸位置偏移较大
Unity • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 149 次浏览 • 2025-10-12 10:07
修改资源路径,引用这些资源的xml里的fileName不会马上更新,需要修改这个界面的任意属性才会更新
编辑器使用 • 谷主 回复了问题 • 2 人关注 • 2 个回复 • 193 次浏览 • 2025-10-11 16:31
creator 3.8.7引擎下,textinput的bug
CocosCreator • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 179 次浏览 • 2025-10-11 16:26