**「たった5つのタイルで実装するオートタイル」**

2026/02/08 10:37

**「たった5つのタイルで実装するオートタイル」**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

(その他は元のまま)**

Summary

この記事では、コーナー、サイド、対角コーナー、内向きコーナー、フル/ミドル5種類のベースタイルだけを使って、Godot 用に高速で低アセットな自動タイルシステムを構築する方法 を説明しています。これらのタイルをプログラム上で回転・反転させることで、全 16 通りのビジュアルパーミュテーション を生成します。

  • 2 層の TileMap を使用:
    • 物理層:コライダーを格納
    • ビジュアル層:スプライトは –0.5 タイルオフセット で描画され、タイルの角が重なるように表示

各ビジュアルセルについて、その四隣の物理セルから得られる 4 ビットマスク がどのパーミュテーションを表示するか決定します。パーミュテーションはバイナリ値でインデックス付けされた配列に格納され、例として Godot コードでは

tileArray
に各ケースの
Vector2i
座標が示されています。

ゲームプレイ中にプレイヤーはマウス入力でタイルを配置・削除できます。変更後はシステムが隣接セルのマスクを再計算し、ビジュアル層を更新してグラフィックと衝突判定を同期させます。

  • ヘルパー関数 は初期配置後にすべてのビジュアルをリフレッシュでき、エディタ内の UI ボタンで呼び出されます。

レベルデータ(

tile_set
パスと両層のセル辞書配列を含む)は dictionary にシリアライズされ、実行時に user:// に保存されます(res:// は読み取り専用)。
EditorPlugin
_enter_tree()
/
_exit_tree()
コールバックで追加された EditorInspectorPlugin が「Import」ボタンを提供し、user:// ファイルを読み込み、重複した WorldMap ノードを再構築して該当する res:// シーンを書き換え、エディタのファイルシステムを更新します。

タイル配置、レベル管理、およびツール機能に関する完全なソースコードは著者の GitHub で入手可能です。記事では jess::codes、Nonsensical 2D、Oskar Stålberg などのリソースも引用しています。

本文

5種類のタイルで自動タイル化

著者: [あなたの名前]
日付: 2026年2月5日


概要

自動タイル化は、2Dゲーム開発において非常に便利な手法です。セルを「占有」か「空白」かでマークし、エディターが適切なビジュアルタイルを自動的に配置することで、レベル作成を大幅に簡素化します。

典型的な実装では各セルの8近傍を調べ、16〜47/56個のタイルから選択します。理論上は256通りありますが、多くのゲームではそれよりも遥かに少ない組み合わせしか使用しません。本記事では、Nonsensical 2D からインスパイアを受けた、5種類だけで済むシステムについて説明します。これでもきれいにエッジが描画されます。


コアアイデア

タイルマップは二層に分かれています:

  1. 物理レイヤー – 衝突判定用の「実際」のタイルを保持
  2. ビジュアルレイヤー – デコレーションタイルを0.5タイルオフセットし、角で描画

各ビジュアルタイルは物理レイヤー上の四隣セル(1, 2, 3, 4)を見ることができ、これらを 4ビットマスク で表現します。

┌─┬─┐
│1│2│   (近傍)
├─┼─┤
│3│4│
└─┴─┘

ビットはビジュアルタイルの四隅に対応し、各角で物理セルが占有されているかをチェックすることで、16通りのユニークな配置を決定します。


五つの基本タイル

必要なのは 5つ のテクスチャだけです:

タイル説明
コーナー1つの象限を占有
サイド隣接する2象限を占有
対角コーナー反対側の2象限を占有
内向きコーナー中央に向かう隣接2象限を占有
フル/ミドルピース4つすべての象限を占有

これらの基本タイルをプログラム上で回転・反転させることで、16通りのビジュアルバリアントを生成できます。Godot では各バリアントの座標をテクスチャアトラスに格納し、インデックスで参照します。

