본문 바로가기

전체 글646

유니티 - [글로벌좌표, 로컬좌표, 이동, Space.World] ▣ 안녕하세요. 이번장에서는 글로벌과 로컬 좌표에 대해 그리고 이동에 대해 공부해보겠습니다. ▣ 우선 기본적으로 하나의 플레이어를 생성해주시고 PlayerManager라는 스크립트를 넣어주세요. 그리고 Rotation 좌표에 x값을 40으로 해서 플레이어를 돌려주세요. 그리고 씬 메뉴 위에 있는 메뉴에서 Local을 눌러 플레이어가 어디 방향을 보고 있는지 확인해주세요. ▣ 그리고 이번에는 Global로 좌표 기준을 바꿔보세요. 그럼 아까와 다르게 바라보는 방향에 대한 기준 좌표가 바뀐 걸 확인할 수 있습니다. 이번에는 스크립트로 이동해서 직접 글로벌과 로컬을 비교해보겠습니다. ▣ transform.Translate(move * Time.deltaTime, Space.Self)로 입력을 해주세요. Spa.. 2022. 3. 21.
유니티 - [AddForce와 Velocity 차이] ▣ 안녕하세요. 이번장에서는 AddForce와 Velocity 차이에 대해 공부해보겠습니다. ▣ 우선 3D 프로젝트를 생성해주시고, Plane와 원모 양에 Player를 생성해주세요. 그리고 Player에 Rigidbody를 넣어주시고 Player라는 스크립트도 생성해서 넣어주세요. ▣ 이제 스크립트를 작성해보겠습니다. 먼저 플레이어 속도 변수를 만들어주시고, Rigidbody를 사용할 변수도 만들어 Start() 함수에서 GetComponent로 대입해주세요. 그런 다음에 X, Z변수에 GetAxis값으로 입력 값을 대입해주시고 AddForce() 함수를 이용하여 힘을 줘서 Player를 움직이는 코드를 작성하겠습니다. 3D에서는 앞뒤에 값은 Z이기 때문에 (x, y, z) 순으로 값을 대입했습니다. .. 2022. 3. 16.
유니티 - [collider2D, composite, Box Collider 2D ▣ 안녕하세요. 이번장에서는 composite를 활용하여 콜라이더를 합쳐서 사용하는 방법을 공부해보겠습니다. ▣ 우선 2D오브젝트로 Square를 두 개 생성해주세요. 그리고 각각 Box Collider 2D를 넣어주세요. ▣ 그런다음에 빈 오브젝트를 생성합니다. 오브젝트에 위치는 0,0,0으로 해주시고, 오브젝트에 Composite Collider 2D를 넣어주세요. ▣ 그런다음에 빈 오브젝트에 Square를 끌어서 자식으로 넣어줍니다. ▣ 그리고 Square 오브젝트에 Box collider2D에 있는 Used By Composite를 체크해주세요. ▣ 그리고 빈오브젝트에서 Composite Collider 2D에 Edge Radius를 조정해보면 이렇게 빈오브젝트를 기준으로 콜라이더가 합쳐져서 영역.. 2022. 3. 4.
유니티 - [마우스 위치로 발사, ScreenToWorldPoint, 프리펩] ▣ 안녕하세요. 이번장에서는 마우스 위치로 총알을 발사하는 코드를 공부해보겠습니다. ▣ 우선 플레이어 오브젝트를 생성해주시고 플레이어 오브젝트 안에 스크립트를 생성해주세요. ▣ 그런 다음에 Pos라는 빈 오브젝트를 자식으로 생성해서 넣어줍니다. 위치는 총알이 생성되고 나갈 위치로 지정해주세요. 플레이어 자식으로 넣기 전에 꼭 포지션을 초기화해서 넣어주시는 거 잊지 마세요. ▣ 이제 총알을 만들어주겠습니다. 저는 기본 도형으로 만들었습니다. 여기에 Rigidbody 2D를 넣어주시고 에셋에 넣어서 프리 펩으로 생성한 다음에 삭제해주세요. ▣ 이제 플레이어에 있는 스크립트로 들어가서 코드를 작성하겠습니다. 총알 생성 위치, 프리 펩 총알에 대한 오브젝트, 날아갈 총알 속도에 대한 변수를 작성해주세요. Vec.. 2022. 3. 3.
C++ [방향키입력, 커서이동] ▣ 안녕하세요. 이번장에서는 방향키를 눌러 문자를 이동시키는 코드를 공부해보도록 하겠습니다. ▣ 우선 방향키를 입력받는 코드를 작성해보겠습니다. #incldue 를 선언해주세요. 이건 _getch()를 사용하기 위함입니다. scanf()와 다르게 입력 버퍼에 저장하지 않고 바로 아스키코드로 반환해주는 함수입니다. 그리고 엔터를 누를 때까지 기다리지 않습니다. 이렇게 코드를 작성하고 방향키를 누르게 되면 224 72, 224 80, 224 77, 224 75 이렇게 두 가지 숫자들이 출력되는 걸 확인할 수 있습니다. 방향키는 복합키워드를 가지고 있기 때문에 두 가지 숫자를 조합해서 반환합니다. 그럼 여기서 우리가 알 수 있는건, 방향키를 입력했을때에는 공통적으로 224를 준다라는 사실입니다. ▣ 그럼 이걸.. 2022. 2. 22.
C언어 - [#pragma] ▣ 안녕하세요. 이번장에서는 #pragma를 공부해보겠습니다. #pragma는 컴파일러 기능을 지정하는 비표준 전처리기입니다. #define과 비슷하지만 다른 기능들이 있으니 하나하나 코드를 작성해보겠습니다. ▣ 비주얼스튜디오를 기준으로 scanf() 함수를 작성하고 디버그를 하면 이렇게 경고가 나오는 걸 확인할 수 있습니다. ▣ scanf_s() 함수를 사용해서 경고를 해결할 수 있지만, 이렇게 #define _CRT_SECURE_NO_WARNINGS 를 맨 위에 작성하고 디버그를 하면 경고 없이 scanf() 함수를 사용할 수 있습니다. ▣ 그리고 #pragma warning(disable : 4996) 이렇게 하면 컴파일에서 4996 오류를 무시하고 진행하게 됩니다. ▣ 또 #pragma once를.. 2022. 2. 15.
C++ [NULL, 0, nullptr, 초기화, 함수오버로딩] ▣ 안녕하세요. 이번장에서 데이터를 초기화하는 NULL, 0, nullptr에 차이를 공부해 보겠습니다. ▣ 우선 똑같은 이름에 두 개에 함수를 선언하겠습니다. 그리고 한개는 int num 정수에 값을 받는 매개변수로 한 개는 int *num 주소를 입력받는 포인터로 각각 선언을 합니다. 그런 다음 메인 함수에서 testFunce() 함수를 호출합니다. 첫번째 testFunce(0) 정수 값을 0으로 매개변수에 값을 전달해줍니다. 그럼 함수 오버 로딩을 하면 두 함수 중에 정수에 매개변수를 가지고 있는 함수를 호출하고 값을 전달하는걸 확인할 수 있습니다. ▣ 이번에는 매개변수에 NULL을 전달해줍니다. 디버그를 해보면 아까와 동일하게 정수형 매개변수를 가지고 있는 함수를 호출하는 걸 확인할 수 있습니다... 2022. 2. 4.
C언어 - [헤더파일] ▣ 안녕하세요. 이번장에서는 헤더 파일이 무언인지 알아보겠습니다. ▣ 먼저 test.c로 소스파일을 추가해서 코드를 작성해보겠습니다. 반환형은 int형으로 매개변수는 두개, 리턴 값으로 두 매개변수의 값을 반환하는 코드입니다. ▣ 그리고 h헤더파일을 추가하여 int sum(int num1, int num2); 함수에 존재를 선언하는 코드를 작성합니다. ▣ 그리고 #include "testh.h"를 선언합니다. 그러면 아까 test에서 정의해서 만들었던 함수를 사용할 수 있습니다. sum() 함수를 사용하여 매개변수 값을 전달하면 값을 받아와서 출력하면 더한 값이 출력되는걸 확인할 수 있습니다. ▣ 이렇게 헤더파일은 메뉴판, 선언문 정도 생각하시면 됩니다. 코드를 작성하여 다른 소스코드에 h를 사용하고 접.. 2022. 1. 26.
C++ [ctype, is키워드, 종류 판단함수] ▣ 안녕하세요. 이번장에서 ctype.h에 있는 문자의 종류를 판단하는 함수를 공부해보겠습니다. ▣ 우선 #include 헤더를 추가합니다. 헤더 이름 앞부분에 c를 붙이면 c언어에서 사용한 헤더라고 생각하시면 됩니다. cin.get(str) 함수를 사용하여 문자를 입력받습니다. 그리고 밑에 cin.get() 쓰는 이유는 버퍼에 남아 있는 \n 엔터를 지우기 위함입니다. 저게 없으면 계속 입력을 받을때 엔터가 버퍼에 남아있어 두 번 입력을 받는 게 됩니다. ▣ if문 조건문 안에 isalnum, isalpha, isblank함수를 넣어 10진수라면, 알파벳이라면, 스페이스나 탭이라면 반환형을 1 또는 0으로 주기 때문에 이렇게 결과가 나옵니다. 꼭 직접 확인해보세요. ▣ 그리고 islower, isupp.. 2021. 12. 1.
C++ [논리연산자, and, or, not] ▣ 이번장에서는 논리 연산자를 간단하게 공부해보도록 하겠습니다. C언어에서는 논리연산자를 &&, ||,! 기호로 사용했습니다. 하지만 이건 큰 문제가 될 수 있습니다. 왜냐하면 세계 모든 키보드자판에 형식이 같지 않기 때문에, &, |, ! 을 지원하지 않는 키보드가 있을 수 있습니다. 그렇기 때문에 C++에서는 &&, ||,! 논리 연산자를 다르게 사용합니다. ▣ && 연산자는 and로 || 연산자는 or로 ! 연산자는 not으로 합니다. ▣ 이렇게 and or 모두 값을 확인해보세요. 이제 입력을 받아서 조건문에 논리연산자를 모두 사용해서 만들어보세요. 2021. 11. 24.
C++ [형변환, 상수, 매크로, casting] ▣ 안녕하세요. 이번장에서는 형 변환(casting) 그리고 상수에 대해 공부해보도록 하겠습니다. ▣ char 형으로 x 라는 변수를 'A' 문자 값을 넣고 정의합니다. 그리고 cout 으로 x를 출력했을 경우 (int) x, int(x)를 출력한 걸 확인해보겠습니다. 그럼 x는 문자 그대로 A가 출력되고 casting 한 두 변수는 65 아스키코드 숫자 값이 나오는 걸 확인할 수 있습니다. C언어에서와 동일하게 강제형변환을 하려면 (int)를 사용하여 진행했지만 C++에서는 int() 조금더 직관적으로 코드를 작성할 수 있습니다. ▣ 이렇게 float형식을 int() 형으로 강제 형변환(casting)하여 출력하면 바뀌는 걸 확인할 수 있습니다. ▣ 이번에는 매크로와 상수를 만드는 방법을 간단하게 해보.. 2021. 10. 22.
C++ [bool, 데이터자료형] ▣ 안녕하세요. 이번장에서는 C++에서의 bool 자료형에 대해 공부해보도록 하겠습니다. ▣ bool 자료형은 변수의 자료형들 중에 하나입니다. int 형은 정수형, float 형은 실수형 이런 식으로 자료형이 있듯이 bool 형은 true(1), false(0)를 저장하는 형식에 자료형이라고 생각하시면 됩니다. ▣ 변수를 선언할 때 bool 자료형으로 지정을 하고 값을 true, false로 각각 대입을 하고 출력을 해보겠습니다. 그러면 1과 0이 출력되는 걸 확인할 수 있습니다. ▣ 그럼 1과 0이 아닌 true와 false 값을 출력하는 코드를 진행해보겠습니다. 그러기 위해서는 cout으로 boolalpha로 코드를 작성한 후에 bool 값이 있는 변수를 출력합니다. 그러면 true, false값으.. 2021. 10. 21.
C++ [cmath, algorithm, 수학함수] ▣ 안녕하세요. 이번장에서 수학를 계산하는 함수를 간단하게 공부해보겠습니다. ▣ 수학함수를 사용하기 위해선 c언어에서 다르게 를 사용합니다. c언어 헤더와 c++ 헤더를 구분하기 위함도 있지만 cmath 가 더 기능이 있습니다. 그리고 숫자를 입력받을 변수와 제곱근을 계산해서 반환한 값을 저장할 변수를 선언하고, sqrt()함수를 입력합니다. 그럼 이렇게 double 형으로 반환되고 매개변수값을 (double)형식으로 넣으라는 표시가 나옵니다. ▣ 함수에 양식대로 넣어서 출력을 해보면 81을 입력하면 81에 제곱근이 9라는걸 확인할 수 있습니다. ▣ 헤더를 추가하여 min(), max()함수를 사용해보겠습니다. 함수에 이름처럼 최소값 최대값을 구해주는 함수이고 ceil(), floor() 올림, 내림을 .. 2021. 10. 20.
C++ [파일입출력] ▣ 이번장에서는 C++에 파일 입출력을 진행해보도록 하겠습니다. ▣ 먼저 파일입출력을 사용하기 위해서 #include 헤더를 추가해야 합니다. 그리고 ofstream, ifstream를 사용하여 파일을 열어야합니다. ofstream는 쓰기 모드 ifstream은 읽기 모드로 각각 파일을 열어주세요 그리고 디버그를 해보고 프로젝트 파일 안을 확인하면 ▣ 이렇게 ofstream 파일을 열었던 파일이 생성된 걸 확인할 수 있습니다. 그럼 이번에는 ofstream으로 만든 텍스트 파일에 글을 작성해보겠습니다. ▣ ofstream 클래스로 파일을 쓰기 모드를 열고 outfile 2021. 10. 15.
C언어 - [동시실행, 스레드, 쓰레드, Thread] ▣ 안녕하세요. 이번장에서는 스레드를 공부해보도록 하겠습니다. 우선 스레드(쓰레드)가 무엇인지 이야기해 보록 하겠습니다. 스레드는 프로세서 내에서 실행되는 흐름, 단위, 갈래를 이야기합니다. ▣ 그럼 여기서 또 다른 질문이 생깁니다. 프로세서가 무엇일까요? 우리가 디버그로 컴파일 과정을 진행하면 링커를 통해서 exe로 프로그램을 만듭니다. 프로세서는 이런 프로그램을 실행되서 돌아가는 상태 컴퓨터가 일하고 처리하는 상태를 이야기합니다. ▣ 그럼 스레드는 무엇일까요? 프로세서는 하나의 일만 처리할 수 있습니다. 그래서 여러개의 스레드로 여러 개에 일을 처리하게 합니다. 이걸 멀티스레드라고 합니다. ▣ 윈도우에서 CTRL + ALT + Delete 키를 누르면 이렇게 프로세서에 여러개의 프로그램을 돌리고 있는.. 2021. 9. 15.
유니티 - [텍스트를 오브젝트로 제작, UI Text 오브젝트로 Text Mesh] ▣ 안녕하세요. 이번장에서는 Ui Text를 오브젝트 형식으로 제작하는 걸 해보겠습니다. ▣ 3D프로젝트를 생성해주시고, 플레이어와 큐브를 이용하여 트리들을 배치해주세요. 색도 자유롭게 넣어주세요. ▣ 먼저 기본 UI Text를 넣어보겠습니다. ▣ 이렇게 Text에 test라는 글을 입력하고 크기를 수정해주세요. 그리고 플레이를 해보겠습니다. ▣ 그럼 캔버스 우리 시점에 따라 UI Text가 보이는 걸 확인할 수 있습니다. 하지만 우리가 하고 싶은건 각각 오브젝트별로 Text를 그리고 싶습니다. 그럴 때 Text Mesh를 사용하면 됩니다. ▣ 우선 오른쪽 마우스를 눌러서 빈 오브젝트를 생성합니다. ▣ 빈오브젝트에 위치를 초기화해주시고, 컴포넌트를 추가하겠습니다. Text Mesh를 추가해주세요. ▣ 그.. 2021. 9. 5.
C언어 - [소리재생, Beer, _getch] ▣ 안녕하세요. 이번장에서는 windows.h를 이용하여 음파 소리를 재생하는 코드를 진행하겠습니다. ▣ 먼저 #include로 헤더들을 포함시키도록 하겠습니다. 는 콘솔에 관련된 헤더를 가져옵니다. while문안에 _getch()함수로 입력을 받습니다. 이건 버퍼를 거치치않고 바로 키값을 반환해주는 함수입니다. 키를 누르면 바로 소리가 나오게 코드를 작성하기 위함입니다. ▣ 를 추가해주세요. 그럼 Beep()함수를 사용할 수 있습니다. Beep(음파:주파수, 소리 지속시간-밀리초) 매개변수로 호출이 가능합니다. 그리고 switch()에서 case 'a': 키를 눌렀을 때 Beep(260, 500);이라고 하면 260 도의 음파를 의미하며 500으로 0.5초를 지속하게 합니다. ▣ 이렇게 a부터 k까지 .. 2021. 8. 31.
C++ [템플릿_01, template, typename] ▣ 안녕하세요. 이번장에서 템플릿을 공부해보도록 하겠습니다. 우선 필요성에 대해서 생각해보겠습니다. ▣ 우리가 함수 오버 로딩을 공부했습니다. 함수 이름을 동일하게 사용하는 걸 이야기하는데, 이는 자료형이나 매개변수에 수가 다르면 사용할 수 있습니다. sum라는 함수에 하나는 int형으로 하나는 double형으로 반환형을 지정했습니다. ▣ 그리고 main() 함수에서 sum(10, 20), sum(1.4, 4.5)를 각각 출력해보면 매개변수에 값에 자료형에 따라 함수 오버 로딩으로 값이 출력되는 걸 확인할 수 있습니다. 하지만 함수이름이 같기 때문에 반환형에 자료형과 매개변수에 자료형이 어떻게 지정되어 있는지 우리는 알기가 어렵습니다. 직접 코드를 보는 방법도 있지만, 그렇지 못할 경우 반환형이 정수형인.. 2021. 8. 19.
유니티 - [FPS게임, 카메라마우스회전, 캐릭터컨트롤] ▣ 안녕하세요. 이번장에서는 간단하게 FPS 게임에서 플레이어를 움직이고 카메라로 마우스를 움직이게 하는 코드를 만들어보겠습니다. ▣ 먼저 3D 프로젝트를 생성해주시고, 3D 오브젝트로 플레이어와 큐브를 배치해주세요. ▣ 그런 다음에 플레이어 오브젝트에 콜라이더를 삭제해주시고 Character Controller를 추가해주세요. ▣ 그리고 플레이어 오브젝트를 따라서 카메라가 같이 움직여야 하기 때문에 메인 카메라를 플레이어 오브젝트에 넣어주세요. ▣ 그런 다음에 메인 카메라에 위치를 플레이어 오브젝트 머리에 옮겨서 FPS처럼 보이게 위치를 변경합니다. ▣ 그런 다음에 플레이어오브젝트에 PlayerManager스크립트를 추가해주시고, 스크립트를 실행해주세요. 그런 다음에 먼저 플레이어컨트롤러를 컴포넌트로 .. 2021. 8. 8.
C++ [매크로, inline, #define] ▣ 안녕하세요. 이번장에서는 C++에서 매크로와 인라인을 공부해보겠습니다. 매크로는 우리는 C언어에서 #define으로 정의를 하는 부분과 동일합니다. #define PI 3.1412 이렇게 main함수 밖에서 #include와 함께 적었던 코드 기억하시죠. 그럼 PI라는 상수 기호가 3.1412 값으로 정의가 되는 걸 했던 기억을 있을 겁니다. #은 전처리기고 컴파일하기전에 처리해주는 걸 의미합니다. 그렇기 때문에 int PI = 3.1412 이렇게 선언 및 정의를 해준 것보다 과정에서도 컴파일 전에 하기 때문에 적겠죠? 이 부분을 기억하시고 이제 매크로를 활용하여 함수를 정의해보겠습니다. ▣ 매크로 함수를 정의하려면 함수를 정의하는 것과 거의 동일합니다. 함수 이름 앞에 #define을 붙어주시고 S.. 2021. 7. 30.
유니티 - [RayCast, RayCastAll, 레이캐스트] ▣ 안녕하세요 이번장에서는 RayCast를 공부해보겠습니다. 레이 캐스트는 쉽게 이야기해서 오브젝트에서 레이저를 쏴서 그 레이저에 달인 오브젝트를 감지하기 위한 기능입니다. 보통 FPS 게임에서나 VR에서 많이 사용됩니다. ▣ 먼저 간단하게 3D프로젝트를 생성해주시고, 3D 오브젝트에서 캡슐로 Player 만들어주세요. Player안에 PlayerManager라는 스크립트도 작성해주세요. ▣ 그리고 레이 캐스트로 닿을 대상 3D 오브젝트에서 큐브를 생성해주세요. 위치에 Z값은 10으로 해주세요. 그리고 콜라이더도 꼭 추가해주세요. 충돌을 측정하기 위함입니다. 이제 PlayerManager스크립트를 들어가서 코드를 작성해보겠습니다. ▣ Update() 함수에서 Physics. 를 접근해서 Raycast라고.. 2021. 7. 26.
python - [랜덤, Random] ▣ 안녕하세요. 이번장에서는 파이썬에 random모듈을 사용해서 랜덤을 구현해보겠습니다. ▣ random() 함수는 0~1까지 사이에 숫자를 랜덤으로 주는 함수입니다. ▣ randrange() 함수는 (시작, 범위)까지에 숫자를 랜덤으로 주는 함수입니다. randrange(0, 10)이라고 하면 0~9까지 입니다. 그렇기 때문에 제가 범위라고 이름을 정했습니다. 범위는 내가 정한 숫자에 10 - 1을 한다고 생각하시면 됩니다. ▣ randint()도 randrange() 과 비슷합니다. 변수를 정의하고 randint(num1, num2) 라고 정의하면 됩니다. 동일하게 (시작, 범위)인데 여기서는 num1 = 0, num2 = 11 이면 0~11 모두 포함해서 랜덤으로 골라주고 값을 주게 됩니다. ▣ s.. 2021. 7. 25.
유니티 - [컴포넌트 추가, 삭제, 비활성화] ▣ 안녕하세요. 이번장에서는 컴포넌트를 추가, 삭제, 비활성화를 해보도록 하겠습니다. ▣ 3D로 프로젝트를 생성해주시고, 3D에서 캡슐로 하나하나 만들어주세요. 여기에 Capsule Collider와 PlayerManager스크립트를 추가해주세요. 그리고 스크립트를 들어가보겠습니다. ▣ 먼저 컴포넌트를 추가하려면 에디터에서도 가능하지만 스크립트에서 간단하게 코드로도 가능합니다. Addcomponent (); 코드로 리지드 바디 컴포넌트를 추가했습니다. 그리고 Rigidbody rid 변수에 GetComponent(); 값이 대입해주세요. 그리고 rid.AddForce로 리지드바디를 활용하여 Player캐릭터에 Y축에 힘을 주겠습니다. 저장을 하고 ▣ 시작을 하면 Player오브젝트에 Rigidbody 컴.. 2021. 7. 24.
C++ [레퍼런스변수, 포인터, 주소, 참조] ▣ 안녕하세요 이번장에서는 포인터를 꼭 공부하고 진행해주세요. 메모리 주소에 대한 개념이 없으면 어렵습니다. ▣ 첫번째는 포인터를 이용해서 변수에 값을 바꿔보도록 하겠습니다. int num = 10; 변수를 정의하고 int *으로 int에 주소를 저장하는 pNum를 주소를 선언해줍니다. 그리고 &num에 주소를 대입해서 넣어주세요 그리고 값과 주소를 출력하는 코드를 넣고 *pNum 포인터로 간접으로 접근해서 20으로 대입을 해주고 출력을 하면 주소가 동일한걸 확인할 수 있고, 값이 바뀐 것도 확인할 수 있습니다. ▣ 이부분을 C++에서는 더 직관적으로 사용하게 만든 게 레퍼런스 변수, 참조 변수입니다. ▣ 이번에는 C++에 레퍼런스변수로 주소를 저장해서 값을 바꿔보겠습니다. 쉽게 정의를 해보겠습니다. 포.. 2021. 7. 23.