17. rexUIのninePatch2
はじめに
アップグレードのカード画像を作成するために、
PhaserのrexUI プラグインの ninePatch2 を使いました。
rexUIとは?
rexUIは、Phaser3向けの高機能UIプラグイン群です。ボタン、スライダー、ダイアログ、レイアウトなど、標準Phaserにはない多彩なUIコンポーネントを簡単に使えるようになります。
インストール方法
npmで簡単に導入できます。
npm install phaser3-rex-pluginsセットアップ方法
PhaserのGameConfigで、sceneプラグインとして登録します。
このプロジェクトでは main.ts で以下のように設定しています。
import RexUIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin.js";
const config: Phaser.Types.Core.GameConfig = {
// ...existing code...
plugins: {
scene: [
{
key: "rexUI",
plugin: RexUIPlugin,
mapping: "rexUI",
},
],
},
};これで、各Sceneから this.rexUI でrexUIの機能が使えるようになります。
TypeScript補完を効かせるため、型定義も追加しています(phaser.d.ts)。
import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin";
declare module "phaser" {
interface Scene {
rexUI: UIPlugin;
}
}ninePatch2の使い方
ninePatch2は、9分割画像(9-patch)を使って、可変サイズのパネルやボタンを美しく描画できるUIコンポーネントです。
+----+------+----+
| TL | T | TR |
+----+------+----+
| L | C | R |
+----+------+----+
| BL | B | BR |
+----+------+----+- TL,TR,BL,BR: 四隅の角 → 固定サイズ
- T,B: 上下の辺 → 横に伸縮
- L,R: 左右の辺 → 縦に伸縮
- C: 中央 → 横にも縦にも伸縮
角部分はそのまま使用し、中央や辺は伸ばしてサイズにフィットさせることで、 一つの画像でいろんなサイズのUIに対応可能です。
ninePatchは9枚の画像を利用しますが、ninePatch2では1枚の画像を9つに分けて使用することができるため、
今回はninePatch2を利用しました。
画像の準備
今回使ったのは、下記画像です。16x16ピクセルで、縦横ともに[6,4,6]に区切ることができます。
基本的な使い方
例えば、アップグレードカードの背景パネルに使う場合は以下のように記述します。
const panel = this.scene.rexUI.add.ninePatch2({
x: 0,
y: 0,
width: this.cardWidth,
height: this.cardHeight,
key: "ui_nine_panel", // 9-patch用の画像アセット
columns: [6, undefined, 6], // 左・中央・右の幅
rows: [6, undefined, 6], // 上・中央・下の高さ
})
.setOrigin(0, 0)
.setScrollFactor(0);columns/rowsで9分割のサイズを指定します。中央部分はundefinedで自動伸縮。keyには事前にロードした9-patch画像のキーを指定します。
まとめ
ninePatch2を使ってカード背景を生成しました。

