게시글
질문&답변
안드로이드, iOS빌드
안녕하세요!우선 고도 엔진에서 모바일 게임 지원이 아직 그렇게 좋지는 않다는 점을 알려드리고 싶네요.인앱 결제나 애드몹을 쓰실 때 초보자가 구현하기 만만치 않고,특히 ios 쪽이 상대적으로 더 빈약합니다. 규모가 작은 모바일 게임을 만들어서 안드로이드에서 실행되는 .apk를 빌드하고 싶으시다면https://www.youtube.com/watch?v=dCLYMF32ZBE위 간단한 영상을 참고하시면 도움이 될 것 같습니다.하지만 (보통의 경우) 광고나 인앱 결제를 연동하고 구글 플레이에 출시를 하고 싶으시다면gradle이라는 것을 빌드 하여 .aab를 빌드하여야 합니다.https://docs.godotengine.org/en/stable/tutorials/export/android_gradle_build.htmlgradle build는 위 공식 문서를 참고해주시면 될 것 같습니다.(android 빌드 템플릿 설치를 하시면 되는데 강의 내용과 꽤 유사합니다) ios의 경우 xcode를 이용해서 빌드를 해야 하는데,https://www.youtube.com/watch?v=x_ZFAV2id3I위의 긴 영상에 macOS를 통해 빌드부터 앱 스토어 등록까지 자세히 나와 있어서참고하시면 될 것 같습니다. 고도 엔진도 워낙 빠르게 발전하다 보니,모바일 개발 생태계가 좋아지는 대로모바일 게임 강의 제작도 고려하고 있습니다.^^감사합니다!
- 0
- 1
- 22
질문&답변
우주선 회전
안녕하세요강의 12분 부근의 중간 코드를 말씀하시는 것 같네요!해당 코드는 대각선 방향(방향 버튼 2개)을 누른 손가락을동시에 떼야 대각선으로 멈추게 되고,두 손가락을 떼는 데 조금이라도 오차(60분의 1초 이상)가 생기면조금이라도 늦게 뗀 손가락 기준으로 get_vector가 바뀌기 때문에우주선이 그쪽으로 바라보게 됩니다.이는 오류가 있다기 보다는 _process 함수가 1초에 60번 우리 키보드의 입력을 받기 때문에생기는 부득이한 현상.. 이라고 이해를 하시고 넘어가면 될 것 같습니다.감사합니다!
- 0
- 2
- 40
질문&답변
시그널 - 자식에서 부모노드로 접근
안녕하세요 아주 날카롭게 지적해주셨네요!!언급하신 의문점이 맞는 말씀이시고,도입 섹션에서는 최대한 시그널을 간단하게 소개하고자 1개만 달랑 언급하다보니혼동이 생기신 것 같습니다.뒤이어 수강하시면자식 쪽 시그널을 발동시켜 부모의 함수를 호출하기도 하고,독립적인 씬끼리 시그널로 연결하는 등다양한 사용례가 등장합니다. "자식 노드쪽에서 부모 노드 쪽을 접근할 때 시그널을 사용하라"도 맞는 말이지만,"자식 노드쪽에서 부모 노드 쪽으로 직접 접근(참조)하지 마라"의 느낌으로 강조를 해드리고 싶습니다.감사합니다!
- 0
- 2
- 72
질문&답변
섹션2 규칙의 필요성 부분에서 Godot 4 Function Chaining 이란?
get_tree().root과 get_tree().get_root()의 결과는 정확히 동일합니다.전자는 root 프로퍼티에 직접 접근하는 방식이고, 후자는 getter라는 함수를 호출하는 방식의 차이입니다. 유니티 C#에서는 접근 제한자(public, private)라는 개념이 있어서private 변수에 대해서는 외부에서 변수(root)로의 접근이 전자(.root)로는 불가능하고, 후자(get_root())로만 접근이 가능하다는 점에서 의미있는 차이가 있습니다. 그런데 GDscript는 파이썬을 많이 베껴온 언어인데, 파이썬은 모든 변수가 기본적으로 public이어서전자 후자의 유의미한 차이가 없다고 보시면 됩니다. 저도 차이점이 function chaining정도 밖에는 안떠오르네요. 강의에서 var c = get_tree().get_root().get_node("Grandparent/Parent1/Child1") 한줄의 코드는요컨대 아래 세 줄의 코드와 동일한 코드입니다.var my_scene_tree = get_tree()var my_window = my_scene_tree.get_root()var c = my_window.get_node("Grandparent/Parent1/Child1")딱봐도 한줄로 쓰는게 잘 읽히고 편해 보입니다..^^function(메서드) chaining(이어붙이기)은 간결하고 눈에 띄는 코드를 쓸 수 있게끔 쓰는 방법이고파이썬에서 가능한 건데 이걸 GDscript가 가져온 것입니다.메서드(함수)는 프로퍼티와 달리 무조건 입력과 출력이 존재(그것이 0개일지라도)한다는 개념을 유념하셔야 합니다.그래서 출력(return)이 있기 때문에 그 출력을 다른 메서드.() 에 이어붙이고 그 출력을 다른 메서드.()에 이어붙이고 하는 것입니다.프로퍼티 자체를 가지고는 function chaining을 할 수 없습니다. 관련 개념인 setter 함수는 섹션4 '문제 1' 영상에서 간단히 다루었습니다.감사합니다!
- 0
- 2
- 88
질문&답변
웨이브 핸들러 섹션에서 Custom Resource
네 맞습니다 스크립터블 오브젝트와 기능적으로는 거의 같다고 보시면 되고개인적으로는 고도의 custom resource가 훨씬 더 편리하고 강력하다고 느끼고 있습니다다가오는 업데이트에 custom resource를 이용한 저장과 로드 구현하는 컨텐츠를 담을 예정입니다감사합니다!
- 0
- 2
- 84
질문&답변
ObjectHandler 에서
(사진)obj.rotation = Vector2.RIGHT.angle_to(dir) 줄을 삭제해보고(=주석 처리하고) 전체 게임을 실행해보면(사진)로켓들이 플레이어 우주선 방향(dir)에 관계없이 항상 오른쪽(obj.rotation = Vector2.RIGHT)을 바라본 채로 날아가게 됩니다.그래서 미사일의 방향을 꺾어주기 위해 obj.rotation = Vector2.RIGHT.angle_to(dir) 을 해주어야 하는 것입니다(나머지 무기 2종은 공모양이어서 회전이 의미가 없기는 합니다)조금 더 보충 설명하자면dir은 플레이어 우주선이 바라보는 방향을 가리키는 것이며(사진)player.gd의 fire_rocket함수에서 찾을 수 있습니다. (파란 박스 부분을 dir로 emit하는 것)(사진)미사일의 rotation을 파란색 화살표(dir)만큼 회전해줄 필요가 있는 것입니다. 코드를 거슬러 올라가거나 디버깅할때 '컨트롤+함수클릭'이나 '컨트롤+쉬프트+F'로 검색하는 기능이 유용합니다. 이해안가시는 부분 질문 많이 주세요감사합니다!
- 1
- 1
- 95