@onready var tileArray : Array[Vector2i] = [
    Vector2i(4,0), # 0000
    Vector2i(0,3), # 0001 TL
    Vector2i(0,1), # 0010 BL
    Vector2i(2,0), # 0011 BL TL
    Vector2i(0,2), # 0100 TR
    Vector2i(2,3), # 0101 TR TL
    Vector2i(1,0), # 0110 TR BL
    Vector2i(3,2), # 0111 TR BL TL
    Vector2i(0,0), # 1000 BR
    Vector2i(1,1), # 1001 BR TL
    Vector2i(2,4), # 1010 BR BL
    Vector2i(3,0), # 1011 BR BL TL
    Vector2i(2,2), # 1100 BR TR
    Vector2i(3,3), # 1101 BR TR TL
    Vector2i(3,1), # 1110 BR TR BL
    Vector2i(4,0)  # 1111 BR TR BL TL
]

配列はビットマスク(0000 → 1111)の順序と完全に一致させる必要があります。


実行時配置

  • タイルを置く – マウスイベントでグローバルカーソル位置をタイル座標へ変換。物理レイヤーのセルを更新し、周囲4つのビジュアルタイルを再計算します。
  • タイルを消す – 同様にセルを空白に設定し、影響を受けるビジュアルタイルを更新します。

便利関数

update_all()
はビジュアルレイヤーをクリアして全体を一度に再構築します。レベルデザイン時など、多くのセルが変更された際に有効です。


レベル保存

  1. WorldMap ノード をシーンツリーから取得
  2. 各タイルマップレイヤーを反復処理し、次の情報を配列化
    • pos
      – セル位置
    • source_id
      – タイルID
    • atlas_coords
      – アトラス内座標
    • alt
      (または回転/フリップデータ)– 任意
  3. これらをタイルセットパスで識別するキーの下に格納
var data = {
    "physical": _serialize_tilemap(physical),
    "visual"  : _serialize_tilemap(visual)
}

結果は次のような JSON になります。

{
  "physical": {
    "tile_set": "res://Tilesets/physical_tileset.tres",
    "cells": [
      { "pos": [x, y], "source_id": 0, "atlas_coords": [u, v], "alt": 0 },
      ...
    ]
  },
  "visual": {
    "tile_set": "res://Tilesets/visual_tileset.tres",
    "cells": [
      { ... }
    ]
  }
}

Godot エディタの

res://
フォルダは実行時に読み取り専用ですので、JSON は
user://
に保存します。後で再びシーンへインポートできます。


EditorPlugin でのインポート

ワークフローを効率化するために、

EditorInspectorPlugin
を作成し WorldMap インスペクタに Import ボタンを追加しました。ボタン押下時:

  1. user://
    から保存データを読み込み
  2. 新しい WorldMap ノードを生成してタイルマップを配置
  3. 元のシーンファイル(
    res://
    )を書き換え
  4. Godot のファイルシステムをリフレッシュし、エディタに更新されたレベルを表示
@tool
extends EditorPlugin

func _enter_tree():
    add_inspector_plugin(
        preload("res://addons/WorldMap_importer/world_map_inspector.gd").new()
    )

func _exit_tree():
    remove_inspector_plugin(
        preload("res://addons/WorldMap_importer/world_map_inspector.gd").new()
    )

インスペクタプラグイン自体はボタンを作成し、インポートルーチンに接続してシーン保存を行います。


リソース

  • jess::codes – GitHub リポジトリ(配置・ツール全コード)
  • Nonsensical 2D – このアプローチの元となった動画
  • Oskar Stålberg – 自動タイル化に関する追加参考資料

ご覧いただきありがとうございます! フッターにリンクされたプラットフォームでフォローしたり、RSS で次回記事を受け取ることもできます。

同じ日のほかのニュース

一覧に戻る →

2026/02/14 8:43

