프로그래밍
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 클로저 클..
[스크립트 009] Window_Base 스크립트 - 메소드 살펴보기 (1)
[스크립트 009] Window_Base 스크립트 - 메소드 살펴보기 (1)
2018.01.24이전 시간까지는 타이틀 씬과 맵 씬 스크립트의 내용을 해부하고, 응용해 보았다.그러나 이번 시간부터는 씬 스크립트를 해부하지 않고, 윈도우 스크립트를 응용해보는 시간을 갖도록 하겠다.이유는, 더 이상 다른 씬 스크립트를 해부하더라도 윈도우 스크립트의 내용이 받쳐주지 않으면 내용을 알 수 없기 때문이다.또한 이번 글 부터는 형식을 조금 바꾸려고 한다. 스크립트 전문을 모두 보고 넘어가기보다, 중요한 메소드만 짚고 응용해보는 식이다. 윈도우 베이스는 어떤 것을 다루는 스크립트일까? 바로, 모든 윈도우의 근간이 되는 스크립트이다. 단순히 골드를 표시하는 골드 윈도우부터, 선택지를 고르도록 하는 커맨드 윈도우까지 모든 윈도우를 만들 수 있도록 하는 것이 바로 윈도우 베이스다.이 윈도우 베이스 스크립트를 마스터하..
[스크립트 008] 테스트 게임이 아닐 때에도 디버그 씬 부르기
[스크립트 008] 테스트 게임이 아닐 때에도 디버그 씬 부르기
2018.01.22전 시간 자료 : http://doublsb.tistory.com/62저번 시간에는 Input의 이해를 통해 메뉴 호출 키를 변경해 보았다. 이번 시간에는 테스트 게임이 아닐 때에도 디버그 씬을 부를 수 있게 만들어 보자. 테스트 게임일 경우, 디버그 씬을 부르는 키는 F9키이다. 이 메소드는 Scene_Map에 있다. 한 번 내용을 살펴보도록 하자. def update_call_debug SceneManager.call(Scene_Debug) if $TEST && Input.press?(:F9) end update_call_debug 메소드는 만약 테스트 게임이고, F9키를 눌렀을 경우 디버그 씬으로 이동시킨다.이 중 테스트 게임이 아닐 때에도 디버그 씬을 부를 수 있게 만드려면, 어느 부분을 수정해야..
[스크립트 007] 메뉴 호출 키 변경하기와 Input의 이해
[스크립트 007] 메뉴 호출 키 변경하기와 Input의 이해
2018.01.19전 시간 자료 : http://doublsb.tistory.com/59저번 시간에는 맵 씬(Scene_Map) 스크립트를 해부해 보았다. 이번 시간에는 맵 씬 스크립트의 응용으로, 메뉴 호출 키를 변경해 보자. 메뉴 호출은 보통 B키(키보드 X키)를 눌렀을 때 이루어진다.B키에 대응되는 키를 변경하는 건 게임 창에서 F1을 누르거나, properties에 들어가 수정하는 것만으로 가능하긴 하다. 그럼에도 불구하고 이번 시간에 굳이 메뉴 호출 키를 스크립트로 변경해보는 이유는 Input 기능에 대해 알아보기 위해서이다.우선 메뉴 호출을 관리하는 메소드를 보도록 하자. def update_call_menu if $game_system.menu_disabled || $game_map.interpreter.ru..
[스크립트 006] 맵 씬 스크립트 - 해부편 (2)
[스크립트 006] 맵 씬 스크립트 - 해부편 (2)
2018.01.18저번 글에 이어서 작성한다. Create Message Window 함수 목적 : 메세지 윈도우를 만든다. 함수 내용def create_message_window @message_window = Window_Message.new end 설명@message_window를 메세지 윈도우로 선언한다. Create Scrolling Text Window 함수 목적 : 스크롤 텍스트 윈도우를 만든다. 함수 내용 def create_scroll_text_window @scroll_text_window = Window_ScrollText.new end 설명@scroll_text_window를 스크롤 텍스트 윈도우로 선언한다. Create Map Name Window 함수 목적 : 맵 이름 윈도우를 만든다. 함수 내용..
[스크립트 005] 맵 씬 스크립트 - 해부편 (1)
[스크립트 005] 맵 씬 스크립트 - 해부편 (1)
2018.01.17이전까지의 글에서는 타이틀 씬을 해부하고, 응용해 보았다.이번 글에서는 맵 씬(Scene_Map)을 해부하고 응용해볼만한 구문을 찾아 보려 한다. 스크립트 전문 #==============================================================================# ** Scene_Map#------------------------------------------------------------------------------# This class performs the map screen processing.#============================================================================== class Sc..
[스크립트 004] 게임 도중 타이틀 이미지 변경하기
[스크립트 004] 게임 도중 타이틀 이미지 변경하기
2018.01.16저번 시간에는 타이틀 화면 없이 게임을 바로 시작해 보았다. 이번 시간에는 스크립트를 조금 손봐서, 게임 도중 진행상황에 따라 타이틀 이미지를 바꿀 수 있도록 해 보자. 타이틀 이미지를 바꾸려면 먼저 어떻게 이미지가 불러와지는지를 알아야 한다.타이틀 배경화면 표시를 관리하는, Scene_Title의 create_background 메소드를 살펴보자. def create_background @sprite1 = Sprite.new : sprite1이라는 이름의 새로운 스프라이트를 만든다. @sprite1.bitmap = Cache.title1($data_system.title1_name) : sprite1에 지정해둔 경로의 그림을 불러온다. @sprite2 = Sprite.new : sprite2라는 이름의..
[스크립트 003] 타이틀 화면 없애고 맵부터 시작하기
[스크립트 003] 타이틀 화면 없애고 맵부터 시작하기
2018.01.15전 시간 자료 : http://doublsb.tistory.com/56저번 시간에는 타이틀에 선택지를 추가하고, 삭제해 보았다. 이번 시간에는 아예 타이틀 화면 없이, 맵에서부터 게임을 시작할 수 있게 해 보자. Scene_Title 스크립트가 어떻게 시작하는지 기억하는가? 기억나지 않아도 좋다.한번 구문을 하나씩 보면서, 어떻게 해야 맵부터 게임을 시작할 수 있을지 보도록 하자. def start super : Scene_Base의 start 메소드를 불러온다. SceneManager.clear : SceneManager를 초기화한다. Graphics.freeze : 그래픽을 잠시 멈춘다. create_background : 배경화면을 생성한다. create_foreground : 전경화면을 생성한다...
[스크립트 002] 타이틀 선택지 추가/삭제하기
[스크립트 002] 타이틀 선택지 추가/삭제하기
2018.01.14전 시간 자료 : http://doublsb.tistory.com/54직접적인 응용 강좌가 아니기 때문에 아방스에는 올리지 않았다. 저번 시간엔 타이틀 씬의 내용을 해부했다. 저번 시간에는 타이틀 씬이 어떻게 이루어져 있는지 해부해보았다. 그렇다면 이번 시간에는 응용을 해보도록 하자.제작자들이 초보여도 건드리고 싶어 하는 부분이 바로 타이틀 선택지를 추가하고, 삭제하는 것이다. 여기 여러분의 고민과 아마도 비슷할 문제들을 보여 주겠다. Q1. 저는 타이틀에서 이어하기 선택지를 아예 빼 버리고 싶어요! Q2. 타이틀 선택지에 제작자의 이름을 넣고 싶어요! Q3. 아예 크게 크레딧 선택지를 만들어서 다른 화면을 보여줬으면 좋겠어요! 이 문제 중 1번과 2번은 오늘 이 글 하나만으로 충분하다. 하지만 3번은?..
[스크립트 001] 타이틀 씬 스크립트 - 해부편
[스크립트 001] 타이틀 씬 스크립트 - 해부편
2018.01.07오늘부터 RPG Maker VX ACE 스크립트를 해부하며 공부하고, 다른 사람에게도 도움을 주기 위해 글을 작성하려 한다. 작성 순서는 우리가 게임에서 만날 수 있는 순서로 진행할 예정이다. 먼저, 게임을 실행하기만 하면 만날 수 있는 타이틀의 스크립트부터 해부해보려 한다.기초인 씬과 클래스는 이 글에서 설명하려면 너무 길어지므로 큰 부분만 다룰 것이다. 보통 타이틀 씬을 건드린다고 하면, 이유는 타이틀 커맨드 선택지를 더 추가하고 싶거나, 타이틀 씬을 아예 없애고 싶거나, 변수에 따라 타이틀 배경을 바꾸고 싶어서일 것이다. 이런 응용은 다음 게시글에서 다루기로 하고, 본 글에선 스크립트가 어떻게 구성되어 있는지만 해부하기로 한다. 메소드를 호출한다는 건 def 이후에 있는 내용을 불러온다는 의미이다...