전체 글(273)
-
[C#] CLR(Common Language Runtime)과 네이티브 코드(Native Code)
*이 글은 책을 바탕으로 공부한 글입니다. 네이티브 코드(Native Code)와 C#의 CLR 네이티브 코드는 CPU와 운영체제가 직접적으로 실행할 수 있는 코드들을 말한다. 보통 우리가 알고 있는 프로그래밍 언어들은 컴파일(Compile) 과정을 거쳐, 운영체제가 실행할 수 있는 기계어로 번역된다. 하지만, 이런 방식은 OS 및 HW 환경이 달라지면 실행이 불가능하다. 네이티브 코드의 단점을 해결하기 위해, 자바에서는 JVM, C#에서는 CLR과 같은 프로그램을 도입했다. C# 글이니 CLR에 대해서만 알아보자면, CLR은 .NET 라이브러리와 함께 OS 위에 설치된다. 그리고 C# 컴파일러는 C# 소스 코드를 컴파일하여, IL(Intermediate Language)라는 중간 언어로 작성된 실행 파..
2022.03.09 -
[Unity] 전처리기 플래그 (Preprocessor Flag)를 이용한 조건 컴파일 코드 작성하기
필요한 이유 유니티에서 조건별 컴파일을 할 수 있도록 코드를 작성할 수 있다. 유용하게 사용하는 대표적인 예시 중 하나로, 디버깅을 끝낸 후에 디버그 코드를 지우고, 다시 개발하다가 또 똑같은 오류를 접하게 되면 지웠던 내용들을 다시 작성해야 하는 번거로움을 겪지 않아도 된다는 게 있다. 이것은 전역 선언(Global define)을 통해 해결할 수 있다. 전역 선언이란, 코드를 조건별로 컴파일하거나 특정 단락을 제외하는 것을 활성화 또는 비활성화할 수 있도록 해주는 특별한 전처리기 플래그(Preprocessor flag)를 말한다. 플래그를 true로 설정하면 유니티는 자동으로 한 버전의 코드를 컴파일, false로 설정하면 또 다른 버전을 컴파일한다. 이렇게 하나는 디버그용, 또 다른 하나는 배포용과..
2022.03.08 -
[C++] 연산자 오버로딩 (Operator Overloading) (1)
/* 본 글은 글을 참고하여 공부한 글입니다. */ 연산자 오버로딩(Operator Overloading) 오버로딩 (Overloading) 객체지향언어에서 나오는 개념으로, 동일한 이름이지만 여러 개를 정의할 수 있는 것을 말한다. 대표적으로 함수 오버로딩이 있음 C++에서는 연산자 또한 오버로딩을 적용할 수 있다. 범위지정 연산자(::), 멤버 지정 연산자(.), 멤버 포인터 지정 연산자 (.*)는 오버로딩할 수 없다. 기본적으로 제공되는 자료형에 적용할 때는 사용할 수 없다. 비정적 클래스 멤버 함수 또는 전역 함수이어야 한다. 오버로딩 가능한 연산자들 산술 연산자 (+, -, *, ...) 비교 연산자 (==, !=, ...) 대입 연산자 (=) 복합산술 연산자 (+=, -=, ..) 논리 연산자..
2022.03.08 -
[C++] mutable 키워드
Java나 C#에서 string 클래스를 공부하다가 들었던 단어이다. (물론 string 클래스는 immutable이다.) 예전에 C++을 공부할 땐 보지 못했던 키워드라, 신기해서 살펴봤다. const 키워드를 통해 변수나 함수를 읽기 전용으로 만들 수 있었다. 당연히 const 멤버 함수 내부에서 값을 수정하는 것이 불가능하다. class Monster { int hp; public: void Heal(int value) const { // hp += value; const 멤버 함수 내부에서 값 수정 불가 } }; 하지만 수정하려는 변수에 mutable 키워드를 붙이면 const 멤버 함수 내에서도 수정이 가능해진다. class Monster { mutable int hp; // mutable 추가..
2022.03.08 -
[Unity] 빌드(Build)했을 때, JSON 파일을 읽지 못하는 현상
분명 유니티 에디터 상에서 실행했을 때는 JSON 파일을 잘 읽어왔었습니다. 그런데, 빌드만 하면 읽어오지 못하는 문제가 발생했네요... 이것 때문에 2시간은 삽질한 것 같습니다. 1. 문제의 JSON 파일 읽어오기 코드 using System.IO; using LitJson; private const string jsonFilePath = "/Resources/Json/Narration.json"; private JsonData ReadJsonFile() { if(File.Exists(Application.dataPath + jsonFilePath)) { string jsonString = File.ReadAllText(Application.dataPath + jsonFilePath); JsonData..
2022.03.07 -
[압량(Amnyang)] #Final. 새로운 적, 무당(Shaman)과 게임 시작 씬, 로딩씬, 인트로씬 제작
개발일지를 오랜만에 작성하러 왔다. 프로젝트를 개강 전까지 끝내고 싶어, 바쁘게 달린다고 글 작성할 시간이 없었다. 하지만, 결국 개강 전까지는 못 끝냈다....ㅎㅎㅎㅎ 오랜만에 글을 작성하려 하다보니, 어디서부터 적어야할 지 모르겠다. 그동안, 직면했던 고민들에 대해서 그냥 적어놔야겠다. 그러면, 나중에 볼 일이 있을지도? 1. 새로운 적, 무당(Shaman)과 집 길가에서 다음 집까지 가는 길목은 경관(Police)이 지키고 있었다. 이번엔 집 내부에서 플레이어를 괴롭힐 새로운 적이다. 사실 무당 로직을 구현하는데에 굉장히 많은 고민들이 있었고, 초반에 벌여놓은 실수때문에 타협을 할 수 밖에 없었다. 무당은 집에서 방들 사이를 랜덤으로 걸어다녀야 한다. 하지만, 집 구조가 다음과 같이 되어 있었다. ..
2022.03.05