Minecraft 애니메이션이 게임에 하드 코딩되어 있습니까? [닫은]


12

애니메이션 시스템이 마인 크래프트에서 어떻게 작동하는지 알고 싶습니다. 모든 폭도들이 게임에 하드 코딩되었다는 느낌이 들었습니다. 노치는 실제로 거기에 앉아서 모든 애니메이션 본에 대한 매트릭스를 손으로 만들었습니까?

나는 재미를 위해 게임을 재창조하는 것을 좋아하기 때문에 그가 어떻게했는지 알고 싶습니다. 또한 그가 실제로 하드 코드를 작성한다면 ... 더 좋은 방법이 있습니까?


2
왜 그가 하드 코딩 된 애니메이션을 가지고 있다고 생각합니까?
Ali1S232

이 질문은 Notch만이 답변 할 수있는 것 같습니다.
MichaelHouse

9
요컨대, 왜 Minecraft가 어떻게했는지 걱정하십니까? 다른 방법으로 같은 일을 수행하는 방법에 대한 아이디어가 있습니까?
Tetrad

1
minecraftforum.net/topic/361430-181smp-smart-moving 이 모드의 제작자는 답을 얻을 수 있지만 애니메이션은 이전에 살펴본 마인 크래프트 코드의 영역이 아닙니다.
James

1
이전에 MCP 코드를 살펴본 결과 99 %가 애니메이션이 하드 코딩 된 것을 본 기억이 있습니다. 그래도 더 이상 마인 크래프트 (또는 이클립스)를 확인할 필요가 없습니다.
BlueRaja-대니 Pflughoeft

답변:


18

다른 사람들이 말했듯이, 애니메이션뿐만 아니라 모델도 하드 코딩되어 있습니다. 이 작업을 수행 한 방법을 보려면 Minecraft Coder Pack 위키로 이동하십시오.

이 패키지는 mod 제작자가 Minecraft 클래스를 디 컴파일, 변경 및 재 컴파일 할 수 있도록하기 위해 만들어졌습니다. 패키지와 함께 제공되는 추가 정보 파일에 지침이 포함되어 있습니다. 패키지에는 게임과 서버를 디 컴파일, 재 컴파일 및 재난 독화하는 스크립트가 포함되어 있습니다.

보려는 클래스는 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에 커스텀 몹을 어떻게 추가합니까?


시스! 유클리드 로테이션 :(.
Jonathan Dickinson

8

Minecraft의 모델은 하드 코딩되어 있습니다. 블록 계층에 대한 개념은 없습니다 (블록 목록 만). 이것은 애니메이션이 절차 상으로 (매우 기본적인 방식으로) 보간을 통해 하드 코딩 된 값으로 수행됨을 의미합니다.

Techne 또는 FMCModeler와 같은 Minecraft 모델을위한 편집기가 몇 가지 있는데,이 모드에서는 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.