https://store.steampowered.com/app/2114090/Goetita_Turnbased_City/

 

Goetita: Turn-based City on Steam

Goetita: Turn-based city is a turn-based strategy game controlling the element of luck through rational judgment. Survive even in a desperate situation when all your resources are running out with your strategy in the cold and dark city!

store.steampowered.com

 포스트 알파 버전이다.

 

drive.google.com/file/d/1oHa5oFSviQrRc7WPzWc7NYW9Q3tWC4T6/view?usp=sharing

 

Goetita_TurnBased City_Window_PostAlpha.zip

 

drive.google.com

 

 이게 공부걸 응용한 결과물이다. 살짝 느낌을 달리 해줬다.

 거의 1년간 블렌더 배우는데 열중했더니 유니티 쓰는 법이 가물 가물 해서 UI하고 JSON하고 신 매니지 먼트 강의를 좀 보고 와야 겠다. 이전에 JSON쓰는 법 공부를 하긴 했는데 까먹은듯 싶다. 

 이런식으로 이동을 하면 점점 차는 것도 만들어야 한다. 사실상 이게임을 배꼈네 표절이네 그 소리가 나올정도로 따라할 생각이다. 요효과음 같은것도 말이다. 물론 음악은 좀 다르겠지만 말이다. 물론 살짝 다른게 있다면 이게임은 2D지만 내껀 3D 툰쉐이더 라는것 정도다. 근데 느낌은 거의 비슷할듯 싶다. 

using UnityEngine.SceneManagement;

 씬을 넘기기 위해선 이걸 넣어야 하는듯 싶다.

SceneManager.LoadScene("Level1");

 업데이트를 안해서 근가 자동완성이 안뜨는게 흠이다. 여튼 이렇게 하면 씬을 로드 하는게 가능한듯 싶다. 

SceneManager.LoadScene(0);

 인덱스로도 찾아 갈수 있는가 보다. 생각보다 어렵지 않다. 

 이거랑 

SceneManager.GetActiveScene()

이거를 를 많이 쓰는듯 싶다. 나머진 차차 보도록 해야 겠다. 

 메뉴 시스템의 경우에는 이미 오픈 소스가 있는듯 싶다. 

https://github.com/YousicianGit/UnityMenuSystem

 이걸 활용해서 메인 화면의 메뉴시스템을 만들어야 겠다. 일단 메뉴 시스템을 만들고 내정 씬으로 넘어가는걸 만들고 거기서 미션을 받으면 맵씬으로 넘어가는걸 만들면 될듯 하다. 맵에서 이동을 하고 전투가 들어가면 전투 씬으로 넘어가면 될듯 하다. 이때 맵에서 씬의 진행상황을 저장을 하는게 필요할듯 싶다. 그리고 맵을 완료를 하면 맵리스트에서 그씬은 빼고 다시 랜덤하게 받도록 해야 겠다. 맵 지도는 동일 하지만 레벨에 따라서 다른 형태의 진행이 이루어 지도록 하는 것도 중요하다. 맵이 같다고 해서 이벤트가 매번 같게 나오는 것도 아니여야 한다.

 며칠째 작업은 안하고 머 작업해야 할지 어떤 순서로 할지 계획하는데만 시간을 보내고 있는듯 싶다. 처음 만들어 보는 거라서 근듯 싶다. 아마 두번째 작품 부터는 경험이 있으니 바로 진행할듯 싶다. 

 저기 게이지 차는 것은 어떻게 만들어야 할지 모르겠다. 아 그리고 전투로 넘어간 다음에 다시 씬으로 넘어왔을때 씬이 초기화 되면 안된다. 이걸 어떨게 구현할지도 문제가 된다. 

private void LoadLevel (string levelName)

{

SceneManager.LoadScene (nextLevelndex);

}

 

private void LoadLevel (int levelIndex)

{

SceneManager.LoadScene (levelIndex);

}

 

 강의를 보다가 새로 알아낸게 있는데 C#의 경우에 이름은 같은 함수인데 변수를 넣으면 거기에 대응하고 함수를 넣으면 또 거기에 대응하는 걸 만들수 있다는 거다. ScenManager에 LoadScene 함수도 그런 용도인듯 싶다. 

private void ReloadLevel ()

{

Scene currentScene = SceneManager.GetActiveScene();

LoadLevel (currentScene.buildIndex);

}

 현재 씬은 이런식으로 불러오는가 보다. 

private void LoadNextLevel()

