3월, 2017의 게시물 표시

[Godot Engine] Unable to write to file xxx.tscn, file in use, locked or lacking permissions.

이미지
고도엔진에서 스크립트 수정 후 저장하는데 아래와 같은 에러가 발생했습니다.

Unable to write to file xxx.tscn, file in use, locked or lacking permissions.


제 경우 재현 상황은 아래와 같습니다.

1. 스크립트가 에러가 발생 될 상황이었음(extends Node2Dt로 인해)
2. F5를 눌러 프로젝트를 실행해서 Parse Error: unknown class: 'Node2Dt' 가 발생
3. 소스를 수정 후 Ctrl + S를 눌러 저장을 시도 했을 때 로드 에러가 발생
4. 씬 실행을 정지(F8) 한 후 파일을 저장하면 이상 없음

이렇습니다. 조금씩 적응중인 고도 엔진이네요.

[Godot Engine] Parser Error: expected string constant as 'preload' argument.

고도 엔진으로 스크립트를 작성중 아래와 같은 에러가 발생했습니다.

expected string constant as 'preload' argument.

for i in range(ImageCount):
var spr = Sprite.new()
var imageName = "image" + str(i)
var resName = "res://image/" + imageName + ".png"
spr.set_texture(preload(resName))

스프라이트 객체를 생성하고 텍스처를 설정해주는 부분에서 preload관련 에러였습니다. 프로젝트 시작할 때 스크립트 컴파일 타임에 preload가 실행이 되서 인수로 문자열 상수를 사용해야하는 것 같네요. preload 대신 load를 사용해주면 됩니다.

https://github.com/godotengine/godot/issues/1758
https://godotengine.org/qa/6142/preload-with-variable-argument
https://godotdevelopers.org/forum/discussion/14486/solved-expected-string-constant-as-preload-argument-am-i-doing-this-right

[Godot Engine] Invalid operands 'String' and 'int' in operator '+'.

Invalid operands 'String' and 'int' in operator '+'.

고도엔진 디버깅중 위와같이 에러가 발생했습니다. 소스를 보면

for i in range(ImageCount):
var spr = Sprite.new()
var imageName = "image" + i

단순히 for 문을 돌면서 imageName을 동적으로 만들어주려고 했던 부분에서 발생했습니다. c#처럼 스트링에 + 연산자로 바로 int형을 지원해주지는 않는 것 같습니다.

var imageName = "image" + str(i)

이렇게 GDScript가 지원하는 str함수를 사용해주면 잘 되네요. GDScript를 정식으로 공부하지 않고 막 짜다보니 이런 에러도 발생하네요.

String str( Variant what, Variant ... )
Convert one or more arguments to strings in the best way possible.

[Atomic Game Engine] 안드로이드 빌드 시 생긴 어이없고 골때렸던 2가지 이슈

이미지
아토믹 게임 엔진으로 신나게? 데탑 환경에서 빌드 테스트 후 안드로이드 빌드를 해봤습니다. 프로젝트를 처음 만들 때 안드로이드도 선택해서 만들었기 때문에 비주얼 스튜디오에서 자마린을 통해 빌드 자체는 큰 이슈없이 수행이 되더군요. 그런데 문제는 빌드 후 실행중에 있었으니, 일단 아래 사진을 보겠습니다.

샘플 빌드 후 실행 사진입니다. 감이 오시나요? 에디터에서는 분명 이미지 한개를 더 복사해서 2개로 만들고 안드로이드로 빌드해서 돌아가는 것을 찍은겁니다. 이런식으로 제 프로젝트에서도 작업한게 실 디바이스 빌드에는 전혀 적용이 하나도 안 되어 있더군요. 급 맨붕이 오더라는....

이것저것 또 건들여보기 시작합니다. 클린 빌드도 해보고 유니티에서 처럼 빌드 세팅을 지원해 주길래 에디터에서 빌드를 해보려고 Android로 플랫폼으로 바꾸는 시도도 아래 스샷과 같이 해봤더랬죠. 하지만 돌아오는건...
'어 닥치고 그냥 비주얼 스튜디오에서 해!' 였습니다. 분명 유튜브 동영상에서는 빌드 세팅으로 바꿔서 빌드하는 것을 본거 같은데...


대체 이번엔 또 뭐가 문제냐 이놈! 하고 그래, 포기하면 편해 내가 이제 너를 놔줄께~로 맘을 굳히려는 순간 한번도 실행해 보지 않은 메뉴가 눈에 띄었으니.... 그것은

바로 Developer - Plugins - AtomicNET - Package Resources 였습니다. 이거 실행하고 비주얼 스튜디오에서 디바이스로 빌드 실행하니 개발한게 잘 적용이 되더군요. 어이가 없더군요....

