HAN1110 9899e780ba984d89824a90ee8deb7cb2
안녕하세요! 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'
라고 바꾸기만 하면..!
제데로된 텍스쳐 완성!!!!
이제 블럭들을 더 추가해봅시다.
이건 잔디 , 하나잖아요?
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)
실행해보죠.
이상하게 안되네요? 전역 변수로 지정하지 않아서 그래요.
지정하고 만들면 이 사진처럼 정상작동한답니다~
여기까지가 이번 편입니다.
설명할게 많아서 그런지 좀 기네요.
ㅂㅂ
댓글이 없습니다.
새로운 댓글을 등록해 주세요!