Cocos Creator 能修改默认字体吗?

内容如题,我想把游戏里面的默认字体修改掉,需要怎么弄?

你用的什么版本的 creator? 最新的 creator 的系统字体是可以指定 font family 的。

1.5.0版本

我目前用的是1.5.0版本,最新的版本是哪个版本?是论坛里的beta版么?

现在官方可以下载 1.5.1 正式版本了,你用这个版本试试吧。

我刚才下载了1.5.1版本,不过这个貌似是针对放到场景上去的,只是针对单个label组件的,我想知道有没有修改默认的,以后创建Label组件后不需要再特别的指定他的字体

那没有,你可以自己封装一个 label 组件,然后设置 fontFamily,在游戏里面都使用你封装的这个 lable 就好了呀。

看来应该弄一个默认字体,绝大部分label都是一个相同的字体,每个都设置,好麻烦,漏了也不好看。

是的啊,有默认字体设置比较好

你可以弄一个 prefab,这个 prefab 设置好字体,其他地方要用 label 的时候,直接把 prefab 拖成一个节点即可。

1赞

引擎可以将这事情做了,你那种方法其实挺麻烦的

别人问的是引擎层面怎么解决 你告诉别人怎么用你的产品

如何绕过引擎的限制或是实现引擎还没做到的功能, 这叫做workaround.
开发团队的能力有限, 但是需求是无限的, 所以至少我用过的商业引擎那么多种,
workaround总是多多少少都有. 开发团队会把资源用在最重要(至少他们认为)
的问题上面.

不过Cocos Creator那么久了, 在字体字形这一块一直相当保守, 不太明白为什么.
提问得到的答案也都是之后有空再加一下…

如果是開發到一半,想要修改預設字體的同學,用以下方式,可以不用修改原本Label的設置:
(Cocos Creator v1.9.1, TypeScript)

  1. 新增腳本SetFontFamilyOfAllLabels.ts(如附)
  2. 在場景中會使用到label的root node上,掛上SetFontFamilyOfAllLabels.ts,並設置fontFamily參數內容。腳本會在啟動時,修改該node下所有未指定font的Label的fontFamily內容。

SetFontFamilyOfAllLabels.ts

const {ccclass, property} = cc._decorator;

@ccclass
export class SetFontFamilyOfAllLabels extends cc.Component {
    @property
    public fontFamily:string = ""

    onLoad(){
        // parse label
        let labels = this.node.getComponentsInChildren(cc.Label);

        for(let label of labels){
            if (!label.font){
                // 沒有指定字型的話,才要設定系統字
                label.fontFamily = this.fontFamily;
            }   
        }
    }
}
2赞

如果是一般文字只有單色, 沒有變化, 這麼做是可以的.

Label效能比RichText好是沒錯, 不過我遇到的問題是美術同學的設計
要使用font family, 又要加粗…而RichText組件又不能指定font family
(用字型本身的加粗), 用label outline效果又醜, 只能跟團隊說目前
Cocos Creator有這樣的限制, 請美術同學修改設計.看是不要加粗,
還是改用圖形字(然後多國語言很麻煩).

然後剛好別的團隊用的老的framework(當然遠不如cocos creator好)
又沒這問題, 我這個打算在公司推廣cocos creator的人立場就很難看了…

Label粗體字可以掛這個腳本(如附):


(Cocos Creator v1.9.1, TypeScript)

SetLabelBold.ts

const {ccclass, property} = cc._decorator;

@ccclass
export class SetLabelBold extends cc.Component {
    @property
    public bold:boolean = true;

    onLoad(){
        (<any>this.getComponent(cc.Label))._sgNode.enableBold(this.bold);
    }
}
1赞

謝啦, 都忘了有可以直接調用_sgNode這招…

大佬好
自己封装一个Label组件的预制体,,,能不能 添加到 编辑器 菜单栏里 呢????
否则只能 每次都手动拖