쾌락없는 책임 (공부)
-
[Unity] Behaviour Tree에 관한 간단한 이야기쾌락없는 책임 (공부)/Unity 2023. 2. 9. 17:37
개요 지금까지는 FSM를 통해서 간단한 AI들만 만들어 왔습니다. 다만 FSM은 확실히 한계가 있고 유지보수에 있어서 코드를 보는 게 많이 힘들었습니다. 그래서 BT라는 게 있다! 는 걸 알고는 있었는데... 뭔가 알 수 없는 벽을 느껴 일단 외면하고 있었습니다. 최근에 와서 더 많은걸 알아봐야 된다는 필요성을 느끼고 있었고 이에 따라서 BT와 관련한 것들을 알아보고 정리하게 되었습니다. 일단 유니티의 경우에는 Behaviour Tree를 직접 구현하거나 에셋을 활용해야 하는데 일단 직접 구현으로 시작하게 되었습니다. Behaviour Tree 에 관한 간단한 개요 일단 FSM을 간단하게 알아보고 가겠습니다. 전에 만든 간단한 FSM 입니다. 객체는 한 개의 State만 가질 수 있고 각 State는 다..
-
[Unity] Unity Relay 를 통해서 P2P 연결 만들어보기쾌락없는 책임 (공부)/Unity 2023. 2. 1. 13:29
개요 이전 소켓 프로그래밍으로 네트워크를 제작할 때 한가지 문제점을 보게 되었습니다. 일단 포트 포워딩 없이 다른 IP를 연결하기가 힘들었고 다른 방법이 있다 했지만 네트워크 관련 지식이 없어서 다음으로 미루기만 했습니다. 다만 유니티의 최신 버전들 부터는 퍼스트 파티 네트워크 SDK 들이 생겼고 이후 Lobby와 함께 Relay를 활용해 게임 제작해 사용을 했습니다. 그래서 이번 글에서 Lobby에 이어 Relay를 간단하게 설명하려고 합니다. Lobby 유니티 공식에서도 Lobby와의 조합이 좋다고 합니다. 물론 대규모를 처리하기 위한 데디케이트 서버가 아니지만 소규모 정도는 Lobby + Relay로 충분히 가능할겁니다. Lobby는 이름처럼 매치메이킹을 위한 SDK 입니다. 이와 관련한 내용을 이..
-
[Unity] 유니티 멀티플레이를 위한 Lobby, 플레이어 매치메이킹쾌락없는 책임 (공부)/Unity 2023. 1. 30. 18:48
개요 친구와 함께 플젝을 시작하기 전, 최근 유니티에서 퍼스트파티로 네트워크 서비스를 제공하는 걸 접했습니다. Unity NetCode, Lobby, Relay들이 그 주인공들인데 최신 버전들은 이 혜택을 받을 수 있습니다. 그래서 이번에 Lobby를 통해서 플레이어 매치메이킹을 만든 과정에 대해서 한번 적어보려고 합니다. Lobby는 매치메이킹 용이지 멀티플레이 기능은 아닙니다. 일단 여러 플레이어가 CO-OP을 하거나 VS를 하는 기능과 Lobby는 다른 기능입니다. Lobby는 이름대로 매치메이킹을 위한 도구로 이후 Relay와 더불어서 플레이어 연결에 사용되는 기능입니다. 때문에 '멀티플레이' 자체를 보고 싶다면 NetCode 부분을 알아보시면 됩니다. (추후 글을 작성할 예정입니다) NetCod..
-
[Unity] GPGS Android Setup Invalid classname: Object reference not set to an instance of an object 오류 날 시쾌락없는 책임 (공부)/Unity 2023. 1. 30. 16:50
결론 : GPGS 버전을 바꿔보자 Unity 20213.10f1 버전을 사용하면서 GPGS는 이전 v0.10.12와 23년 1월 기준 가장 최신인 v11.01 을 사용했을 때 위와 같은 오류가 잡히게 되었습니다. 또한 Asset 메뉴에서 Extern Dependency Manager 메뉴도 찾을 수 없는 증상이 있었습니다. 이와 같은 오류들을 해결하기 위해서 단서를 찾아 봤는데 일단 v.11 이후부터는 GPGS SDK 버전이 달라져서 그런 것 같았고 이전 버전은 현재 유니티 버전과 잘 맞지 않아서 그런 것 같습니다. 그래서 결론은 GPGS 버전을 v10.14 로 변경하는 것입니다. 아마 유니티 버전과 GPGS 버전이 맞지 않아서 생기는 문제 같습니다. 2020년도 버전들의 유니티를 사용한다면 v10.12..
-
뤼카의 정리 - Lucas' Theorem쾌락없는 책임 (공부)/알고리즘 공부 2023. 1. 27. 15:58
개요 알고리즘 관련 글을 오랜만에 쓰는 거 같은데 공부하고 싶은 수학 알고리즘들이 많아서 하나 잡고 정리를 했습니다. 많이 본 것들 중 하나가 바로 '뤼카의 정리'입니다. 조합에 있어서 조합을 소수 p 로 나눌 때 나머지를 빠르게 구할 수 있는 방법입니다. 간단 기본 지식 오랜만에 수식들을 봐서 그런지 용어들이 익숙하지 않아 이해하는데 시간이 좀 걸렸습니다. 일단 조합은 확률과 통계에서 많이 보이던 아래 식을 의미합니다. 다른 말로 이항계수라고도 합니다. 그리고 뤼카의 정리는 이런 합동식으로 만들어지게 됩니다. 라고 하는데 여기서 '합동식'은 이런 식들을 의미하는데 다른 식으로 이렇게 표현합니다. 말로 풀어보면 'a를 m으로 나눌 때 나머지가 b'라는 뜻입니다. 다른 이야기들이 있는데 일단 넘어가자고요...
-
[C++] std::move return은 정말 필요할까?쾌락없는 책임 (공부)/C++ 짜잘이 2023. 1. 22. 11:41
개요 C++11부터의 중요 화두인 R-value reference를 보고 나서 '앞으로 모든 return 에 std::move를 명시해야 하는가?' 란 의문이 생기게 되었습니다. 앞으로 기존에 단순 return 하는 함수들에도 이를 써야 하나 라는 생각을 했는데 이번에 이에 대해서 알아본 결과를 한번 적어보겠습니다. 일단 return std::move() 는 불필요하다 일단 알아본 바로는 move로 반환할 이유가 없다는 것입니다. 먼저 일반적으로 반환하는 경우 컴파일러가 자동적으로 R-value로 변경을 해 줘서 이후 함수 반환값을 통해서 이동 생성자를 부를 수 있다고 합니다. 다만 std::move를 활용하게 되면 컴파일러가 이를 최적화할 여지가 사라진다고 합니다. RVO, NRVO와 copy elis..
-
[Unity] 유니티 fake null과 관련한 이야기들쾌락없는 책임 (공부)/Unity 2023. 1. 16. 11:56
개요 이전부터 문서들을 참고할 때 많이 보이는 내용이지만 이제 와서야 정리를 하게 된 내용입니다. 유니티가 오브젝트를 어떻게 가지고 있는지, GC, operator == 등과 관련한 이야기들을 확인할 수 있습니다. Destroy()를 하면 어떤 일이 벌어지는가 일단 현상을 먼저 보고 설명을 드리겠습니다. IEnumerator Start() { CapsuleCollider2D col = gameObject.AddComponent(); yield return null; Destroy(col); yield return null; IsUnityNull(col); IsSystemNull(col); } private void IsUnityNull(Object obj) { if (obj == null) Debug.L..
-
[C#] is null vs == null쾌락없는 책임 (공부)/C# 짜잘이 2023. 1. 15. 18:47
개요 친한 지인이 한번 질문을 했었습니다. 'is null이 == null보다 빠르다는데 이거 원리를 아냐?'. 완전 처음 듣는 이야기라 바로 검색을 해 봤는데 또 처음 보는 내용들이 올라와서 답장을 할 수 없었습니다. 그래서 이번에 한번 결과를 알아보기로 하고 조사를 해 봤습니다. 일단 is null이 빠른 게 맞다 일단 10,000,000개의 비교를 해본 결과 확실한 차이가 드러났습니다. 10배 이상의 차이가 나게 되므로 비교를 할 때 is로 해야 함이 확실해졌습니다. 언제부터? 7.0부터 What's New in C# 7.0 Update (4/2017): See New Features in C# 7.0, the update to this post. What follows is a descriptio..