두번째 이슈입니다. 그렇게 첫번째 이슈를 통과하고 그래 이제 디바이스에서도 적용이 되는구나!를 느낀것은 불과 몇초... 메인메뉴에서 플레이씬으로 넘어갔는데 어라? 왜 이미지가 하나도 안보이는것이냐!! 데탑모드에서는 잘 나오는거 확인했었다고! 아놔..... 휴....
먼저 소스를 보시면,

ResourceCache cache = GetSubsystem<ResourceCache>();
strImageName = String.Forma…

[Atomic Game Engine] 아직은 Xamarin for Visual Studio Update를 하지 않는게 좋다.

이미지
비주얼 스튜디오 2015부터는 자마린이 통합이 되어있죠. 아토믹 게임 엔진에서도 이 통합된 자마린을 통해서 안드로이드 빌드를 하는 것 같습니다. 그런데 비주얼 스튜디오를 실행하면 아래와 같이 업데이트 준비가 되었다고 클릭해서 업데이트 하라고 뜹니다.


만약 여기서 자마린 for 비주얼 스튜디오를 최신으로 업데이트 하게되면 그 이후부터는 아토믹 게임 엔진으로 만든 솔루션이 로딩이 안되는 이슈가 발생합니다.

 이렇게 로딩되다말고 진행이 안됩니다. 비주얼 스튜디오를 건들면...

Microsoft Visual Studio is Busy 비주얼 스튜디오 바쁘다 이러고 계속 먹통이 되더군요. 물론 자마린을 언인스톨 하고 비주얼 스튜디오 2015가 기본으로 깔아주는것을 재설치하면 잘 됩니다.

비단 아토믹 게임 엔진의 솔루션만 그런게 아니고 일반 비주얼 스튜디오의 자마린 크로스 플랫폼 프로젝트도 생성시에 먹통이 되는 걸로 봐서는 꼭 아토믹 게임 엔진과 자마린의 충돌로만 생각되진 않습니다.

또한 저의경우 자마린 스튜디오도 따로 설치를 해둔 상태인데요, 여기서도 Xamarin 4.3.0.784 업데이트 있다고 하는데 이걸 하게되면 자마린 for 비주얼 스튜디오가 업데이트 되는 것과 같은 맥락이라 같은 이슈가 발생합니다. 그외 GTK#과 자마린 스튜디오 업데이트는 해도 무방하더군요.

자마린 스튜디오를 깔기전에도 이슈는 발생했었고 한번도 아니고 윈도우 10 재설치를 하고도 또 그런거 보면 제 PC만 그런것도 아닌듯 합니다. 아직 비주얼 스튜디오에 자마린이 통합이 되는 과정에서 발생하는 이슈인 듯 하니 자마린 업데이트는 잠시 미뤄두는게 좋을 듯 싶네요.

[Godot Engine] 만들어 놓고 방치하고 있던 게임 샘플로 공개합니다.

이미지
약 2년전에 고도 엔진으로 틈틈히 만들어본 짱깽뽀 게임입니다. 리소스를 당시에 어디서 구했는지 기억이 안나네요. 다 만들면 리소스 바꿔서 출시하려고 했는데 출시는 저 멀리 안드로메다로 가버렸네요. 아무튼 사운드는 정말 추억의 짱깽뽀더군요.

아래는 플레이 영상입니다.

허접한 소스이지만 공유합니다. 아래 링크에 있습니다.
https://github.com/WestwoodForever/Rock_Paper_Scissors

고도 엔진 쇼케이스에도 등록이 되었습니다.


[Atomic Game Engine] Git 무시 목록 설정해서 저장소 용량 줄이기

이미지
아토믹 엔진으로 처음 프로젝트 생성시 용량이 꽤나 되더군요. 아래 스샷은 FeatureExamples라는 왠만한 샘플이 다 들어 있는 프로젝트의 용량입니다. 160메가나 되네요.

이래저래 폴더를 지워가면서 불필요한 것을 찾아봤습니다. 결론적으로 .gitignore 파일에 아래 내용을 추가 해주면 됩니다. Cache/ AtomicNET/
그러면 FeatureExamples의 경우는 18메가로 줄어들었고, 2D 기본 프로젝트의 경우 아래와 같이 최초 생성시 86메가를 차지하는데

싹 정리하고나면 0.1메가도 안되는 40,960 바이트밖에 안되는군요. 
Cache 폴더야 그렇다 치고 AtomicNET에는 Debug, Release, Resources, Solution이라는 폴더가 있고 그안에 여러 파일들이 있습니다. pdb나 obj도 보이고 빌드 후 생성된 apk나 exe도 보이는 등 빌드와 관련이 있거나 런타임에 필요해보이는 dll등으로 구성되어 있는 것 같습니다. 그리고 솔루션 파일도 있는데 딱히 이것도 버전 관리가 필요하지 않습니다. 없으면 아토믹 에디터 실행시에 자동으로 생성이 됩니다.



