jpskill.com
🛠️ 開発・MCP コミュニティ

hytopia-world

HYTOPIA SDKで地形作成、ブロック配置、チャンク管理など、ワールド構築と編集に必要な作業を支援し、ブロック、チャンク読み込み、ワールド生成、build.hytopia.comのワークフローを円滑に進めるSkill。

📜 元の英語説明(参考)

Helps build and manage worlds in HYTOPIA SDK. Use when users need to create terrain, place blocks, manage chunks, or work with the world editor integration. Covers blocks, chunk loading, world generation, and build.hytopia.com workflow.

🇯🇵 日本人クリエイター向け解説

一言でいうと

HYTOPIA SDKで地形作成、ブロック配置、チャンク管理など、ワールド構築と編集に必要な作業を支援し、ブロック、チャンク読み込み、ワールド生成、build.hytopia.comのワークフローを円滑に進めるSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o hytopia-world.zip https://jpskill.com/download/9067.zip && unzip -o hytopia-world.zip && rm hytopia-world.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9067.zip -OutFile "$d\hytopia-world.zip"; Expand-Archive "$d\hytopia-world.zip" -DestinationPath $d -Force; ri "$d\hytopia-world.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して hytopia-world.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → hytopia-world フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

HYTOPIA ワールド構築

このスキルは、HYTOPIA SDK ゲームでワールドを構築および管理するのに役立ちます。

このスキルを使用するタイミング

ユーザーが以下を行う場合にこのスキルを使用してください。

  • 地形を作成したり、ブロックをプログラムで配置したい場合
  • チャンクのロード/アンロードを操作する必要がある場合
  • ワールド生成または手続き型地形について質問がある場合
  • build.hytopia.com ワールドエディタと統合したい場合
  • ワールドデータを保存/ロードする必要がある場合
  • ブロックの種類、テクスチャ、またはカスタムブロックについて質問がある場合

コアとなるワールドの概念

基本的なブロックの配置

import { World, BlockType } from 'hytopia';

// 単一のブロックを配置
world.setBlock({ x: 0, y: 0, z: 0 }, BlockType.GRASS);

// ブロックを削除
world.setBlock({ x: 0, y: 0, z: 0 }, BlockType.AIR);

// 位置にあるブロックを取得
const block = world.getBlock({ x: 0, y: 0, z: 0 });

カスタムブロックの作成

import { BlockType, Block } from 'hytopia';

const customBlock = new BlockType({
  id: 'my-mod:custom-block',
  name: 'Custom Block',
  textureUri: 'textures/custom.png',
  isSolid: true,
  opacity: 1.0
});

// ブロックを登録
world.blockRegistry.register(customBlock);

ワールド生成

import { World, BlockType } from 'hytopia';

class TerrainGenerator {
  generateChunk(chunkX: number, chunkZ: number, world: World) {
    for (let x = 0; x < 16; x++) {
      for (let z = 0; z < 16; z++) {
        const worldX = chunkX * 16 + x;
        const worldZ = chunkZ * 16 + z;

        // 簡単なハイトマップ
        const height = Math.floor(Math.sin(worldX * 0.1) * 5 + 10);

        for (let y = 0; y < height; y++) {
          const block = y === height - 1 ? BlockType.GRASS : BlockType.DIRT;
          world.setBlock({ x: worldX, y, z: worldZ }, block);
        }
      }
    }
  }
}

エディタからのワールドのロード

import { World } from 'hytopia';
import worldData from './assets/world.json';

// build.hytopia.com で作成されたワールドをロード
world.loadFromJSON(worldData);

チャンク管理

チャンクのロード

// プレイヤー周辺のチャンクのロードを有効にする
world.chunkLoadingEnabled = true;
world.chunkLoadRadius = 8; // チャンク

// カスタムチャンクロード
world.onChunkLoad = (chunkX, chunkZ) => {
  // チャンクデータを生成またはロード
  terrainGenerator.generateChunk(chunkX, chunkZ, world);
};

world.onChunkUnload = (chunkX, chunkZ) => {
  // 必要に応じてチャンクデータを保存
};

手動によるチャンク制御

// 特定のチャンクをロード
world.loadChunk(0, 0);

// チャンクをアンロード
world.unloadChunk(0, 0);

// チャンクがロードされているか確認
const isLoaded = world.isChunkLoaded(0, 0);

Build.hytopia.com との統合

エディタからのエクスポート

  1. https://build.hytopia.com でワールドを構築します
  2. JSON としてエクスポートします
  3. assets/world.json に配置します

エクスポートされたワールドのロード

import worldData from './assets/world.json';

world.loadFromJSON(worldData, {
  // オプション
  clearExisting: true,  // 既存のブロックを削除
  offset: { x: 0, y: 0, z: 0 }  // オフセットを適用
});

ベストプラクティス

  1. 大規模なワールドでは チャンクのロードを使用 します - すべてを一度にロードしないでください
  2. ブロック操作をバッチ処理 します - 可能であれば、複数のブロックを一度に設定します
  3. 変更されたチャンクを保存 します - プレイヤーの変更を永続化します
  4. ブロックパレットを使用 します - 再利用可能なブロックの組み合わせを定義します
  5. 衝突を最適化 します - 非ソリッドブロックを適切にマークします

