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