본문 바로가기

전체 글58

[유니티6] #4 픽셀 Run 게임 만들기 (하이 스코어, 배포) 플레이어가 죽었을 때 UI를 띄울 차례다.Create Empty로 DeadUI를 만든 후 버튼 이미지를 넣고 체크 해제하여 비활성화한다.   GameManager 스크립트에 DeadUI 변수를 선언하고 플레이어가 죽었을 때 활성화되도록 한다.인스펙터에서 DeadUI 변수에 드래그 앤 드롭하는 것을 잊으면 안 된다.   Heart 스크립트를 새로 만든다.생명 상태를 보여줄 꽉찬 하트와 빈 하트 변수를 선언한다.하트 이미지를 관리할 SpriteRenderer과 몇 번째 하트 오브젝트인지 알려주는 LiveNumber 변수를 선언한다.   인스펙터에서 변수에 꽉찬 하트와 빈 하트 이미지를 넣는다.LiveNumber에 하트를 각각 1, 2, 3으로 입력한다.   Update 메서드에 lives가 LiveNumbe.. 2025. 1. 8.
[유니티6] #3 픽셀 Run 게임 만들기 (플레이어 생명, 게임 매니저) 플레이어의 생명 변수 lives와 무적 변수 isInvincible을 선언한다.최대 생명은 3이다.   아래 OnTriggerEnter2D에 if문을 추가한다.태그가 Enemy일 경우 무적 상태가 아니면 생명이 1개 깎인다.태그가 Food일 경우 최대 3개까지 생명이 오른다. (Mathf.Min 사용)태그가 Golden일 경우 무적 상태(isInvincible)에 들어가고 일정 시간 후에 효과가 사라진다.   Create Empty로 Game Manager를 만든다.생명 확인, 게임 인트로 화면, 게임 오버 시 재시작 등 모든 걸 관리할 것이다.   Game Manager는 누구든 접근할 수 있고, 오직 하나만 있어야 하므로 static으로 만든다.Awake 메서드에 싱글톤 패턴을 사용한다.   게임 상.. 2025. 1. 7.
[유니티6] #2 픽셀 Run 게임 만들기 (장애물) 건물을 배경에 배치하기 위해 기준점을 아래로 설정한다.Sprite Mode를 Single, Pivot을 Bottom 으로 변경한다.왼쪽 위에 Center가 아니라 Pivot으로 되어있는지 확인한다.   Mover 스크립트를 만든다.Update 메서드의 transform.position에 Vector3 값을 더하여 건물이 계속 왼쪽으로 이동하도록 한다.추후 플랫폼과 적, 건물의 이동 속도를 동일하게 할 것이다.   Destroyer 스크립트를 만든다.필요없는 메모리가 사용되지 않도록 오브젝트가 파괴되도록 만든다.Mover 스크립트를 통해 왼쪽으로 움직이다가 X축 값이 -15가 되면 사라진다.   이렇게 만든 Building을 Prefab에 저장한다.prefab은 미리 조립된 게임 객체를 의미한다.만든 pr.. 2025. 1. 6.
[유니티6] #1 픽셀 Run 게임 만들기 (배경, 스크롤링, 플레이어 애니메이션) 2D 픽셀 이미지를 유니티에 옮기면 픽셀이 보이지 않도록 자동으로 최적화 하게 된다.Filter Mode를 Point (no filter)로 설정하고, Compression을 None으로 설정하여 압축을 하지 않도록 한다.   2D 픽셀은 반드시 Point 설정을 해줘야 한다.   Quad는 3D Object지만, 너비와 높이는 있어도 두께가 없다. (한 장의 종이)또한 3D 공간에서는 Quad를 볼 수 없다.이 Quad에 머티리얼을 적용하여 배경을 만들어볼 것이다.   배경은 Wrap Mode를 Repeat로 해준다.이 이미지가 여러 번 반복되도록 만들기 위해서다.   머티리얼 폴더를 만들어서 Material을 하나 만든다. (Quad에 이미지를 드래그하면 자동으로 생긴다.)Tiling의 X와 Y 값을.. 2025. 1. 2.
[C언어 #7] 구조체 (struct, typedef) 배열은 크기가 같은 동일한 데이터 타입만 묶을 수 있습니다.하지만 구조체를 사용하면 크기나 형식이 다른 데이터도 하나로 묶어서 관리할 수 있습니다.     1. 구조체 개념struct 구조체 이름{자료형1 변수_이름1;자료형2 변수_이름2;...}위 구조체는 몬스터 데이터를 저장하기 위해 서로 다른 데이터 타입(문자 배열, 정수)을 하나로 묶은 예제입니다.Monster는 새로 정의된 데이터 타입으로 int, char 등과 동일한 역할을 합니다.   2. 구조체 변수 구조체를 사용하려면 변수를 선언한 후, 각 요소에 접근하여 데이터를 저장하거나 읽어옵니다. 구조체 변수의 요소에 접근하려면 요소 지정 연산자(.)가 필요합니다.예를 들어 monster.name은 monster 변수의 name 요소에 접근합니다.. 2024. 12. 6.
[C언어 #6] 다차원 포인터 (2차원) 다차원 포인터는 메모리 주소를 여러 단계로 간접 참조하는 포인터로, 포인터의 개념을 한 단계 더 확장한 것입니다.      1. 다차원 포인터 개념 포인터는 메모리 주소를 저장하는 변수입니다.다차원 포인터는 이러한 포인터를 가리키는 포인터를 의미합니다.예를 들면 일반 포인터는 메모리 주소를 가리키지만, 다차원 포인터는 다른 포인터의 주소를 가리킵니다. 차원은 포인터가 참조하는 단계에 따라 증가합니다.일반 포인터: *ptr2차원 포인터: **ptr   2. 다차원 포인터 선언(자료형)**(변수 이름); 다차원 포인터 중 가장 자주 사용하는 2차원 포인터 예시입니다. 다차원 포인터는 자료형 앞에 차원의 개수만큼 *을 붙여 선언합니다.*의 개수가 많아도, 다차원 포인터 역시 메모리 주소를 저장하는 변수이므로 .. 2024. 12. 5.
[C언어 #5] 표준 입력 함수 (getchar, getc, gets, scanf) 표준 입력 함수를 사용하려면 프로젝트 상단에 #include 를 작성해야 합니다.표준 출력 함수(putc, printf 등)와 비슷하지만 포인터에 대한 개념이 필요합니다.     1. 단일 문자 입력 함수 getchar getchar는 get + character를 합친 단어입니다.단일 문자를 입력받고 이를 int 형식으로 반환합니다.  알파벳이나 숫자와 같은 대부분의 입력 문자는 1바이트 크기이므로, 반환값을 char 변수로도 받을 수 있습니다.하지만 getchar는 특정 상황에서 문제가 생길 수 있습니다.   1번째 입력 후에 누른 엔터키가 2번째 호출에서 입력으로 처리됩니다.이로 인해 2번째 출력은 원치 않는 결과를 출력할 수 있습니다.   이를 해결하기 위해 입력 버퍼를 초기화해야 합니다.C언어에.. 2024. 11. 28.
[C언어 #4] 포인터 (const, void*, 형변환) C#을 배우다 C언어를 배우게 되면 포인터라는 새로운 개념을 접하게 됩니다.포인터는 C언어의 중요한 특징 중 하나로, 성능을 높이고 메모리를 효율적으로 관리할 수 있게 합니다.포인터를 적절히 활용하면, 100바이트를 사용할 데이터를 4바이트로 줄여 처리할 수 있습니다.     1. 포인터 개념 운영체제는 메모리를 1바이트 단위로 관리합니다.32비트 운영 체제에서는 0번지부터 약 42억 번지(2³² - 1)까지의 메모리 주소가 부여되며,이 주소 범위를 저장하려면 4바이트가 필요합니다. 포인터는 바로 이 메모리 주소를 저장하는 변수입니다. 포인터가 4Byte 크기를 가지는 이유도, 메모리 주소를 표현하기 위해 unsigned int와 같은 4Byte가 필요하기 때문입니다.      2. 포인터 선언(*)(자.. 2024. 11. 20.
[C언어 #3] 표준 출력 함수 (putchar, putc, puts, printf) 표준 출력 함수를 사용하려면 프로젝트 상단에 #include 를 작성해야 합니다.#include는 컴파일러에게 특정 파일을 읽도록 지시하는 역할을 합니다.하지만 이 지시는 컴퓨터가 읽을 수 있는 2진수로 번역하는 것이 아니기 때문에 마지막에 세미콜론(;)을 붙이지 않습니다. 표준 출력 함수는 다양한 운영체제에서 동일한 코드로 동작하는 프로그램을 작성할 수 있도록 설계된 함수들입니다.보통 운영체제라고 하면 윈도우를 떠올리지만 맥 OS, 리눅스 등 다양한 운영체제가 사용되고 있습니다.이 표준 출력 함수를 사용하면 서로 다른 운영 체제에서도 문법을 바꾸지 않고 잘 동작하는 프로그램을 만들 수 있습니다.    1-1. 단일 문자 출력 함수 putchar putchar는 put + character를 합친 단어입.. 2024. 11. 19.