분류 전체보기
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1r5Ni%2FbtsqwAC1HAC%2FszeE9yaTsWVZKnscEfdfCK%2Fimg.png)
C++과 C#의 차이 (데이터, 메모리)
게임 개발에 사용하는 대표적인 엔진인 언리얼 엔진과 유니티 엔진은 각각 C++, C# 언어로 스크립트를 작성한다. 두 언어 모두 C언어에서 파생되었다는 것과 객체지향 프로그래밍 언어라는 공통점이 있지만, 꽤나 큰 차이가 있다. · 컴파일 결과 C++와 C#은 똑같이 컴파일이라는 과정을 거쳐 실행 파일을 생성하게 되지만, 프로그래머가 작성한 소스파일의 컴파일 결과로 생성되는 중간 파일의 형태가 다르다. C++로 작성한 코드는 어플리케이션의 실행 파일을 운영체제가 바로 실행하기 때문에, 컴퓨터가 이해할 수 있는 기계어에 가까운 어셈블리어라는 언어로 컴파일한다. 반대로 C#으로 작성한 어플리케이션은 운영체제 위의 .NET이라는 가상 머신 실행 환경에서 실행되기 때문에 .NET에 적합한 IL(Intermidia..
[C++] 경량 패턴, Flyweight Pattern
공유를 통해 많은 수의 소립 객체들을 효과적으로 지원합니다. (GoF의 디자인 패턴 265p) '오래된 숲이 모습을 드러낸다.' 게임에서 흔히 볼 수 있는 설정이다. 일반적으로 이런 장면은 '경량패턴'으로 종종 구현한다. 숲에 들어갈 나무들 나무들이 화면을 가득 채운 빽뺵한 숲을 볼 때, 그래픽스 프로그래머는 1초에 60번씩 GPU에 전달해야 하는 몇백만 개의 폴리곤을 본다. 수천 그루가 넘는 나무마다 각각 수천 폴리곤의 형태로 표현해야 한다. 설사 메모리가 충분하다고 해도, 이런 숲을 그리기 위해서는 전체 데이터를 CPU에서 GPU로 버스를 통해 전달해야 한다. 나무마다 필요한 데이터는 다음과 같다. 줄기, 가지, 잎의 형태를 나타내는 폴리곤 메시 나무 껍질과 잎사귀 텍스처 숲에서의 위치와 방향 각각의..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBwp5h%2FbtsqvhCFkSz%2FrMGqkCy1c91Mizifeuq8KK%2Fimg.png)
[C++] 명령 패턴, 커맨드 패턴, Command Pattern
요청 자체를 캡슐화 하는 것입니다. 이를 통해 서로 다른 사용자(client)를 매개변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다. (GoF의 디자인 패턴 311p) 명령 패턴은 메서드 호출을 실체화 한 것이다. 실체화는 '실제하는 것으로 만든다'라는 뜻으로, 프로그래밍에서는 무엇인가를 '일급(first-class)'으로 만든다는 뜻으로 통한다. 즉, 어떤 개념을 변수에 저장하거나 함수에 전달할 수 있도록 데이터, 즉 객체로 바꿀 수 있다는 걸 의미한다. 다시 요약한다면 명령 패턴은 함수 호출을 객체로 감싼다는 것이므로 콜백을 객체지향적으로 표현한 것이다. 입력 키 변경 모든 게임에는 버튼이나 키보드등 유저 입력을 읽는 코드가 있고, 이런 코드는 입력을 받아서 의미있는 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGfs5g%2Fbtsp63d5cXk%2FW6h89iZYqz41BxnTDxeDm1%2Fimg.jpg)
[JS] '==' 와 '===' 는 다르다
무엇이 다른가? 저는 자바 언어를 먼저 배운 입장에서 자바스크립트에 깊게 노출되지 않았기 때문에 충격을 받았다. 비록 자바스크립트의 어떤 기능, 사건 처리, 그리고 어떤 jQuery 속임수에 상당히 익숙했지만, 자바스크립트에 대한 미묘한 세부 사항들을 알지 못했다. 다시 마음을 잡고 웹 개발의 기본을 공부하기로 마음 먹은 저는 '==' 와 '===' 연산자의 차이를 알지 못한다고 스스로 말하면서 올바른 생각을 했다. 정답부터 말하자면, '=='와 '===' 연산자의 주된 차이점은, 예를 들어, 숫자를 숫자 리터럴과 비교하면, '=='는 그것을 허용하지만, '===' 두 변수의 형식은 동일하지 않은 경우, 값뿐만 아니라 두 변수의 유형도 확인하므로, 허용하지 않는 것이다. 즉, '==='는 'false'으..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Lxg5%2Fbtsp9Z2EdcP%2FZMxj5sicslgsUZsoNBQc30%2Fimg.jpg)
[JS] 자바스크립트의 형변환 (Type Casting)
자바스크립트는 타입이 매우 유연한 언어이다. 때문에 자바스크립트 엔진이 필요에 따라 암시적변환을 혹은 개발자의 의도에 따라 명시적변환을 실행한다. 암시적 형 변환(Implicit type conversion) 암시적 변환이란 자바스크립트 엔진이 필요에 따라 자동으로 데이터 타입을 변환시키는 것이다. 1) 산술연산자 더하기(+) 연산자는 숫자보다 문자열이 우선시 되기 때문에, 숫자형이 문자형을 만나면 문자형으로 변환하여 연산된다. number + number // number number + string // string string + string // string string + boolean // string number + boolean // number 50 + 50; //100 100 + “점”..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUblXn%2FbtspVMwtlAz%2FRi0C05NT3WFpqkDOSosGL1%2Fimg.gif)
[Unity] 내 주변을 원 모양으로 퍼지는 탄환 생성
특정 오브젝트를 기준으로 원 모양으로 퍼지는 탄환을 생성하는 방법이다. int n = 10; int speed = 150; for (int i = 0; i < n; i++) { GameObject boltObj = Instantiate(boltPrefebs, player.transform.position + new Vector3(0, 0.3f), Quaternion.Euler(0, 0, (360 * i / (n - 1)) + 180)); //투사체의 각도가 자연스럽게 회전값을 넣었다. Vector2 dirVec = new Vector2(Mathf.Cos((Mathf.PI) * 2 * i / (n - 1)), Mathf.Sin((Mathf.PI) * i * 2 / (n - 1))); //원을 기준으로 각각..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMDLWD%2FbtspZCNW6ML%2FFkxpVF1wvdcdZBAjdncuok%2Fimg.gif)
[Unity] 내 주변을 원 운동하는 오브젝트 만들기
float circleR; //반지름 float deg; //각도 float objSpeed; //원운동 속도 void Update() { deg+= Time.deltaTime*objSpeed; if (deg < 360) { var rad = Mathf.Deg2Rad * (deg); var x = circleR * Mathf.Sin(rad); var y = circleR * Mathf.Cos(rad); YS[0].transform.position = transform.position + new Vector3(x, y); YS[0].transform.rotation = Quaternion.Euler(0, 0, deg * -1); //가운데를 바라보게 각도 조절 } else { deg = 0; } } 회전하..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchm96x%2FbtspXlsaKD5%2FlEjHnUX0FvbP1SUD2hXxk1%2Fimg.gif)
[Unity] Sprite Sheet (스프라이트 시트)를 사용한 2D 애니메이션
유니티에서 스프라이트 시트(sprite sheet)를 사용한 2D 애니메이션 스프라이트 시트(sprite sheet)는 여러개의 작은 그래픽을 그리드(grid)에 정렬하여 구성한 비트맵 이미지 파일이다 게임 개발에서 캐릭터의 연속적인 키 포즈를 한장의 이미지에 구성하여 2D 애니메이션 제작에 사용된다. 1) 유니티에서 스프라이트 시트 이미지를 가져오기한다(import) 2) import settings에서 텍스처 유형(texture type)을 sprite(2D and UI), 스프라이트 모드(sprite mode)를 multiple로 설정하고 apply를 클릭한다. 3) 패키지 매니저에서 2D Sprite 패키지를 설치한다(install) 4) import settings에서 스프라이트 편집기(spri..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8NZlL%2FbtspYelWRa3%2FYFrZVZjU2drRnXipAH7CBk%2Fimg.png)
[Unity] 유니티 2D RPG 강좌 #1 - 스프라이트 설정하기
1-1. 스프라이트란 무엇일까? 3D 게임에 사용되는 플레이어, 적 등의 모델들은 모두 3D 모델로 되어있다. 2D 게임에서 사용되는 플레이어와 적 그림들은 "스프라이트"라고 한다. 게임에서 제일 기초가 되는게 바로 스프라이트다. 지금 만들 2D RPG 게임에 사용될 스프라이트는 "도트" 형식의 스프라이트다. 우리가 흔히 아는 고해상도 고퀄리티의 그림들이 아닌 "점"들을 사용해서 그린 픽셀 아트를 도트라고 한다. 유니티를 실행하고 새 프로젝트를 만들어 줍시다. 상단에 있는 "New" 버튼을 클릭. 먼저 프로젝트 이름과 프로젝트를 저장할 위치를 정한 다음에 우리는 2D 게임을 만들것이기 때문에 Template를 2D로 설정해주자. 설정을 완료했다면 "Create Project" 버튼을 클릭해서 프로젝트를 ..