본문 바로가기

반응형

분류 전체보기

(425)
Unity를 사용하기 전에 알아두면 좋은 기본 개념들 Unity가 편한 개발 엔진이라고 아무런 기본 지식 없이 마냥 닥치는대로 하려다보니 이래저래 어려움이 많다. 이 포스팅에서는 Unity를 사용하면서 개인적으로 계속 헷깔렸던 부분들을 정리 한다. Transform.SetParent 의 worldPositionStays 인자 worldPositionStays 가 true일 경우 : SetParent시 자식이 되는 오브젝트의 월드 좌표는 변경되지 않는다(화면상으로 보기엔 그냥 그대로 있는것 같다는 말). 하지만 부모가 변경 되었으므로 로컬 좌표가 변경된다(이것을 이해하기 위해서는 월드 좌표와 로컬 좌표의 개념을 알아야 한다. 하지만 나는 이미 알고 있으므로 이 포스트에서는 다루지 않는다). 예를 들어 부모가 없는 두 오브젝트(부모가 없다는 것은 월드 포지션과..
Ubuntu core dump 셋팅 limits.conf 파일 수정 $ sudo vi /etc/security/limits.conf /etc/security/limits.conf 파일에 아래 두 줄을 추가 kukuta soft core unlimited kukuta hard core unlimited 위에서 kukuta는 계정명이다. 각자가 사용하는 계정을 적어 주면 된다. 위와 같이하면 프로세스가 예기치 않게 죽을시 코어 덤프를 남기고 죽게 된다. 코어 덤프 pattern 수정 /etc/sysctl.conf 파일에 아래 내용을 등록해 준다. kernel.core_pattern = core.%e.%p.%t 처음은 단순 core라고만 적혀 있다. 아래를 참고하여 각자가 원하는 형태로 바꾸도록 한다. %p: pid %: '%' is dropp..
게임에서의 동기화 들어가며 이번 포스트에서는 네트워크 게임에서 주로 언급 되는 '동기화'라는 개념에 대해서 알아 보도록 하겠다. 게임에서의 동기화에 대해 이야기하기 위해 먼저 '동기화(syncronization)'에 정의해 보도록 하자. 교과서에서 나올 법한 말로 정의하자면 '동기화 그룹 내 개체들의 상태 변화와 이벤트 발생 순서를 모든 개체들이 동일하게 인지 할수 있게 하는 작업' 정도로 정의할 수 있다. 그리고 일반적으로 게임에서는 '실시간'이라는 조건이 추가된다. 실시간이라 하면 최대 지연 시간(transmission delay)이 일정 시간 이하로 제한 된다는 것을 의미한다. 동기화 그룹 내 개체들의 상태 변화와 이벤트 발생 순서를 모든 개체들이 동일하게 인지 할수 있게 하는 작업 오늘 포스트를 통해 생각해 볼 것..
벡터(vector)의 연산 벡터는 두 점들 사이의 차이 또는 변위(displacement)를 나타낸다. 기하학에서의 벡터 기하학에서의 벡터(일반적으로 'v' 라고 표현)는 크기(또는 길이)와 방향을 가지는 요소이고 끝이 화살표인 선분으로 표현된다. 길이(or 크기)가 1인 벡터는 '단위' 또는 '정규화된' 벡터라고 한다. '제로 벡터'는 길이가 0이고 방향을 가지지 않는다. 벡터는 위치를 가지지 않는다. 위치와 상관 없이 동일한 크기와 방향을 가지는 벡터는 같다. 기하학에서 벡터는 '방향'과 '변화', 이 두가지 의미로 사용 될 수 있다. 벡터의 덧셈 뺄셈 실수와 마찬가지로 벡터도 산술 연산이 가능하다. 벡터의 덧셈은 두 벡터를 결합하여 새로운 벡터를 만든다. 벡터의 덧셈의 대수학적 법칙은 실수의 덧셈과 유사하다. v + w = ..
맵뷰 만들기 CreateEmptyMapView 오브젝트 만들기, 사이즈를 작게 잡자ScrollRect 추가Mask 추가Image 추가(Mask때문에)Movement Type을 Unrestrict로 변경MapView에 Pannel 자식 추가, 사이즈를 크게 잡자, Tiles라고 이름변경MapView의 Content에 Tiles 끌어다 놓기
리팩토링 - Position 클래스 만들다 보니 각 오브젝트의 위치 동일 여부를 매번 if(a.x == b.x && a.y == b.y)와 같이 비교하는것이 여간 귀찮은 일이 아닙니다. 그리고 위치를 리턴할 때도 애매합니다. 리턴 값은 한번에 하나 밖에 할수 없기 때문에 x 좌표와 y 좌표를 얻어 오는 함수를 각각 만들수 밖에 없습니다. 너무 번거롭고 귀찮은 일입니다. 그래서 이번 장에서는 좌표를 추상화한 'Position' 클래스를 만들겠습니다. 그리고 추가적으로 C#의 '참조 일치'와 '값 일치'에 대한 개념을 배워 보도록 하겠습니다. 먼저 Position 클래스를 정의해보겠습니다. public class Position { public int x; public int y; public Position(int x, int y) { th..
차례 들어가며..'The Rougelike'의 제작 계획 게임 미리 보기'The Rougelike'의 기획서모든 것의 시작..주인공 만들기Player 클래스 정의주인공 아스키 코드로 표시하기 - Unity UGUI를 이용해 주인공 오브젝트 표시모험의 시작..몬스터 만들기 - Monster 클래스 정의몬스터를 아스키 코드로 표시하기 - 유니티 프리팹 사용하기리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기리펙토링 - Position 클래스리펙토링 - C# 제네릭을 이용하여 Singleton 패턴 구현하기던젼으로 입장!!랜덤 맵 만들기 - 랜덤 맵 알고리즘의 소개ScrollRect를 이용하여 스크롤 되는 맵 만들기(unity ui 사용법 설명, 제작 과정)주인공 움직여 보기(이동 버튼 U..
리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기 이전 장에서 우리는 프리팹을 이용해 플레이어와 몬스터에 공통으로 쓰일 ObjectView를 만들어 보았습니다. 하지만 그 과정 중 우리는 ObjectView를 플레이어와 몬스터에게 각각 추가 해주어야 했고, SetPosition함수도 각각 수정해 주어야 했습니다. 이렇게 공통점이 많은 클래스를 각각 만들어 관리하게 된다면 공통 기능에 대한 수정이 필요한 경우 양쪽 클래스 모두를 수정해줘야 한다는 불편함이 따라 옵니다. 여기에서 우리에게 필요한 것은 '추상화'와 '상속'입니다. 공통 기능을 상위 클래스 작성하여 상속을 통해 각 하위 클래스에서 사용할수 있도록 하고, 각 클래스 별 필요한 기능들에 대해서는 하위 클래스에서 개별적으로 정의 합니다. 이렇게 작성된 코드들을 보다 유지 보수가 편리하도록 변경하는 ..
몬스터를 아스키 코드로 표시하기 이번 장에서는 몬스터 오브젝트의 뷰를 만들 차례입니다. 몬스터도 플레이어 처럼 하나의 아스키 코드로 표현 됩니다. 몬스터의 알파벳 첫글자를 따서 'M'이라고 하도록 하죠. 잠깐 몬스터 뷰를 개발하기 전에 유니티의 '프리팹'이라는 것에 대해 잠깐 알아보고 가도록 하겠습니다.(이미 잘 알고 계신다면 그냥 넘어 가셔도 괜찮습니다) 프리팹?유니티 게임 오브젝트를 인스턴스화 하는 방법은 두가지가 있습니다. 하나는 프로그래밍적으로 코드를 사용하여 인스턴스를 만드는 것이고, 다른 하나는 에디터상에서 미리 만들어진 프리팹을 로딩하는 것입니다. 프리팹을 사용 했을시 코드 상으로 최소 몇줄 이상 되어야 하는 코드들을 한줄로 줄일 수 있고, 런타임에 속성들을 변경하여 테스트 해볼 수 있습니다.프리팹은 내부적으로 하나( 혹은..
몬스터 만들기 이제 부터는 주인공과 열심히 싸워주고 경험치를 주는 몬스터를 만들어 보겠습니다. 몬스터는 각 종 수치와 액션 관점에서 플레이어와 비슷해 보이지만 개발 관점에서 보면 사실 상당히 다른 구조를 가지고 있습니다. 이전 장에서 개발한 플레이어는 프로그램의 시작에서 부터 끝까지 단 하나의 객체밖에 존재할 수 없으며 플레이어가 죽는 순간 게임은 종료 됩니다. 하지만 몬스터는 플레이어와 달리 게임 플레이중에 여러 몬스터들이 동시에 존재 할수 있고, 파괴되었다고 해서 게임이 종료 되지도 않으며, 게임 플레이 중에 지속적으로 생성과 파괴를 반복합니다. 또한 다양한 종류의 몬스터를 표현하기 위해 동일한 클래스에 데이터만 바꿔서 표현해 줄 수도 있있습니다. 위의 요구 사항들을 만족하기 위해서 몬스터 클래스를 '고정 정보' ..

반응형