{

Scene currentScene = SceneManager.GetActiveScene();

int currentSceneIndex = currentScene.buildIndex;

int nextSceneIndex = currentSceneIndex +1;

int totalSceneCount = SceneManager.sceneCountInBuildSettings;

 

// if (nextSceneIndex == totalSceneCount)

// {

// nextSceneIndex = 0;

// }

 

nextLevelndex = nextSceneIndex % totalSceneCount;

 

LoadLevel (nextSceneIndex);

 

}

 이런건 나머지 기호를 적절히 활용하는듯 싶다. 

private void LoadLevel (int levelIndex)

{

if (levelIndex >= 0 && levelIndex < SceneManager.sceneCountInBuildSettings)

{

SceneManager.LoadScene (levelIndex);

}

}

 신 버전에서는 먼가 바꼈는가 자동완성이 안된다. 이게 1년간 만들다보니 꽤나 구버전을 사용하고 있는 형편이다. 아마 신버전은 차기작때 작업하게 될듯 싶다. 

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html

 

Unity - Scripting API: SceneManager

You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see: You've told us there are code samples on this page which don't work. If you know ho

docs.unity3d.com

 유니티 API 도큐먼트를 옆에다 두고 복사 붙여넣기를 하며 만들어야 할듯 싶다. 

private void LoadLevel (int levelIndex)

{

if (levelIndex >= 0 && levelIndex < SceneManager.sceneCountInBuildSettings)

{

SceneManager.LoadScene (levelIndex);

}

else

{

Debug.LogWarning("Level Index error : invalid scene specified");

}

}

 제대로 안되면 에러 메세지를 출력하게 한다. 

private void LoadLevel (string levelName)

