전체 분류
[Asset 제작 일지] 대화 시스템 만들기 04 : Property Drawer 구현하기
[Asset 제작 일지] 대화 시스템 만들기 04 : Property Drawer 구현하기
2020.04.11저번에 이어서, Property Drawer의 구현이다. 오늘은 결론부터 가져왔다. 일단은 원하는 기획대로 구현이 되었기 때문에 성공. ...코드는 최악이지만 말이다. 정리를 전혀 안 해놨다. 날코딩의 결과를 보고 싶은 사람들은 이쪽으로. 해당 커밋 보러가기 코드에서 영 좋지 않은 냄새가 좀 많이 난다. 때문에 일단 차근차근 무엇을 구현했는지 쓰고, 코드를 좀 정리해보는 시간을 갖도록 하겠다. #1 버튼 PropertyDrawer에서 버튼을 구현하기 위해서 GUI.Button을 사용하였다. 보통 CustomEditor에서는 GUILayout.Button을 사용하는데, 이상하게 해당 구문을 쓰는 게 불가능했다. 이런 오류가 뜨는데, 찾아본 결과로는 Monobehavior를 상속하고 있는 클래스여야 GUIL..
[Asset 제작 일지] 대화 시스템 만들기 03 : Property Drawer 알아보기
[Asset 제작 일지] 대화 시스템 만들기 03 : Property Drawer 알아보기
2020.04.09지난번에는 Emotion 클래스를 완성했고, dictionary를 우회하여 배열 두 개로 입력할 수 있도록 해 보았다. 하지만 이대로는 배열 두 개일 뿐이고, dictionary처럼 보이지는 않는다. 그래서 Custom Editor를 활용하여 값이 보이는 방법을 다듬기로 했었다. 시작도 하기 전에 문제가 생겼는데, 만들었던 Emotion 클래스는 Monobehavior의 상속을 받지 않으므로, Custom Editor로 구현할 수 없었다. 이를 지원하기 위해 Monobehavior의 상속을 받지 않은 클래스도 보여지는 방식을 편집할 수 있도록, 유니티가 Property Drawer를 지원한다는 것을 알게 되었다. 유니티 Property Drawer 문서 보러가기 #1 PropertyDrawer 상속 받기..
[Asset 제작 일지] 대화 시스템 만들기 02 : 클래스 설계
[Asset 제작 일지] 대화 시스템 만들기 02 : 클래스 설계
2020.04.08지난 번에 이어서, Emotion을 저장해두고 해당 Emotion에 맞는 Sprite를 불러오기 위한 작업을 진행할 것이다. - Emotion의 자료구조 : Dictionary - Emotion의 데이터 저장 형태 : 텍스트 파일 목표는 이와 같았는데, 변경 사항이 생겼다. 첫 번째로, 데이터 저장 형태가 굳이 텍스트 파일일 필요가 없었다. Emotion의 string 데이터와 sprite 데이터 모두 메타 파일에 저장하면 되는 것이 아닌가? 오히려 텍스트 파일에 sprite를 넣으려면 경로를 저장해야 하므로 더 귀찮은 상황이 생겼다. 그래서 프리팹에 Emotion 스크립트를 넣고, 인스펙터로 값을 할당하기로 정했다. 두 번째로, 꼭 캐릭터마다 Emotion은 고정이어야 할까? 가령, A라는 캐릭터는 H..
[Asset 제작 일지] 대화 시스템 만들기 01 : 프로젝트 분석
[Asset 제작 일지] 대화 시스템 만들기 01 : 프로젝트 분석
2020.04.07만들고 싶은 게 RPG는 아니지만, RPG 만들기에서 사용하는 대화 표시 방식은 어느 게임에서든 쓸모있다고 생각한다. 하지만 개인 프로젝트였기 때문에 에셋을 받아 사용하고 싶지는 않았으므로, 직접 개발해보고자 한다. 이 에셋이 완성되고 나면 개인 프로젝트에 적극적으로 사용할 수 있을 것이다. 목표는 다음과 같다. 1. N프레임에 한 글자씩 출력되어야 한다. 2. 글자가 출력될 때마다 소리가 나야 한다. (Ex : 키보드 소리, 사람 소리 등) 3. 문장 출력 도중 감정 표현을 위해 이미지가 변할 수 있어야 한다. 4. 글자를 빠르게 나오거나, 느리게 나오도록 만들 수 있다. 5. 도중에 화면을 클릭하는 경우 한번에 문장이 출력되어야 한다. (스킵 기능) 6. 문장 데이터를 불러올 수 있어야 한다. 7. ..
해치웠나?! (2020, 1맵1치킨 대회 버전)
해치웠나?! (2020, 1맵1치킨 대회 버전)
2020.02.02안녕하세요, 쌍쌍뱌입니다. 알만툴 작품은 대단히 오랜만에 내는 것 같네요. 본 게임은 4회 1맵1치킨 대회 참여작입니다. 시간에 쫓긴... 결과물.... 빅 눈물 그 자체입니다. 플레이타임은 30분으로 예상하고 있습니다만, 헤매지 않으신다면 15분 정도 걸릴 수 있겠네요. 스테이지는 총 3개입니다. 제가 만든 게임답지 않게 난이도가 쉬운 편입니다만, 모처럼 열심히 시스템을 만들었는데 게임 스테이지를 구현할 때 시간에 쫓겼기 때문입니다 ㅎㅎ; 이후 원맵이 아닌 형태로 다시 제작하려고 합니다. 기대해주신다면 감사하겠습니다. 플레이 영상 녹화 및 스트리밍은 제작자 닉네임인 "쌍쌍뱌"를 올바르게 표시하는 한 영리적으로 이용하실 수 있습니다. 올바르게요. 제 닉네임에 맺힌 한을 잊지 마십시오... 다운로드 링크 ..
Unity : Child를 Destroy 후 ChildCount를 참조할 때 문제상황
Unity : Child를 Destroy 후 ChildCount를 참조할 때 문제상황
2019.11.28Destroy로 해당 오브젝트의 Child를 모두 삭제하고 싶을 때, for를 사용할 경우 보통 다음과 같은 코드를 짜게 될 것이다. for (int i = 0; i < transform.childCount; i++) { Destroy(transform.GetChild(i).gameObject); } 이후, ChildCount를 출력하면 어떻게 될까? for (int i = 0; i < transform.childCount; i++) { Destroy(transform.GetChild(i).gameObject); } print(transform.childCount); 그렇다. 0이 아니다. 처음에 이걸 알고 난 이후에 영문도 모른 채 자기자신을 공격했다. 왜 이런 일이 일어났을까? Destroy를 호출해..
~09/10 Log
~09/10 Log
2019.09.108월에 그린 리퀘들
ML-Agents 공부 (3) 190818
ML-Agents 공부 (3) 190818
2019.08.18본 카테고리는 "공부"입니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. #은 공부하면서 스스로가 적는 코멘트입니다. 1) Academy 스크립트 작성 참 편리하게도 추상 클래스로 되어 있기 때문에, Academy를 상속받기만 하면 됨. 상속받으면 빈 프로젝트여도 Academy로 작동한다. #후에 라이브러리 공부하기 Inspector 창에서 Academy의 상세 정보 설정 가능. Time Scale : 배속. 15로 잡으면 15배속으로 학습이 이루어진다. Target Frame Rate : 목표로 하는 화면의 프레임. 2) Agent 스크립트 작성 Agent를 상속받으면 해당 스크립트는 에이전트로 판단됨. AgentReset Agent 초기화 함수. CollectObser..
ML-Agents 공부 (2) 190818
ML-Agents 공부 (2) 190818
2019.08.18본 카테고리는 "공부"입니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. #은 공부하면서 스스로가 적는 코멘트입니다. - 외부 텐서플로우는 유니티와는 독립적으로 작동. - 유니티 내부에서 관측된 환경을 텐서플로우로 보내고, 텐서플로우는 어떤 작동을 시켜야 할 지 브레인으로 보냄. - 그 후 브레인에서 에이전트로 보냄. 에이전트(Agent) - 액터(Actor). 주변 정보를 관측할 수 있다. - 선택 및 행동을 실행하는 데, 이 때의 결과에 따라 보상과 처벌을 받음. (강화학습) 브레인(Brain) - 정책 결정자. 에이전트의 선택과 행동을 결정함. - 단, 브레인을 공유하는 에이전트가 서로 정보를 교환하는 것은 아니다. 정책과 경향이 같은 것 뿐. - 브레인은 종족/사상..
ML-Agents 공부 (1) 190818
ML-Agents 공부 (1) 190818
2019.08.18본 카테고리는 "공부"입니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. 1) 환경 구축 - Python 3.6.8 +Anaconda - ML-Agents 0.6.0 - Unity 2017.4.31f1 구버전이지만, 강의 자료의 버전은 이와 같은 상태였기에 적용하였음. 2) 패키지 설치 - Anaconda prompt 실행 - conda create -n ml-agents python=3.6 명령어로 ml-agents 개발환경 생성 - conda activate ml-agents 명령어로 ml-agents 환경 로드 - pip 및 ml-agents에 필요한 라이브러리 설치 3) 유니티 내에서 ml-agents를 실행하기 위해, Linux 빌드 서포트를 추가해야 함
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유
2019.07.291 발생한 문제 오늘 개인 프로젝트를 작업하다가 슬픈 일을 겪었다. delegate를 사용해 Change_Tab 함수를 버튼에 추가하려고 했는데, 의도대로 되지 않았다. 아래쪽과 같은 코드를 사용해 프로그램을 구현했더니 다음과 같은 결과가 발생했다. 의도한 대로라면 아래쪽과 같이 탭을 누를 때마다 해당 탭으로 이동해야 했지만, 위와 같이 아무리 눌러도 첫번째 탭을 보여 주고 있었던 것이다. 심지어 for문에는 아무런 문제가 없었다. i를 Print로 출력해 봐도 0, 1, 2, 3, 4를 반복할 뿐이었고, 고통받았다. 원인은 Closure에 대한 잘못된 이해였다. 그러므로 미래에 내가 고통받지 않기 위해 클로저에 대해 정리하고, 왜 위의 코드가 슬픈 결과를 낼 수밖에 없었는지 알아 보겠다. 2 클로저 클..
~07/14 Log