개인 자료란 (JE)

  서버 커뮤니티

Profile HAN1110 대표칭호 없음

HAN1110 9899e780ba984d89824a90ee8deb7cb2

Profile

python

Python 으로 Minecraft 만들기 #11

2021.11.02 조회 수 697 추천 수 1

안녕하세요! HAN1110입니다!

오늘은 파이썬으로 마인크래프트를 만들어보겠습니다!

저번편에서 하늘을 만들었죠?

이번편은 두단계에 걸쳐서 텍스쳐를 입힐겁니다.

저작권은 항상 GitHub - kairess/minecraft-clone: Minecraft clone using Python Ursina game engine!  이고요. ㅋ

일단 파일 1 또는 파일 2를 다운로드 해주세요.

그리고 assets 폴더에 넣어주세요.

저번 소스를 가져오고

from ursina import * 
from ursina.prefabs.first_person_controller import FirstPersonController

app = Ursina()

player = FirstPersonController()

Entity (
    parent=scene,
    model='sphere',
    texture=load_texture('assets/sky.jpg'),
    scale=500,
    double_sided=True
)

class Voxel(Button):
    def __init__(self, position=(0, 0, 0), texture='brick'):
        super().__init__(
            parent=scene,
            position=position,
            model='assets/block',
            origin_y=0.5,
            texture=texture,
            color=color.color(0, 0, random.uniform(0.9, 1.0)),
            scale=0.5
        )

    def input(self, key, texture='brick'):
        if self.hovered:
            if key == 'right mouse down':
                Voxel(position=self.position + mouse.normal, texture=texture)
            elif key == 'left mouse down':
                destroy(self)
      
for x in range(3):
    for z in range(3):
        voxel = Voxel(position=(x, 0, z))

app.run()

에서

def __init__(self, position=(0, 0, 0), texture='brick'): 

def input(self, key, texture='brick'):

를 빼서

texture='brick'

texture='assets/grass.png'

라고 바꾸기만 하면..!

d8722cb47e70c82e6c2a789bd6f614aa.png

제데로된 텍스쳐 완성!!!!
이제 블럭들을 더 추가해봅시다.

이건 잔디 , 하나잖아요?

block = [
    
]

구문을 통해서 블럭을 로딩시킬겁니다.

load_texture()

구문을 사용할겁니다. (물론 저작권있어요)

이거의 양식은 String 입니다.

즉 , assets 에서 파일을 가져와야해요.

가져옵시다.

근데 지금 저희는 블럭 파일이 1개밖에 없어요!!!

그럼 brick 을 넣나요?

아니요!

파일 2를 다운 안했으면 , 다운해주시고

파일 2를 다운했으면 , 압축 풀어서 다 assets 에 넣어주세요.

총 4개

잔디 , 용함 , 금 , 돌이죠?

load_texture('assets/grass.png')

를 5개 복사해서

block = [
    load_texture('assets/grass.png'),
    load_texture('assets/grass.png'),
    load_texture('assets/grass.png'),
    load_texture('assets/grass.png'),
    load_texture('assets/grass.png')
]

가 되게 해주시고

파일 이름을 거기에 넣어주세요.

결과물은

block = [
    load_texture('assets/grass.png'),
    load_texture('assets/grass.png'),
    load_texture('assets/lava.png'),
    load_texture('assets/gold.png'),
    load_texture('assets/stone.png'),
]

가 되야합니다.

그리고 이여서

키보드 입력을 받는 함수를 만들어줄게요.

block_id = 1

이건 뭔지 저도 모르겠네요.

그리고 이제 key 를 만들겁니다.

key 가 뭐냐고요? 그 함수요.

def input(key):
    print(key)

이건 파이썬 기초니 알아야합니다.

기초니 안가르쳐드려요.

w
w up
s
s up
t
t up

각 키를 눌르면 나오는 일입니다.

print(key)

def input(key):
    block_id = key

로 바꾸고

def input(key):
    if key.isdigit():
        block_id = (int) key

로 다시 바꿔주세요!

그리고 그 이상의 블럭을 예외처리할게요.

def input(key):
    if key.isdigit():
        block_id = int(key)
        if block_id >= len (blocks):
            block_id = len (blocks) - 1
        print(block_id)

를 사용해서 말이죠. 전 Block_id 출력 부분에 추가 메시지를 넣겠습니다.

def input(key):
    if key.isdigit():
        block_id = int(key)
        if block_id >= len (blocks):
            block_id = len (blocks) - 1
        print(block_id + "를 선택했습니다.")

처럼요.

그리고 설치할때 texture 로 내려가서 새로운 블럭을 추가할때 선택된 블록 텍스쳐로 설치하도록 할게요.

    def input(self, key, texture='assets/grass.png'):
        if self.hovered:
            if key == 'right mouse down':
                Voxel(position=self.position + mouse.normal, texture=texture)
            elif key == 'left mouse down':
                destroy(self)
      

    def input(self, key, texture='assets/grass.png'):
        if self.hovered:
            if key == 'right mouse down':
                Voxel(position=self.position + mouse.normal, texture=blocks[block_id])
            elif key == 'left mouse down':
                destroy(self)
      

실행해보죠.

이상하게 안되네요? 전역 변수로 지정하지 않아서 그래요.22e50156c8e4742dceb3f757f5b9502d.png

지정하고 만들면 이 사진처럼 정상작동한답니다~

여기까지가 이번 편입니다.

설명할게 많아서 그런지 좀 기네요.

ㅂㅂ

Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/520/751/003/262x150.crop.jpg?20240328020349

레드스톤

마인크래프트 노트블록으로 만든 『 Bling‐Bang‐Bang‐Born 』 1

Sonttukk

2024-03-23

1

/files/thumbnails/467/742/003/262x150.crop.jpg?20240311163123

레드스톤

[노트블럭커버] MILGRAM -ミルグラム(밀그램)- / 아마네 「숙청 행진」 제 2심 2

리비온

2024-03-11

0

/files/thumbnails/846/741/003/262x150.crop.jpg?20240310221214

레드스톤

워든 vs 라마 200마리 1

GlassesFilm

2024-03-10

0

/files/thumbnails/542/739/003/262x150.crop.jpg?20240309070457

레드스톤

[고인의 명복을 빕니다][노트블럭]드래곤볼 GT 오프닝 - 점점 마음이 끌려

리비온

2024-03-09

0

/files/thumbnails/326/738/003/262x150.crop.jpg?20240328020414

레드스톤

마인크래프트 노트블록으로 만든 『 Build Our Machine 』

Sonttukk

2024-03-07

0