{

if (Application.CanStreamedLevelBeLoaded (levelName))

{

SceneManager.LoadScene (nextLevelndex);

}

else

{

Debug.LogWarning("Level Index error : invalid scene specified");

}

}

 이것도 일종의 안전장치인거 같다. 함수 이름을 보니 씬이 로드가 될수 있을때만 로드가 되도록 하는듯 싶다. 

 일단 예전에 충동 구매한 강의가 있으니 보고 가야 겠다. 사둔게 머가 이리 많은지 모르겠다. 

 Alt + Shift를 누르면 화면 크기를 지정해 주지않아도 자연스럽게 맞춰서 늘어나는걸 고를수가 있다. 유용한 내용인듯 싶어서 기록해 두어야 겠다. 

 상호작용이 없는 것은 레이케스트 타겟을 꺼줘야 하는듯 싶다. 이번편을 통해서 UI를 다루는걸 완벽하게 숙지하고 가는듯 싶다. 시뮬레이션의 경우에 단순하게 만들고자 한다면 유니티를 다루는 것이 거의 UI와 데이터를 다루는 정도이고 기획만 어려운 경우가 많으니 말이다. 보통 그래서 프로그래머 포트폴리오로 시뮬레이션은 추천하지 않는 경우가 많다. 

 인터렉티브한 바이 판낼에는 캔버스 그룹을 추가해 주는듯 싶다. 아직까진 이게 정확히 멀하는지는 잘 모르겠다. 아 그리고 버튼 그룹이란 단어를 보고 문득 드는 생각이 어느나라나 철자와 읽는 밝음이 정확하게 대응대는게 아니다. 이게 잘 대응되는 언어가 스페인어인데 어찌 이걸 해냈는지 하는 생각이든다. 

 아 그리고 알트 쉬프트는 클릭 버튼이 일반적인 경우랑 반대다.

  수직인 경우에는 버티컬 레이아웃 그룹을 추가하는듯 싶다. 그냥 일일히 배치하는게 아니라 이런식으로 레이아웃 그룹을 추가해주면서 만드는듯 싶다. 

 이런식으로 말이다. 

 레이아웃 그룹이란게 UI를 만듬에 있어 상당히 편리한 기능인듯 싶다. 캔바스 그룹을 추가하고 안하고로 헤드와 바디를 인터렉티브한 부분과 아닌 부분으로 판낼을 나누는 것도 기초적인 부분인듯 싶다.

 영상과 거진 비슷하게 가고 있다. 

 버튼을 누르면 씬이 넘어가게 만들었다. 이게 Public을 해야 버튼의 이벤트로 등록이 되는듯 싶다. 이런식으로 이벤트 기반을 지원하니까 꽤나 먼가 알만툴 같은 느낌이 든다. 

 한 1년쯤 지나니까 초기에 열정은 다 사그러 드러버린듯 싶다. 머라 그래야 하나 그냥 하루에 딱히 할꺼 없으면 하는 일과 정도 되버린듯 싶다. 

    [RequireComponent(typeof(Canvas))]

 이것도 일종의 안정장치중 하나인듯 싶다. 이게 자동완성이 안뜨다 보니 자주 사용하게 되지는 않을듯 싶긴하다. 이거 비주얼 스튜티오 코드 스니핏을 어디서 수정할수 있는지 알아볼 필요가 있을듯 싶다. 자주 쓸만한거는 추가해 두면 되니 말이다. 

 이게 크게 돈을 버는 사람들은 야성적 충동에 이끌려 사업에 뛰어드는 사람이라고 케인즈가 그랬는데 그 야성적 충동이 지금은 흐물 흐물해져 버렸는듯 싶다.

  유튜브 알고리즘이 기가 막힌게 이런 고민을 하고 있는 와중에 유튜브에 도파민과 중독에 대한 의사의 영상이 뜨더라. 보통 건강한 사람은 아침에 도파민 킥이 있어야 하는데 당뇨 환자는 그게 안되서 혈당이 저하되고 짜증이 나고 그런다고 한다고 하더라. 그래서 아침에 도파민을 인위적으로 주입해 주면 당뇨 문제가 해결될 뿐만 아니라 삶도 활기가 넘친다고 한다. 댓글들 보니 실용적인 해결책들이 있었는데 밤에는 야동을 본다든지 이러면 안된다고 한다. 

  중간부터는 프리팹과 싱글톤을 써서 씬을 만드는 데 이부분은 건너 뛸 생각이다. 물론 건너뛰면 진도 나가는게 꼬이긴 하는데 적당히 바꾸면 될듯 싶다. 이게 처음 배운게 고닷엔진을 이다 보니까 고닷엔진 특유의 노드와 노드를 직접 있는 시스템을 선호난 편이다. 이거 정확한 디자인 패턴이름은 모른다. 반면에 싱글톤은 제한적으로 사용하는 편이다. 고닷엔진에서 이걸 코드로 만들기가 어려워서 생긴 습관이다. 고닷엔진에서는 오토 로드라는 걸 엔진 내에 구현을 해 놓았는데 대부분 여기다가 게임내 기준이 되는 공용 상수 값나 API 급 공용 함수 들을 모아놓는 걸로 쓴다. 그래서 그것과 유사한 게임 유틸리티라는 걸 만들어 놓고 비슷하게 쓰고 이거 이외에는 따로 만들지 않는 편이다. 

 싱글톤은 건너 뛰고 퍼즈 메뉴를 만들어야 겠다. 이경우 TIME이라는 함수를 쓰는듯 싶다. 

  쭉 흟어보고 있는데 Time.timeScale = 0이나 1을 넣으면 되는듯 싶다. 영상이랑 좀 달라진 상태로 진도를 빼야 하니 아이디어만 가져와서 직접 만들어봐야 겠다. 타임 스케일을 바꾼경우에는 픽스드 타임 스케일도 같이 바꾸는걸 권장한다고 한다. 

 

 이거 보고 있는데 문득 사고 싶다는 생각이 든다. 유니티 코딩을 하는 걸  강좌 보면서 배우는는건 이제 좀 지겨워 져서 이런식으로 툴이 가르쳐 주는 걸로 해야 할듯 싶다. 기계가 할수 있는건 기계에게 맞기고 인간은 보다 창의적인거에 더 몰두 해야 한다는 컨셉인데 꽤 마음에 든다. 

 씬이 넘겨질때 Objects.DondDestroyOnLoad 라는 기능을 활용해야 하는듯 싶다. 

 이제 JSON만 보면 강의는 끝이 날듯 싶다. 갠적으로 Json에 대해 관심이 많았을때 산 강의라서 이게 포함이 되어있는듯 싶다. 

 열정이 사라진게 병이 걸려서 그런듯 싶다. 겨드랑이에 테그 같은게 생기면 당뇨의 전초증상인 인슐린 저항 증후군이라는데 나중에 당뇨가 된다고 한다. 당뇨 환자의 경우 의욕이나 흥미 상실을 경험하는 경우가 있다고 들어서 말이다. 적당한 근력운동, 적절한 음주, 스트래스 관리를 하면 문제는 해결된다고 한다. 근력운동은 약간 근육이 아플 정도로 해줘야 한다네. 중략을 주는 운동을 해야 겠다. 

  처음 시작했을때 막 존나 끓어 오르던 열정이 다 날라가 버렸다. 

 이게 의욕상실의 문제의 원인은 식사에 있는지도 모르겠다. 집에 당뇨 환자가 있어서 배가 부른뒤에도 밤에 통닭은 먹어야 하는 일이 많았기 때문이다. 적절한 식이 조절을 해보고 다시 의욕이 생기는지 테스트를 해봐야 겠다. 

 

 플레이어프리프 이건 좀 복잡한 형태인듯 싶다.  다 스트링 형태로 바꿔야 하니 말이다. 아 글고 세이브 로드에 관한 이미 만들어진 에셋이 있다는데 그것을 일단 알아봐야 할듯 싶다. 유니티에 트렌스폼이라든지 다 형태를 기억하고 저장할수 있는 거면 좋을듯 싶다. 

 유니티 1년 구독이 플러스는 34만원이고 프로는 172만원 정도 인듯 싶다. 플러스와 프로가 무슨 차이가 있는지는 잘 모르겠다. 추가 기능이 있나 싶다. 이걸 구매할 시점은 출시를 앞두고 유니티 로고를 때야 할 필요가 있을때일듯 싶다. 일단은 무료 버전에서 지원하는 기능으로도 개발하는게 문제가 없기 때문이다. 

 여기서 로고를 지울수 있는듯 싶다. 

   플러스 모델만 사도 스플레쉬 로고를 지울수 있는듯 싶다. 일단 이 기능말고 유니티 클라우드 1기가 제한 풀어주는 것도 필요하다. 에셋 이것저것 깔아보고 테스트 하다보니 용량이 터질꺼 같다. 깃을 쓰면 된다고 듣긴 했는데...

 이건 월별이 아니라 선불로 결제 해야 한다. 잘못하면 똑같이 돈내는데 못 쓰는 문제가 있을 수도 있겠다. 35만원이라 치면 이거랑 라이더 유니티 버전을 사면 도합 50만원 정도 필요할듯 싶다. 합리적으로 생각하면 전시회에 출품할 쯤에 사는게 맞긴 하다. 가격 올라봤자 한달 치 정도 올릴테니 말이다. 

 마음은 둘다 산다 쪽에 기울어져 있긴 한데 일단은 라이더 30일 트라이얼 버전을 써보고 결정을 해야 겠다. 아마 리팩토링 할게 많을듯 싶다. 

 무료 버전을 다운 받을 필요가 있다. 갠적으로 공부할때 외우는건 왠간해서 안하는 편인데 단축키 정도는 외워야 하는듯 싶다. 

 키맵은 리삽 키맵을 쓸 생각이다. 비주얼 스튜디오 코드가 F2가 이름 다시 짓기로 되어 있다. 설치하려는데 나도 모르게 흥분이 된다. 이런 기분 오래간만이다. 우분투를 처음 깔때도 이런 기분이었던거 같다. 

 닷넷 코어나 모노도 미리 설치가 되어 있어야 한다. 

 기본적으로 유니티도 지원하는듯 싶다. F# 이 있는데 갠적으로는 이런 간결한 언어들이 좋더라. 머라 그래야 하나 영어는 아닌데 먼가 세계인이 함께쓰는 인공적인 공용어 형태 같다는 느낌이 든달까.

 

  닷넷 코어 3.5 이상이 필요하다고 하는데 리눅스 버전은 3.0 밖에 없다. 흠 아직 일단 구매를 보류 해야 될듯 싶다. 이건 사실 부차적인 문제고 엄청 많이 밑줄이 쳐지는데 이걸 고치면 작동을 안하는 문제가 있어서 말이다. 조금은 비효율적이고 가이드를 벗어나더라도 일단 동작하는게 우선이다. 

 일단은 뒤로 미루어 놓자. 

 도타를 하는데 꼭 특정시간 가령 자기 전에는 계속 패배를 한다. 남의 문제가 아니라 내가 플레이를 못해서 인거 같은데 아마도 자기전이라 수면이 부족해서 그런듯 싶다. 패배한 상태로 잠을 자는거는 정신건강에 별로 좋은듯 싶다. 게임은 낮에만 하는 걸로 하고 밤에는 그냥 자야 겠다. 

 Json은 예전에 배우기만 하고 만들어 본게 아니라서 까먹게 된듯 싶다. 일단 다시 영상을 보고 다시 공부해야 겠다. 그전에는 게임의 기본 메카니즘을 만드느라 필요가 없었는데 이제부터는 저장해야 하는 요소들이 있어서 실재로 쓸듯 싶다. 실재로 쓰면 잊어버리기가 어렵다. 

 