一般的なパターン

構造物の配置

function placeStructure(world: World, position: Vector3, structure: Block[][]) {
  for (let y = 0; y < structure.length; y++) {
    for (let x = 0; x < structure[y].length; x++) {
      for (let z = 0; z < structure[y][x].length; z++) {
        const block = structure[y][x][z];
        if (block !== BlockType.AIR) {
          world.setBlock({
            x: position.x + x,
            y: position.y + y,
            z: position.z + z
          }, block);
        }
      }
    }
  }
}

レイキャストによるブロックの配置

// プレイヤーが見ている場所にブロックを配置
const raycast = world.raycast(player.position, player.lookDirection, 5);
if (raycast.hit) {
  const placePos = raycast.position.add(raycast.normal);
  world.setBlock(placePos, BlockType.STONE);
}
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

HYTOPIA World Building

This skill helps you build and manage worlds in HYTOPIA SDK games.

When to Use This Skill

Use this skill when the user:

  • Wants to create terrain or place blocks programmatically
  • Needs to work with chunk loading/unloading
  • Asks about world generation or procedural terrain
  • Wants to integrate with build.hytopia.com world editor
  • Needs to save/load world data
  • Asks about block types, textures, or custom blocks

Core World Concepts

Basic Block Placement

import { World, BlockType } from 'hytopia';

// Place a single block
world.setBlock({ x: 0, y: 0, z: 0 }, BlockType.GRASS);

// Remove a block
world.setBlock({ x: 0, y: 0, z: 0 }, BlockType.AIR);

// Get block at position
const block = world.getBlock({ x: 0, y: 0, z: 0 });

Creating Custom Blocks

import { BlockType, Block } from 'hytopia';

const customBlock = new BlockType({
  id: 'my-mod:custom-block',
  name: 'Custom Block',
  textureUri: 'textures/custom.png',
  isSolid: true,
  opacity: 1.0
});

// Register the block
world.blockRegistry.register(customBlock);

World Generation

import { World, BlockType } from 'hytopia';

class TerrainGenerator {
  generateChunk(chunkX: number, chunkZ: number, world: World) {
    for (let x = 0; x < 16; x++) {
      for (let z = 0; z < 16; z++) {
        const worldX = chunkX * 16 + x;
        const worldZ = chunkZ * 16 + z;

        // Simple heightmap
        const height = Math.floor(Math.sin(worldX * 0.1) * 5 + 10);

        for (let y = 0; y < height; y++) {
          const block = y === height - 1 ? BlockType.GRASS : BlockType.DIRT;
          world.setBlock({ x: worldX, y, z: worldZ }, block);
        }
      }
    }
  }
}

Loading World from Editor

import { World } from 'hytopia';
import worldData from './assets/world.json';

// Load world created in build.hytopia.com
world.loadFromJSON(worldData);

Chunk Management

Chunk Loading

// Enable chunk loading around players
world.chunkLoadingEnabled = true;
world.chunkLoadRadius = 8; // chunks

// Custom chunk loader
world.onChunkLoad = (chunkX, chunkZ) => {
  // Generate or load chunk data
  terrainGenerator.generateChunk(chunkX, chunkZ, world);
};

world.onChunkUnload = (chunkX, chunkZ) => {
  // Save chunk data if needed
};

Manual Chunk Control

// Load specific chunk
world.loadChunk(0, 0);

// Unload chunk
world.unloadChunk(0, 0);

// Check if chunk is loaded
const isLoaded = world.isChunkLoaded(0, 0);

Build.hytopia.com Integration

Exporting from Editor

  1. Build your world at https://build.hytopia.com
  2. Export as JSON
  3. Place in assets/world.json

Loading Exported World

import worldData from './assets/world.json';

world.loadFromJSON(worldData, {
  // Options
  clearExisting: true,  // Remove existing blocks
  offset: { x: 0, y: 0, z: 0 }  // Apply offset
});

Best Practices

  1. Use chunk loading for large worlds - don't load everything at once
  2. Batch block operations - set multiple blocks at once when possible
  3. Save modified chunks - persist player changes
  4. Use block palettes - define reusable block combinations
  5. Optimize collision - mark non-solid blocks appropriately

Common Patterns

Placing Structure

function placeStructure(world: World, position: Vector3, structure: Block[][]) {
  for (let y = 0; y < structure.length; y++) {
    for (let x = 0; x < structure[y].length; x++) {
      for (let z = 0; z < structure[y][x].length; z++) {
        const block = structure[y][x][z];
        if (block !== BlockType.AIR) {
          world.setBlock({
            x: position.x + x,
            y: position.y + y,
            z: position.z + z
          }, block);
        }
      }
    }
  }
}

Raycast Block Placement

// Place block where player is looking
const raycast = world.raycast(player.position, player.lookDirection, 5);
if (raycast.hit) {
  const placePos = raycast.position.add(raycast.normal);
  world.setBlock(placePos, BlockType.STONE);
}