Minecraftのアニメーションはゲームにハードコーディングされていますか?[閉まっている]


12

Minecraftでアニメーションシステムがどのように機能するかを知りたいです。すべてのMobがゲームにハードコーディングされているように感じます。ノッチは本当にそこに座って、すべてのアニメーションボーンのマトリックスを手で作成しましたか?

私は楽しみのためにゲームを作り直すのが好きなので、彼がこれをどのようにしたか知りたいです。また、彼が本当にそれらをハードコーディングした場合...より良い方法はありますか?


2
なぜ彼はハードコーディングされたアニメーションを持っていると思いますか?
Ali1S232

この質問はNotchだけが答えられるようです。
マイケルハウス

9
さらに、Minecraftがどのようにそれを行ったか気にするのはなぜですか?同じことを他の方法で達成する方法についてのアイデアはありますか?
テトラッド

1
minecraftforum.net/topic/361430-181smp-smart-movingこのmodのメーカーはあなたに答えを持っているかもしれませんが、アニメーションは私が以前に見たminecraftコードの領域ではありません。
ジェームズ

1
以前にMCPコードを調べたことがありますが、ハードコーディングされたアニメーションを見たことを99%確信しています。ただし、Minecraft(またはEclipse)をチェックする必要はありません。
BlueRaja-ダニーPflughoeft

回答:


18

他の人が言ったように、はい、モデルとアニメーションはハードコードされています。これがどのように行われたかを見たい場合は、Minecraft Coder Pack wikiにアクセスしてください。

パッケージは、MOD作成者がMinecraftクラスを逆コンパイル、変更、再コンパイルできるように作成されました。手順は、パッケージに付属のreadmeファイルに含まれています。パッケージには、ゲームとサーバーを逆コンパイル、再コンパイル、再難読化するスクリプトが含まれています。

見たいクラスは、ModelBase、ModelBiped、およびModelRendererです。

ModelBipedには、ヒューマノイドアニメーションを実行する次の関数が含まれています。

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

腕の揺れは単純に余弦関数です。右腕はPIによってオフセットされ、反対方向にスイングします。

腕のスイングのグラフ

それがあなたの質問に答えることを願っています=)


Minecraftを実際に変更する方法の詳細については、次の質問をご覧ください。

MinecraftにカスタムMobを追加するにはどうすればよいですか?


シス!ユークリッド回転:(。
ジョナサンディキンソン

8

Minecraftのモデルはハードコーディングされています。ブロック階層の概念はありません(ブロックのリストのみ)。これは、アニメーションが手続き的に(非常に基本的な方法で)行われるか、補間された値がハードコードされることを意味します。

TechneやFMCModelerのようなMinecraftモデル用のいくつかのエディターがあり、MOD用のMinecraftモデルコードをインポート/エクスポートできますが、おそらくモデルごとに異なる方法で処理されるため、アニメーションはサポートしていません。

FMCModelerで生成された簡単なサンプルを次に示します。

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

より良い方法は、ブロック階層の概念を備えた完全なブロックベースのモデラーを構築し、キーフレームと補間でモデルをアニメーション化することです。

私は現在、それを行うマルチプレイヤーゲーム構築ツールを構築しています(特にhttp://craftstud.io/)。すでに複雑な静的テクスチャモデルの構築が可能になり、さらに多くの機能が準備中です。

CraftStudioで作成された複雑なモデルを次に示します。ご覧のとおり、ブロックは右側のツリーに配置されています。 http://i.stack.imgur.com/FRQeV.png

各ブロックは、次のデータを使用してネットワーク経由でディスクにシリアル化されます。

  • 一意のID
  • 親ノードID
  • 位置(子孫に影響)
  • スケール(子孫に影響)
  • 角度(子孫に影響)
  • ピボットポイントからのオフセット
  • ブロックサイズ
  • ブロックテクスチャオフセット(テクスチャリングのUV座標オフセット)

キーとしてアニメーション名、値としてキーフレームのリストを持つマップを保存することにより、アニメーションサポートを追加する予定です。各キーフレームは、アニメーション化するブロックと値に関連付けられます。キーフレーム間で、値を補間する必要があります(位置の場合は線形に、角度の場合は球状に、lerpとslerpを検索します)。


0

Minecraftブロックモデルは実際には1.8の時点ではゲームにハードコーディングされておらず、リソースパックを使用して編集できます。JSONモデリングシステムは非常に理解しやすく、モデルは/ models / blockに存在します。その後、コードを見て、JSONモデルをどのように解釈するかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.