WRITTEN BY
아이고이아

,

 

 이걸로 이펙트 강의는 마무리 해야 겠다. 이거 끝나고 남자 캐릭터를 만들고 본격적으로 게임을 만들어 나가야 한다. 스킬트리라든지 이런거 만들어야 할듯 싶다. 이걸로 일단 게임 메카니즘을 만들고 BIC에 출품하는 걸 목적으로 해야 겠다. 아마 접수가 5월달이니 6개월간 게임 메카니즘을 만드는 거다. 튜토리얼과 전투 1개 정도 만들면 될듯 싶다. 그렇게 만들어서 사람들 반응을 보고 피드백을 받아서 정식 출시를 하면 될듯 싶다.

 O키를 누르면 스컬핑 모드로 구지 안가도 자연스럽게 늘려주는듯 싶다. 

 요로코롬 되는듯 싶다. 

 이번편은 트레일이라는걸 쓰는듯 싶다. 예전에 만들어 본 기억이 난다. 아그리고 연습이라 텍스쳐가 들어간 이펙트를 쓰는데 실전에서는 거진 텍스쳐 없이 매쉬만으로 이루어진 이펙트를 쓸꺼다. 모델링 자체도 텍스쳐가 안들어 가니까 통일성을 맞추는 차원에서 그렇게 할 생각이다. 

 여기까지다. 여기까지 해서 마무리 해야 겠다. 그럼 다시 본래 게임 제작 작업으로 넘어가야 겠다. 사실상 강의를 듣는것도 여기까지 해서 마무리가 될듯 싶다. 이제부번 공부를 하기보다는 배운걸로 실습을 하는데 더 주안점을 두어야 한다. 

 


