Skip to content
ブログに戻る
WebCraft - 純粋なJavaScriptで書かれたウェブベースのMinecraftクローン

WebCraft - 純粋なJavaScriptで書かれたウェブベースのMinecraftクローン

Alexandru Maftei
Alexandru Maftei
@ice
Updated
1 閲覧
TL;DR:WebCraftはJavaScriptベースのMinecraft Classicクローンで、WebGLとWebSocketsを使ってブラウザで動作します。フレームワークなし、最小限の依存性。ボクセルゲーム開発の学習に最適ですが、現在はアクティブメンテナンスされていません。

"JavaScriptで書かれたMinecraftクローン。"

Overv/WebCraft ・ github.com
⭐ 418スター💻 JavaScript📄 Zlib

ブラウザだけでMinecraftのような体験を作ったら、どうなると思いますか?WebCraftはまさにそれです - JavaScriptベースのMinecraftクローンで、WebGLとWebSocketsを使ってブラウザで動作し、最新のウェブブラウザさえあれば十分です。公式ゲームのような完全なサバイバル体験ではありませんが、ブロックベースのボクセルワールドが実際にどのように機能しているのかに興味があるなら、このプロジェクトは本当に目を開かされるものです。

WebCraftとは

WebCraftはMinecraft ClassicをバニラなJavaScriptで一から作り直したものです。Three.js、Babylon.js、重い3Dフレームワークはなし。本当のところ、開発者はWebGL上に直接レンダリングパイプラインを構築しました。これは過激に聞こえますが、完全なゲームエンジンを持ち込むよりも、何千もの静止キューブをレンダリングするには遥かに効率的です。

このプロジェクトはシングルプレイヤーとマルチプレイヤーの両モードを含みます。マルチプレイヤーはバックエンドでNode.jsを使い、WebSocketsで接続されたクライアント間のプレイヤーアクションを同期します。最も興味深かったのは依存性がいかに最小限かということです。数学演算用にglmatrixと、ネットワーク通信用にsocket.ioを使っているだけで、あとはすべてカスタムコードです。

重要なことを先に述べておきます - このプロジェクトはもうアクティブメンテナンスされていません。リポジトリは存在し、コードはそこにありますが、定期的なアップデートやアクティブサポートは期待しないでください。教育目的やいじくり回すのであれば非常に価値があります。本番環境のマルチプレイヤーサーバーとしては?別のところを探してください。


なぜあなたが気に留めるべきか

あなたが何を求めているかに応じて、WebCraftを見る理由はいくつかあります。ゲーム開発やグラフィックスプログラミングを学んでいるなら、これは黄金です。ボクセルベースのワールドをどのように構造化するか、レンダリングパフォーマンスを管理する方法、物理(重力、流体の流れ)を処理する方法、クライアント間でゲーム状態を同期する方法が見えます。何もプロプライエタリなエンジンの背後に隠されていません。

単にブラウザでMinecraftをプレイしたいのなら、何もインストールせずに?確かに、その体験はあります。ワールドを作成し、ブロックを配置・削除でき、サーバーをセットアップすれば、友人とプレイできます。でも正直に言うと、これはClassicクローンで、モダンMinecraftではありません。サバイバルメカニクス、モブ、進行なし。削減されたフォーム内でクリエイティブモードに近いものです。

ゲーム開発やボクセルベースゲームプロトタイプを中心としたキャップストーンプロジェクトを構築している学生やもの作りの人は、コードベースを読むことで多くを学べます。アーキテクチャは十分にクリーンなので、ワールドでブロックがどのように配置され、スクリーンにレンダリングされるまでトレースできます。


アーキテクチャの仕組み

このプロジェクトはモジュール化されたJavaScriptファイルに構成されており、各ファイルがゲームの特定のレイヤーを処理します。Worldモジュールはマップ全体のブロックデータを保持します。各座標に何があるかを追跡する3D配列と考えてください。Renderモジュールそのデータを取得し、チャンク(基本的にブロックのグループ)に変換し、WebGLで描画するために供給します。

物理シミュレーションは分離して実行されます。重力は落ちているブロックを下に引っ張り、水とマグマは単純なルールに従って流れ、衝突検出はあなたが地形を通り抜けるのを防ぎます。複雑な物理ではありませんが、ブロックベースのワールドで機能します。

プレイヤー入力はPlayerモジュールで処理され、インベントリ、現在選択されているブロックタイプ、動きを追跡します。マルチプレイヤーの側面では、Networkモジュールはローカルワールド状態をサーバーが知っていることと比較し、接続されているすべてのプレイヤーが同じものを見えるようにchangeを同期します。

ブロック自体はBlocksモジュールを通じてカスタマイズ可能で、色、光が通るかどうか、どのようにレンダリングされるかなどの材料プロパティを定義します。新しいブロックタイプを追加したり、既存のものを変更したい場合は、ここが出発点です。


セットアップ(試してみたい場合)

シングルプレイヤーバージョンは簡単です。リポジトリをクローンして、singleplayer.htmlを最新のブラウザで開きます。ビルドステップなし、node_modulesの悪夢なし。完了です。

