GPU駆動の Unity 高性能テーブルプラグイン
| 3D デモ | UI Canvas デモ |
|---|---|
![]() |
![]() |
Assets/Scenes/EasyTableGPUDemo3D.unity |
Assets/Scenes/EasyTableGPUDemoUI.unity |
| スタイル比較(3スキン S1 / S2 / S3) |
|---|
![]() |
Assets/Plugins/WPZ0325/EasyTableGPU/Demo/Scenes/EasyTableGPUStylesCompare.unity |
EasyTableGPU は GPU Mesh レンダリング による Unity 向け高性能テーブルプラグインです。従来の UGUI で大量の UI GameObject を配置する方式とは異なり、手続き型 Mesh + カスタム Shader によってすべてのセルを直接 GPU で描画し、Draw Call と CPU 負荷を大幅に削減します。大規模データのテーブル表示に最適です。
- GPU 高速レンダリング — 単一の Mesh + Shader でテーブル全体を描画。UGUI の組み合わせではなく、大量セルでも高フレームレートを維持
- デュアルレンダーバックエンド — 3D 空間(MeshFilter + MeshRenderer)と UI Canvas(CanvasRenderer)の両方に対応
- 仮想ビューポート — 可視領域の行と列のみを描画。描画複雑度は O(visible) で、総データ量に依存しない
- インタラクション機能 — セルクリック、行ハイライト、トグル列、ボタン列、垂直/水平スクロール
- ScriptableObject 設定 — すべてのスタイル(色、フォントサイズ、列幅など)は単一の Style アセットで集中管理。複数スキン対応
- SDF フォントレンダリング — TextMeshPro Signed Distance Field により、任意の拡大縮小でジャギーのないクリアな文字を実現。中国語・日本語・韓国語・ラテン文字に対応。
TableStyleConfig (スタイル設定)
│
TableGpuController (コアコントローラ)
├── TableFontHelper (フォントメトリクス)
├── TableMeshBuilder (頂点ビルダ)
└── ITableRenderer (レンダーバックエンドインターフェース)
├── MeshTableRenderer (3D: MeshRenderer)
└── CanvasTableRenderer (UI: CanvasRenderer)
基本概念:Controller → Builder が頂点データを生成 → Renderer が GPU に送信。バックエンドはプラグイン可能で、新しい描画方式は ITableRenderer を実装するだけで追加できます。
- プロジェクトを初めて開くと、TextMeshPro Essential Resources のインポートが促されます。「Import」をクリックしてください。
Window → TextMeshPro → Font Asset Creatorで SDF フォントアセットを作成します:- フォントファイル:Noto Sans CJK を推奨(日中韓・ラテン文字対応)
- Atlas Resolution:
4096 × 4096 - Character Set: 必要な文字セットを選択
- Hierarchy で
TableGpuControllerを選択し、生成した SDF フォントアセットを_fontAssetフィールドにドラッグします。
EasyTableGPUDemo3D.unityを開く- 再生モードに入り、
Sキーでテストデータを生成 TableGpuDemo3D.csで API の使い方を参照
EasyTableGPUDemoUI.unityを開く- 再生モードに入り、
Sキーでテストデータを生成 TableGpuDemoUI.csで API の使い方を参照
デモ操作:
| 操作 | 入力 |
|---|---|
| データ生成 (100行×10列) | S |
| テーブルクリア | A |
| 行を追加 | Z |
| 最終行を削除 | X |
| トグル切替 | T |
| 垂直スクロール | マウスホイール |
| 水平スクロール | Shift + マウスホイール |
| クリック操作 | マウス左ボタン |
現在のバージョンは初期開発段階であり、既知のバグが存在します
- シーン読み込み後にコンポーネント参照の手動調整が必要な場合があります
- 極端なスクロール位置で HitTest が若干ずれることがあります
ScreenToTablePointは失敗検出にセンチネル値を使用しており、境界ケースで誤判定が発生する可能性があります- エディタ拡張(CustomEditor、PropertyDrawer)は未実装です
- プラグインにはデフォルトフォントが同梱されていません。TMP SDF フォントアセットを手動で作成し、Controller に割り当てる必要があります。
問題は今後のバージョンで順次修正予定です。Issue・PR を歓迎します。
2021.3.21f1 (Built-in Render Pipeline)
MIT