**OpenAI のミッションステートメント ― 進化** | 年 | バージョン | |----|------------| | 2015(創設) | 「人工汎用知能(AGI)が人類全体に利益をもたらすことを保証する。」 | | 2019 | 安全性への強調追加: 「安全な AGI を構築し、それを使って誰もが恩恵を受けるようにする。」 | | 2023 | 広範な社会的影響に焦点を絞り改訂: 「OpenAI のミッションは、安全で広く有益な AI システムを創造し、人間の能力を高め、世界全体の福祉を促進することです。」 | *進化を通じて一貫したテーマ* - **安全性** – 開発・展開における継続的優先事項。 - **広範な利益** – 進歩がすべての人々にアクセス可能で有益であることを保証。 - **人間の強化** – AI を活用して人間の潜在能力を拡大し、代替するのではないこと。

## Japanese Translation: OpenAI のミッションステートメントは、2016 年から 2024 年にかけて着実に進化してきました。2024 年版では表現が短縮され、「OpenAI のミッションは人工汎用知能(AGI)が人類全体に利益をもたらすことを確保することである」となり、安全性への明示的な言及や「財務上のリターンを追求する必要がない」というフレーズが削除されています。以前のバージョン(2016、2018、2020–2023)では段階的に表現が洗練されており、2021 年には「汎用人工知能」などの語句が追加され、2022 年には「安全に」という言葉が挿入される一方で、利益圧力なしに人類に利益をもたらすというコミットメントは維持されています。 OpenAI は米国の 501(c)(3) 非営利組織であり、そのミッションステートメントは毎年 IRS に提出されるため、税優遇措置を保持する上で法的な重みがあります。全てのバージョンは GitHub Gist にまとめられており、変更が公開で追跡可能です。同様に Anthropic についても詳細より少ない更新が見つかっています。 2024 年版の表現は財務リターンへの重視を示唆している可能性があり、これが OpenAI が非営利ステータスと商業活動をどのようにバランスさせるかに影響し、税優遇分類が適切であるかどうかを規制当局が検討するきっかけになるかもしれません。競合他社もこの変化を踏まえて、安全性対利益戦略を再評価する可能性があります。

2026/02/14 6:35

**Show HN:データエンジニアリング・ブック – オープンソースでコミュニティ主導のガイド**

## Japanese Translation: GitHubは、コーディング支援、自動化、およびセキュリティを組み合わせたAI搭載の開発者プラットフォームとして自らを位置付けており、あらゆる規模のチームに統合されたエコシステムを提供します。 このプラットフォームは、コード作成を加速するCopilot、Spark、およびModels、ワークフロー自動化と即時クラウド環境を実現するActionsおよびCodespaces、そして作業を整理するための課題/計画追跡機能を提供します。高度なセキュリティ機能―脆弱性検出、シークレット保護、およびビルド時コードレビュー―は開発プロセス全体に安全性を組み込みます。 GitHubは、医療・金融・製造業・政府などの産業別ソリューションでエンタープライズ、中小企業、スタートアップ、非営利団体をターゲットとし、プレミアムサポート層、パートナープログラム、およびSecurity LabやMaintainer Communityなどのコミュニティイニシアチブによって支えられています。エコシステムには、GitHub Advanced Security、Copilot for Business、エンタープライズレベルのAI機能を含むアドオンマーケットプレイスと、ドキュメント、ブログ、変更ログ、トラストセンター、GitHub Sponsors、ウェビナー、電子書籍、レポート、およびビジネスインサイトなどの豊富なリソースが含まれています。 今後、同社はMCP Registryを通じてツール統合を深化させ、AI機能を拡大し、ビルド時のセキュリティチェックを強化することで、開発者に高速で安全なコードを提供し、組織にはより効率的なDevOpsワークフローを実現する総合的かつモダンなソフトウェア開発スタックとしての役割を確固たるものにしていきます。

2026/02/14 2:50

今ではTUI(テキストユーザーインターフェース)の構築が簡単になりました。

## Japanese Translation: **改善された要約** Hatchet は現在積極的に採用を行っており、オープンな求人ポジションが利用可能です。同社の発表は単に「採用中である」と述べているだけで、追加の背景や将来のアクションについては言及されていません。