완성된 동작 모습 완성된 스크립트 모습 유니티 시야각 만들기 그 첫번째 시간, 2D 시야각 만들기입니다. 2D는 Z축으로만 회전하기 때문에 X, Y, Z 모든 축으로 회전 할 수 있는 3D에 비해 생각해야할 것이 적어 만들기가 간단합니다. 그럼 바로 시작해보도록 하겠습니다. ────────────────────────────────── 먼저 Sight2D라는 스크립트를 만들어서 열어줍니다. 123456789101112131415161718192021public class Sight2D : MonoBehaviour { [SerializeField] private bool m_bDebugMode = false; [Header("View Config")] [Range(0f, 360f)] [SerializeFi..
C++로 만든 후위 표기식 계산기입니다. 네이버나 구글에 C++ 후위 표기식으로 검색해보면 죄다 파일만 cpp지 C 스타일로 만들어놔서 "이게 뭐야?"싶은 마음에 만들었습니다. 짧거나 긴 식들을 넣어서 계산 시켜본 결과 네이버 계산기와 결과가 똑같았기에 계산은 정확합니다. 음수와 양수 표기, 제곱도 지원합니다. 식에 문제가 있을 때의 예외 처리도 돼있습니다. 위의 모든 처리가 다 돼있다 보니 일반적으로 돌아다니는 후위 표기식 계산기보다는 코드가 조금 더 복잡합니다. 다 만들고 보니 코드가 좀 어지 로운데다 좀 더 깔끔하고 효율적으로 수정할 여지가 있는 것 같네요. 개인적으로 좀 마음에 안드네요. 시간이 나면 좀 더 다듬어서 수정본을 올려봐야겠습니다. 코드에 대한 질문이나 의견은 댓글로 남겨주세요. ───..
[The C++ Programming Language에서 발췌] 난수는 테스트, 게임, 시뮬레이션, 보안 등의 많은 상황에서 유용하다. 에서 표준 라이브러리가 제공하는 폭넓은 난수 생성기의 선택 폭은 이러한 응용 영역의 다양성을 대변하는 것이다. 난수 생성기는 두 부분으로 구성된다.[1] 난수나 의사 난수 값의 시퀸스를 생성하는 엔진[2] 이러한 값들을 일정 범위의 수학적 분포로 매피아는 분포분포 예로는 uniform_int_distribution(생성되는 모든 정수가 동일한 확률을 갖는다.), normal_distribution('종형 곡선'), exponential_distribution(지수 성장 곡선)이 있는데, 각각은 어떤 특정한 범위를 나타낸다. 다음의 예를 살펴보자. 12345678using..
[The C++ Programming Language에서 발췌] 표준 라이브러리는 시간을 다루기 위한 기능을 제공한다. 예를 들면 뭔가의 시간을 맞추는 기본적인 방법은 다음과 같다. 123456using namespace std::chorono; auto t0 = high_resolution_clock::now();do_work();auto t1 = high_resolution_clock::now();cout
[The C++ Programming Language에서 발췌] 뜻밖에도 타입이나 템플릿에 대해 별명을 도입하는 것이 유용할 때가 많다. 예를 들어 표준 헤더 에는 아마도 다음과 같은 별칭 size_t에 대한 정의가 포함돼 있을 것이다. 1using size_t = unsigned int;;cs size_t란 이름이 붙은 실제의 타입은 구현별 정의 사항이므로, 다른 구현에서는 size_t가 unsigned long일 수도 있다. 별칭 size_t를 쓰면 프로그래머가 이식 가능한 코드를 작성하는데 도움이 된다. 타입의 템플릿 인자와 관련된 타입 별칭은 많은 경우 매개변수화 타입에 의해 제공된다. 예를 들면 다음과 같다. 123456templateclass Vector {public : using value..
[The C++ Programming Language에서 발췌] 템플릿은 임의의 타입의 인자를 임의의 개수만큼 받아들이도록 정의될 수 있다. 그러한 템플릿을 가변 인자 템플릿이라고 부른다. 예를 들면 다음과 같다. 1234567void f() {}templatevoid f(T head, Tail... tail){ g(head); t(tail...);}Colored by Color Scriptercs 가변 인자 템플릿 구현이 핵심은 그것에 인자 리스트를 전달할 때 첫 번째 인자를 나머지와 분리할 수 있다는 점에 주목하는 것이다. 여기서는 첫 번째 인자(head)에 뭔가를 한 다음, 나머지 인자(tail)로 재귀적으로 f()를 호출한다. 생략 부호...은 리스트의 '나머지'를 나타내기 위해 사용됐다. 물론 ..
[The C++ Programming Language에서 발췌] constexpr은 대략 '컴파일 타임에 평가될 예정'이라는 의미다. 이것은 주로 상수를 지정하는 데 사용되며, 데이터가 읽기 전용 메모리내에 저장되도록 해주고 성능을 높여준다. 다음의 예를 살펴보자. 123456789const int dmv = 17; // dmv는 이름을 가진 상수int var = 17; // var는 상수가 아니다.constexpr double max1 = 1.4 * square(dmv); // square(17)이 상수 표현식인 경우 OKconstexpr double max2 = 1.4 * square(var); // 오류 : var는 상수 표현식이 아니다.const double max3 = 1.4 * square(v..
[The C++ Programming Language에서 발췌] C++는 표현식으로부터 타입을 추론하기 위해 두 가지의 매커니즘을 제공한다.● 초기화 식으로부터 객체의 타입을 추론하기 위한 auto로, 타입은 변수, const, constexpr의 타입이 될 수 있디.● 함수의 반환 타입이나 클래스 멤버의 타입 같이 간단한 초기화 식이 아닌 뭔가의 타입을 추론하기 위한 decltype(expr)이다.여기서 수행되는 추론은 매우 간단한다. 즉, auto와 decltype()은 컴파일러가 이미 알고 있는 표현식의 타입을 알려주기만 할 뿐이다. 1.1 auto 타입 지정자변수의 선먼문에 초기화 식이 있을 때는 타입을 명시적으로 지정할 필요가 없다. 대신 변수가 자신의 초기화 식에 해당하는 타입을 갖게 할 수 ..
[The C++ Programming Language에서 발췌] 어떤 객체의 초기화 식이 지정되면 해당 객체의 초기 값이 결정된다. 초기화 식은 4가지 문법 스타일 중 하나를 사용한다. 1234int a1 { 1 };int a2 = { 1 };int a3 = 1;int a4(1);cs 이들 중 첫 번째 항목만이 모든 상황에서 사용될 수 있으므로, 그것을 사용하기를 강력히 권장한다. 다른 후보들보다 좀 더 명확하며, 오류에 취약하지 않다. {}를 사용한 초기화, 리스트 초기화는 축소를 허용하지 않는다.● 정수는 자신의 값을 보관할 수 없는 또 다른 정수로 변환될 수 없다. 예를 들어 char에서 int로의 변환은 허용되지만, int에서 char는 허용되지 않는다.● 부동소수점 값은 자신의 값을 보관할 수 ..
[The C++ Programming Language] 1. 생성자를 이용해서 불변속성을 구축한다.2. 생성자/소멸자 쌍을 이용해서 자원 관리를 간소화한다. 3. '무방비'의 new와 delete를 삼간다. 4. 기본 제공 배열이나 임시 코드보다 컨테이너와 알고리즘을 이용한다. 5. 그때그때 개발된 코드보다는 표준 라이브러리 코드를 우선 사용한다. 6. 지역적으로 통제할 수 없는 오류를 알리기 위해서는 오류 코드보다는 예외를 사용한다. 7. 대규모 객체의 복사를 피하귀 위해 이동 의미의 구조를 사용한다. 8. unique_ptr을 이용해서 다형성 타입의 객체를 참조한다. 9. shared_ptr을 이용해서 공유 객체를 참조한다. 공유 객체란 단독의 소유자가 자신의 소멸을 담당하지 않는 객체를 말한다.