만약 폴더를 지운 후 AtomicNET/Release 폴더가 자동으로 생성이 되지 않으면 아토믹 에디터에서 실행이 안되는데 Tools - Plugins - AtomicNET - Compile Project로 프로젝트를 컴파일 해준 후 실행하면 됩니다. AtomicNET/Debug의 경우는 비쥬얼 스튜디오로 프로젝트를 열어 빌드하거나 실행하면 생성이 됩니다.

[Atomic Game Engine] A project with an Output Type of Class Library cannot be started directly.

이미지
아토믹 에디터에서 컴포넌트를 하나 추가하고 단순히 비쥬얼 스튜디오에서 빌드를 하는데 아래와 같이 에러가 발생했습니다.

A project with an Output Type of Class Library cannot be started directly.
In order to debug this project, add an executable project to this solution which references the library project. Set the executable project as the startup project.

굳이 아토믹 게임 엔진이 아니더라도 C# 일반 프로젝트에서도 발생할만한 에러 같은데요, 컴포넌트를 추가 후 솔루션이 리로드 되면서 Startup 프로젝트 설정이 라이브러리 프로젝트로 바껴서 발생한 것 이었습니다. 왜 바뀐지 모르겄지만, exe를 빌드하는 Desktop 프로젝트로 시작 프로젝트를 변경 후 정상으로 되었습니다.

[Atomic Game Engine] ERROR: Failed to add resource path 'AtomicResources', check the documentation on how to set the 'resource prefix path'

이미지
아토믹 게임 엔진에서 샘플 프로젝트 말고 New Project로 2D 프로젝트 타입을 선택해서 만든 프로젝트로 작업 중에 아래와 같은 에러가 발생했습니다.

ERROR: Failed to add resource path 'AtomicResources', check the documentation on how to set the 'resource prefix path'

Severity Code Description Project File Line Suppression State
Warning  The file '..\..\..\Resources\Scripts\AtomicMain.cs' could not be added to the project.  '..\..\..\Resources\Scripts\AtomicMain.cs' is not an absolute path. myproject
Warning  The file '..\..\..\Resources\Scripts\AtomicMain.cs' could not be added to the project.  '..\..\..\Resources\Scripts\AtomicMain.cs' is not an absolute path. myproject.Desktop

Exception thrown: 'System.InvalidOperationException' in AtomicNET.dll


에러 위치는 AtomicMain::Start() 에서 LoadScene을 할 때 발생했습니다. 그냥 프로그램 실행 초기라고 보면 맞겠네요.

그런데 아토믹 에디터에서 플레이를 하면 위와 같이 잘 됩니다. 샘플에 와이프가 그려준 물고기들 더 추가해봤습니다.

유독 비쥬얼 스튜디오 2015에서 시작하면 에러가 발생을 하는데, 아토믹 게임 엔진은 기본적으로 C#으로 개발시 비쥬얼 스튜디오를 기본 IDE로 사용해주는데 이러면 곤란하죠. 어떤 상황에…

[Atomic Game Engine] Project cache folder does not exist 에러

이미지
아토믹 게임 엔진 기본 제공하는 샘플 프로젝트를 만들고 윈도우 OS 이슈로 OS를 다시 설치 후 기존에 생성해놨던 샘플 프로젝트를 읽어와 Visual Studio 2015에서 실행하니 아래와 같은 에러가 발생했습니다.

Project cache folder does not exist, projects must be loaded into the Atomic Editor at least once before using the -player command line

 Basic2D 샘플 프로젝트였는데 프로젝트 폴더에 보면 Cache 폴더가 존재하는데도 불구하고 에러를 발생하더군요.


혹시나해서 OS 다시 설치하기 전에는 D 드라이브 였던 하드가 E로 바뀌었길래 다시 D로 바꾸고 프로젝트를 열어 실행하니 잘 됩니다.

 아직 발전 가능성이 충분히 많은 엔진으로 보이는데요, 이런 경로 참고 부분은 어디선가 절대경로를 참고하고 있는 듯 하네요. 테스트로 드라이브 말고 FeatureExamples 이라는 것도 있는데 단순히 폴더명을 FeatureExamples_ 이런식으로만 바꿔서 해도 같은 증상이 나오는게 아무래도 절대경로를 어디선가 참고하고 있는게 확실한 듯 보입니다. 어서 수정이 되었으면 좋겠네요.