WRITTEN BY
아이고이아

,

 


WRITTEN BY
아이고이아

,

 

 강의에 예제로 나온 이펙트는 총 3개다. 이거 끝내면 이제부터 실전인 듯싶다. 그때그때 유튜브나 구글 검색해가며 이펙트를 만들어야 하는 듯싶다. 

 일단 원이 하나 생기능걸 만들어야 하는데 영상대로 했는데 잘 안됐다. 그게 1개 딱 하고 파티클이 나오는 건데 두 레이션을 1로 하고 맥스 파티클을 1로 하고 이미션에서 카운트를 1로 해쭸다. 제자리에서 뜨고 이동을 안 하게 하려면 스타트 스피드를 0으로 해주면 된다. 

 그러면 이런식으로 하나만 뜬다. 

 파티클의 시작 위치가 균일하지 않은 문제가 있다. 원래 파티클은 랜덤 하게 뜨는 게 정석이긴 한데 이번에 만들 것은 정위치에서 한번 반짝하고 등장할 거라서 말이다. 

 오토 랜덤 스피드를 꺼주어야 정위치에 한번 반짝하고 나타났다가 사라진다. 이게 먼가 알려준대로 안 되는 게 있어야 공부하는 게 더 재미있어지는 거 같다. 아무거나 막 눌러보면서 말이다. 

 마나가 공중에서 모여진다는 느낌이 든다. 

 너무 많긴 하다. 

 그 다음 진도는 블렌더를 활용하는 거다. 

 적용이 안돼서 헤매었는데 여기 모델 누르면 뜨는 매쉬로 해야 되는 거 같다. 

 여기까지 했는데 아무것도 안뜬다. 머가 문제 일까...

 메쉬에 따라 되는게 있고 안 되는 게 있다. 차이는 음... 이게 이펙터가 만든 메쉬는 되고 아닌 에셋은 안된다. 

  흠 잘 모르겠다. 일단 이걸 기반으로 다시 만들어 봐야겠다. 

 왜 되는지는 잘 모르겠지만 어찌됬든 된다. 이걸 기반으로 진도를 나가야겠다. 

 이팩트는 배경처럼 에셋 써도 그렇게 티는 안나니까 일단은 배워 높기만 하도록 하자. 꼭 필요한 게 있으면 그때그때 만들면 될 듯싶다. 

 내일 마지막 강의 보면 거진 끝날듯 싶다. 이게 충동구매를 한 통에 일주일을 강의 보는데 쓰는 듯싶다. 

 


WRITTEN BY
아이고이아

,