Flutter Flameで独自フォントを設定して使う方法
Flutter Flame でゲーム制作をする時に、独自フォントを使いたい場合がある。
今回は、Flameで独自フォントを設定して使う方法を解説する。
Flameで独自フォントを使う方法
Flameで独自フォントを使うには、以下の手順をやるとよい。
1. Google Fontsなどからフォントをダウンロードする
まず、Google Fontsなどから使いたいフォントをダウンロードする。
今回は、NotoSansJPを使う。
Noto Sans Japanese - Google Fonts
フォントは、プロジェクトのassets/fontsディレクトリ内に保存するとよい。
NotoSansはRegularとかBoldとか色々あるが、使うものだけ保存すればよい。
2. pubspec.yamlにフォントを登録する
pubspec.yamlにフォントを登録する。
pubspec.yamlに登録することで、Flutter側が良い感じにフォントを読み込んでくれるようになる。
例えば、以下のようにする。
flutter:
  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true
  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/images/
    - assets/fonts/
  fonts:
    - family: NotoSans
      fonts:
        - asset: assets/fonts/NotoSansJP-Regular.ttf
公式ドキュメントを読むと、他にも色々と設定できるようだが、フォントで そんなに凝ったことをやらないので、上記のようなものでよいだろう。
もし、BoldとかItalicとかも使いたい場合は、以下のようにする。
  fonts:
    - family: NotoSans
      fonts:
        - asset: assets/fonts/NotoSansJP-Regular.ttf
        - asset: assets/fonts/NotoSansJP-Bold.ttf
          weight: 700
        - asset: assets/fonts/NotoSansJP-Italic.ttf
          style: italic
3. FlameのTextPaintでフォントを指定して使う
ここまで来ると、後はコードを書くだけ。 雰囲気としては以下のように使うとOK。
library;
import 'package:flutter/material.dart';
  @override
  Future<void> onLoad() async { 
    final textPaint = TextPaint(
        style: TextStyle(
            fontFamily: 'NotoSans', // pubspec.yaml で定義したフォント名
            fontSize: 16,
            color: Colors.white,
        ),
        );
    final textComponent = TextComponent(
        text: 'Hello, Flame!',
        position: Vector2(100, 100),
        textRenderer: textPaint,
        );
    add(textComponent);
  }
Flameでは標準では、日本語テキストが上手く表示できない。 このように独自フォントを追加することで、日本語テキストも問題なく表示できるようになる。
試したけどできなかったこと。
google_fontsというライブラリがあるのでそれを使え、という記事もあるが、
ボクの環境では上手く行かなかった。
何かやり方が不味いのか?
一応参考までに。
参考文献
- コード内でのフォントの使い方: Text Rendering — Flame
 - flameだけでなくFlutter全般での独自フォントの設定方法。こちらの方が詳しいか: Use a custom font | Flutter