[TIL] 2021-01-04 ~ 2021-01-10
2021. 1. 10. 18:40
TIL(Today I Learned)
2021-01-04 UE4 github.com/Knabin/Today-I-Learned/blob/master/Unreal%20Engine%204/The%20Ultimate%20Game%20Developer%20Course/004_Editor-Overview.md Knabin/Today-I-Learned Contribute to Knabin/Today-I-Learned development by creating an account on GitHub. github.com 2021-01-05 UE4 github.com/Knabin/Today-I-Learned/blob/master/Unreal%20Engine%204/The%20Ultimate%20Game%20Developer%20Course/005_The-Le..
[TIL] 2021-01-01 ~ 2021-01-03
2021. 1. 3. 22:52
TIL(Today I Learned)
2021-01-01 수학 github.com/Knabin/Today-I-Learned/blob/master/Math/Linear%20Algebra/1-1_Systems-of-Linear-Equations.md Knabin/Today-I-Learned Contribute to Knabin/Today-I-Learned development by creating an account on GitHub. github.com 선형대수학 재미있음! 깃허브로 옮긴 첫날이라 많이 어려웠다. 마크다운은 이제 조금 익숙해졌는데, 깃허브 뷰어에서 지원 안 하는 문법이 있어서 어떻게 할까 하다가 그냥 이미지 첨부 방식으로 변경했다. 음... 뭔가 TIL 자동화하신 분도 보이고, 블로그 형식으로 가도 될 것 같긴 한데, 그렇게 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZrkGh%2FbtqQ1NvqJRp%2Fc9Ak9SekLynQpGulqA5Zyk%2Fimg.png)
[TIL] 2020-12-22
2020. 12. 22. 23:47
TIL(Today I Learned)
Unreal Community 언리얼 엔진 포럼 forums.unrealengine.com/ Forum - Unreal Engine Forums Forum Description forums.unrealengine.com 언리얼 프로젝트 템플릿 일부 코드와 애셋이 포함되어 있으며, 이미 결합된 작은 프로젝트. 이를 통해서 어떤 식으로 프로그래밍했는지 그 방식을 살펴볼 수 있다. 프로젝트 세팅 블루프린트로 설정해도 C++ 클래스를 추가하고, C++로 변환할 수 있음. 뷰포트 이동 화살표를 잡은 상태에서 ESC 키를 누르면 바닥으로 내릴 수 있음! 이동(W), 회전(E), 스케일(R) 이동 스냅(격자 모양), 회전 스냅(각도 모양), 스케일 스냅(화살표)
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD9oal%2FbtqPDJacVLl%2FxrnfJ0A8c4EMG2okwDwFh1%2Fimg.png)
[TIL] 2020-12-08
2020. 12. 8. 23:36
TIL(Today I Learned)
boost::filesystem::remove_all 오늘은 열심히 디버깅해서 오류 조건을 찾아냈다. 처음에는 파일이 너무 커서 바로 안 지워지는 줄 알았지만, 특정 폴더에서만 오류가 발생했다. 대소문자 구분도 의심이 갔지만, OS 단계에서 처리하는 거라서 내가 어떻게 할 수는 없을 것 같았다. (빡세게 비교하면 되는 거긴 한데... 굳이? 싶다...) 지우려고 하는 폴더와 이름이 같은 폴더가 로컬에 이미 존재할 때, 그리고 그 폴더가 비어 있지 않을 떄 remove로 삭제할 수 없는 에러가 발생했다. ERROR_DIR_NOT_EMPTY 폴더를 delete 처리해야 한다는 건 그 안에 있는 정보 또한 전부 지우는 것과 마찬가지이기 때문에 boost::filesystem::remove_all을 이용하여 폴..
[TIL] 2020-12-07
2020. 12. 7. 23:57
TIL(Today I Learned)
QFile 파일을 쓰거나 읽기 위한 인터페이스를 제공하는 클래스. 텍스트와 바이너리 파일, 리소스를 읽거나 쓸 수 있는 입출력 장치. QTextStream이나 QDataStream과 사용하면 좀 더 편리하게 사용할 수 있다. 일반적으로 생성자를 통해 파일 이름을 넘기지만, setFileName() 함수를 사용해 추후에 따로 설정해 줄 수도 있다. 운영체제에 상관없이 '\'가 아닌 '/'를 사용함에 유의한다! exists() 함수를 사용하여 파일이 있는지 체크할 수 있고, remove()로 파일을 지울 수 있다. open(), close(), flush() 일반적으로 데이터를 읽을 때 QDataStream이나 QTextStream을 사용하지만, QIODevice에 있는 read(), readLine(), ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDOkNt%2FbtqPdRHHoMb%2FbA3LW0wiCYBlN1iKz7bvx1%2Fimg.png)
[TIL] 2020-12-05
2020. 12. 5. 23:36
TIL(Today I Learned)
Python 다운로드 www.python.org/downloads/windows Download Python The official home of the Python Programming Language www.python.org 변수 수 다루기 파이썬의 기본적인 수: 정수, 실수, 복소수 오늘 한 게 없어서 올리기 부끄럽다... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 내일부터 다시 힘내 보는 걸로!
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTpmtU%2FbtqO72QeIAj%2FGSdlhYHlfAzNQ8OSZhQJ11%2Fimg.png)
[TIL] 2020-12-04
2020. 12. 4. 23:47
TIL(Today I Learned)
CEF(Chrominum Embedded Framework) bitbucket.org/chromiumembedded/cef/src/master/ Bitbucket bitbucket.org REST API 리소스 상태에 대한 표현을 요청자에게 전송함, 주로 HTTP: JSON, HTML, XLT, 일반 텍스트 클라이언트, 서버 및 리소스 구성, 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처 stateless 커뮤니케이션: 요청할 때 클라이언트 정보가 저장되지 않고, 각 요청이 분리(연결되어 있지 않음) 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터 https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기 : TOAST Meetup REST AP..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAPCRS%2FbtqJWSc2SWM%2FEbfxoiFKwComQdDCsQGEKk%2Fimg.png)
[TIL] 2020-10-01
2020. 10. 1. 21:14
TIL(Today I Learned)
게임 제작 : 어메이징 볼링 Tag: 일반적인 경우, 1:1 비교 / Layer: 물리 관련, 필터링 여러 개 가능 Physics.OverlapSphere(Vector3 위치, float 반지름): 가상의 Sphere를 그려서 겹치는 Collider 배열을 반환해 준다. 오브젝트들이 랜덤으로 생성될 수 있는 범위를 Box Collider로 지정한다. Camera - Projection Perspective: 한 소실점으로 모인다. 멀리 있는 건 작게, 가까이 있는 건 크게 보인다. Orthographic: 원근감이 없다. Property: 변수처럼 사용할 수 있지만, 내부에서는 함수로 작동한다. ref 키워드: 함수 안에서 변경된 값을 그대로 들고 나온다. Update(): 화면이 갱신될 때마다 호출된다..
[TIL] 2020-09-30
2020. 9. 30. 23:41
TIL(Today I Learned)
평행이동과 좌표계 transform.Translate()는 기본적으로 Local space를 기준으로 움직인다. 단, 함수 옵션으로 Space.Self(Local), Space.World(World)를 넣어 기준점을 지정할 수 있다. Inspector view의 transform은 부모의 상대 좌표를 기준으로 한다. 상대적인 기준이 될 부모 오브젝트가 존재하지 않는 오브젝트는 월드 좌표를 기준으로 한다. transform.position은 Global space 기준 좌표, transform.localPosition은 Local space 기준 좌표이다. rotation, scale 또한 Rotation/localRotation, lossyScale/localScale이 존재한다. 회전과 쿼터니언 Qua..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSOJa2%2FbtqJP6J7zKW%2F18yWU5uQrtvR2C2KPgGMK0%2Fimg.png)
[TIL] 2020-09-29
2020. 9. 29. 23:18
TIL(Today I Learned)
게임 제작 : 소코반(창고지기) Material: Shader + Texture Albedo: 기본 색상 Smoothness: 물체의 표현이 반들반들한 정도 Input.GetAxis("Horizontal") Input.GetAxis - 직접 키가 연결돼 있는 게 아니라, 이름을 찾아가서 맵핑되어 있는 키를 가져온다. Input Manager는 조이스틱을 지원하기 때문에 float형으로 값을 처리한다. Rigidbody.AddForce - 힘이 주어지고, 해당 힘을 내부에서 계산해서 관성이 적용된다. Rigidbody.velocity - 바로 속도를 컨트롤할 수 있다. Time.deltaTime: 화면이 한 번 깜빡이는 시간 = 한 프레임의 시간 youtu.be/uZA1z90x1Eg
[TIL] 2020-09-28
2020. 9. 28. 23:26
TIL(Today I Learned)
메시지와 브로드캐스팅 MonoBehaviour 1. 컴포넌트로써 게임 오브젝트에게 추가될 수 있다. 2. 유니티의 통제를 받는다. 3. 유니티 이벤트 메시지를 감지할 수 있게 된다. 유니티 엔진은 컴포넌트의 초기화 메소드 등... 메시지에 담아서 브로드캐스팅한다. 메시지 1. 보내는 쪽은 누가 받는지 신경 쓰지 않는다. 2. 받는 쪽은 누가 보냈는지 신경 쓰지 않는다. 3. 메시지에 명시된 기능을 가지고 있으면 실행, 없으면 무시한다. 브로드캐스팅: 메시지를 무차별적으로 많이 보내는 것 => 복잡한 참조 관계를 끊고 라이프 사이클을 스스로 관리할 수 있게 한다.
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg4sNw%2FbtqJKwU1WiF%2F7ltAjChuWcekgK0vB6Cff1%2Fimg.png)
[TIL] 2020-09-27
2020. 9. 27. 23:24
TIL(Today I Learned)
미니 RPG tag를 사용하면 오브젝트를 손쉽게 찾을 수 있다. magnitude를 사용할 경우, 루트 값을 적용하기 때문에 조금 느릴 수 있다. 따라서 성능 최적화를 하고 싶다면 sqrMagnitude를 이용해서 제곱값을 가지고 처리한다. float distance = (player.transform.position - transform.position).magnitude; float distanceSqr = (player.transform.position - transform.position).sqrMagnitude; 아직 참조 중이기 때문에 메모리에서 날라가지는 않았지만, null 체크 시 null로 인식하게끔 강제로 변경한다. 연산자 오버로딩 => Object 클래스에 존재한다. GameObjec..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxNqC2%2FbtqJxHRGhxN%2F0CVDHnx3TOaGitHa62enK0%2Fimg.gif)
[TIL] 2020-09-25
2020. 9. 25. 23:40
TIL(Today I Learned)
미니 RPG 커서를 사용하는 법 1. Texture Type이 Sprite인 경우, 일반 UI처럼 직접 관리하는 방법 2. Texture Type을 Cursor로 설정하는 방법 Cursor.SetCursor(사용할 Texture2D, 마우스 기준점 Vector2, CursorMode) CursorMode.Auto: 해당 플랫폼에 맞춰서 CursorMode.ForceSoftware: 소프트웨어용 커서 Ctrl + m + o: 전체 블록 닫기 Ctrl + m + l: 전체 블록 열기 상태 머신보다 코드에서 직접 컨트롤하는 경우가 좋을 때가 있다. Play를 이용해도 되지만, 자연스럽게 전환되길 원한다면 => Animation.CrossFade docs.unity3d.com/kr/530/ScriptRefere..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbumK4P%2FbtqJluSA1Kt%2Fbf5twYdcHfGYrX9mdm3aS1%2Fimg.png)
[TIL] 2020-09-24
2020. 9. 24. 23:09
TIL(Today I Learned)
미니 RPG Light Map Directional Light: 아주 멀리 있으면서 한쪽 방향으로 빛을 쏴 주는 태양 같은 조명이다. "어느 방향"으로 쏘고 있는지가 중요하다. Point Light: "전구" 같은 느낌으로 특정 범위 안에서 빛을 쏴 주는 조명이다. 횃불 등에 사용한다. Spot Light Light - Mode Realtime: 실시간으로 빛을 연산하겠다. => 어마어마한 부하가 일어난다. Mixed: Realtime과 Baked를 반반 섞어서 사용하겠다. Baked: 계산된 파일을 이용해서 빛을 적용하겠다. 움직이는 물체만 연산 처리한다. Inspector창의 Static을 체크하면 해당 오브젝트가 움직이지 않는다고 가정한다. 1. Collider가 있기 때문에, 두 Collider가..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FldsFH%2FbtqJikvTlS7%2FR1YiSObYUnksYHfFriFzw1%2Fimg.png)
[TIL] 2020-09-23
2020. 9. 24. 03:03
TIL(Today I Learned)
Coroutine 길 찾기 등 오래 걸리는 로직이라면 여러 프레임에 거쳐서 처리하는 게 나을 수도 있다. 함수를 일시정지를 했다가 다음 Tick에 해당 작업을 이어서 수행할 수 있게끔 한다. class CoroutineTest : IEnumerable { public IEnumerator GetEnumerator() { yield return 1; yield return 2; yield return 3; yield return 4; } } protected override void Init() { base.Init(); SceneType = Define.Scene.Game; Managers.UI.ShowSceneUI(); CoroutineTest test = new CoroutineTest(); fore..
[TIL] 2020-09-22
2020. 9. 23. 03:38
TIL(Today I Learned)
Object Pooling Pooling할 Object / Pooling하지 않을 Object를 Poolable Component로 구분한다. Pool Manager는 Resource Manager를 보조하는 개념으로써, 기존 Resource Manager의 문제점을 개선해야 한다. public GameObject Instantiate(string path, Transform parent = null) { // 1. original 이미 들고 있으면 바로 사용 GameObject prefab = Load($"Prefabs/{path}"); if (prefab == null) { Debug.Log($"Failed to load prefab: {path}"); return null; } // 2. 혹시 po..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz7eN5%2FbtqI7w3ta09%2Fsb3xMJDz9oKXZJYDGHmKI0%2Fimg.png)
[TIL] 2020-09-21
2020. 9. 22. 02:57
TIL(Today I Learned)
Scene Manager Scene에서 Scene으로 넘어가려면 Scene 등록을 거쳐야 한다. LoadSceneAsync(): LoadScene을 해 버리면 현재 Scene의 내용을 다 날리고, 다음 Scene을 Load 처리할 텐데, 만약 GameScene의 규모가 큰 경우 한참 기다려야 할 수 있다. Sound Manager MP3 Player => AudioSource MP3 음원 => AudioClip 관객(귀) => AudioListener Audio Listener는 기본적으로 Scene의 메인 카메라에 설정되어 있다. AudioSource의 PlayOneShot()을 이용하면 해당 Audio Clip을 플레이한다. 두세 개가 겹쳐도 그냥 플레이된다. 단, 실행 중 GameObject를 De..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9Ywd%2FbtqIZnskCDR%2FMz7BZZaKaXx9DqKAhmvMYk%2Fimg.png)
[TIL] 2020-09-20
2020. 9. 21. 02:56
TIL(Today I Learned)
Button Event Canvas의 Render Mode를 변경하면 다른 방식으로 출력할 수 있다. Screen Space - Overlay는 가상의 카메라가 찍고 있는다고 생각하면 편하다. Button이 눌렸을 때 실행될 함수는 Button의 On Click()에 등록하면 된다. UI 같은 경우, 해당 UI를 눌렀을 때 본인이 아니라 다른 오브젝트(플레이어, 다른 UI 등)를 동작하게끔 구현해야 할 수도 있기 때문에 Object를 선택하는 칸 또한 존재한다. Canvas를 하나의 Prefab으로 저장해서 사용하면 된다. 부모 오브젝트에 사용할 Script를 붙이고, 부모 오브젝트를 Object에 끌어다 놓는다. 그리고 Script 내에서 public으로 선언한 함수를 지정해 주면 된다. UI 버튼을 ..