マルチプレイヤーの場合は、Node.jsをインストールする必要があります(プロジェクトは古いバージョンを対象としていますが、最近のLTSはすべて機能します)。npmで依存関係をインストールしてサーバーを開始します:

bash
npm install
node server.js

サーバーが実行されたら、multiplayer.htmlをブラウザで開くと接続します。その後、同じサーバーで複数のブラウザウィンドウを開いてマルチプレイヤーをテストするか、ローカルネットワーク上の他のユーザーと接続URLを共有することができます。インターネット経由でのリモートプレイはいくつかのネットワーク設定が必要です(ポートフォワーディングまたはngrok)。これはプロジェクトが文書化しているもの以上ですが、確実に可能です。

何か壊れた場合、またはバニラMinecraftに戻りたい場合は、ブラウザタブを閉じるだけです。WebCraftはメモリとブラウザのWebGLコンテキストで完全に実行されるため、何も永続化されたり、システムが変更されたりしません。クリーンアップするフットプリントなし。


他とは違う点

スクラッチからボクセルレンダラーを構築することは自明ではありません。グラフィックスライブラリなしでこれを行う事実がハイライトです。WebGLは十分に低レベルなので、チャンクジオメトリがどのように生成されるか、面がどのようにカルされるか(隠れている場合は描画されない)、どのように照明計算が機能するかが正確に見えます。

シングルプレイヤーの構造
シングルプレイヤーの構造

マルチプレイヤーのセットアップはリーンです。Socket.ioは双方向通信のめんどくさい部分を処理しますが、ゲーム状態がどのようにシリアル化され、ワイヤで送信され、クライアント側で調整されるかは依然として見えます。これはほとんどのゲーム教科書が軽視する実世界のネットワーク問題です。

もう一つ私が高く評価する詳細:プロジェクトは自分自身を機能でふくらませていません。ブロック配置、ワールドレンダリング、プレイヤー同期のコアループに焦点を合わせたままです。GUIフレームワークなし、アニメーションライブラリなし、パッケージの肥大化なし。あなたは誰かの実用的な実装の決定を読んでいます。フレームワークのショーケースではありません。


知っておくべき制限

パフォーマンスが大きなものです。ハードウェアとブラウザに応じて、本当に大きな構造を構築したり、大規模なワールドを生成したりすると、スタッターが始まる可能性があります。何千ものキューブをレンダリングすることは可能ですが、無限にスケーラブルではありません。モダンマシンでより小さいプレイエリアでスムーズに実行することを期待し、それを押し進めると少しヒッチする可能性があります。

内蔵の永続性はありません。ページをリロードするか、サーバーを再起動すると、ワールドは消えます。永続的なワールドが必要な場合は、自分でデータベースロジックを追加する必要があります。サーバー構成、管理ツール、ユーザー認証も同じです。それはスケルトンであり、完全なサーバー製品ではありません。

Classic モードの制限は、サバイバル要素がない、モブAIがない、ダンジョンや戦利品がないことを意味します。モダンMinecraftと比較する場合、コアビルディングメカニック以外はほぼすべてが欠落しています。それは欠陥ではなく、プロジェクトが設定してこだわった現実的なスコープ境界です。

そしてブラウザ互換性。これはWebGL時代向けに構築されているので、非常に古いブラウザは機能しません。過去10年のものであれば何でも大丈夫ですが、Internet Explorerまたは古いAndroidデバイスで実行することを期待しないでください。


同じようなプロジェクトが必要な場合

知っておく価値のある代替案があります。Minecraft自体は彼らのウェブサイト経由でMinecraft Classicと呼ばれる無料バージョンを提供します。あなただけが公式の体験を望むなら。ブラウザベースでもあり、公式に維持され、より洗練された感じがします。

あなたが特に voxel ゲーム開発を学びたいのなら、よりクリーンなスタータープロジェクトがあります。いくつかの人々は Voxel.js を見ることを推奨するか、別の言語を好む場合は Panda3D のような Python ライブラリから始めます。これらはより活発なコミュニティと現在の文書を持つ傾向があります。

Minecraftのモッドとツール、私たちのコミュニティはテストされたサーバーとスキンのリストを保持しています。あなたがJavaScriptに入る代わりにバニラMinecraftを拡張することに興味があるなら。私たちのVotifier TesterText Generator toolsはサーバーを管理し、JavaScriptに入ることなくカスタムコンテンツを作成するのを助けることができます。


私の意見

WebCraftは非常に特定の痒みをかき消します。ブロックベースのゲームがどのように実際に機能するかを理解したい場合、またはウェブグラフィックスとゲームループを学んでいるのなら、それは数時間の探索の価値があります。コードは読み取り可能で、アーキテクチャは健全で、あなたは始めたものより多くを知って去ります。

カジュアルプレイの場合?公式Minecraftに固執してください。学習の場合は?これは堅実です。もはやメンテナンスされていないという事実は教育目的ではあまり重要ではありません。コードはどこにも行きませんし、そこにあるものはよく考えられています。

これは有能な開発者がフレームワークなしで興味深いものを構築する必要がないことを証明するプロジェクトの1つです。スキル、明確な思考、問題の堅実な理解だけ。それだけでそれが存在することを知る価値があります。

Overv/WebCraft - Zlib, ⭐418
About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!