전체 글 89

유니티 로직함수

함수명 함수 특징 Awake - 스크립트가 실행될 때, 한 번만 호출되는 함수다. - 게임의 상태 값, 변수의 초기화에 사용한다. - Start함수가 호출되기 전에 맨 먼저 호출된다. - 스크립트가 비활성화 되어있어도 실행된다. - 코루틴으로 실행 불가. Start - Update함수가 호출되기 전에 한 번만 호출된다. - 스크립트가 활성화되어 있어야 실행된다. - 다른 스크립트의 모든 Awake가 모두 다 실행된 이후에 실행된다. - 코루틴으로 실행 가능. Update - 프레임마다 호출되는 함수로, 주로 게임의 핵심 로직을 작성한다. - 스크립트가 활성화되어 있어야 실행된다. LateUpdate - 모든 Update함수가 호출되고 나서 한 번씩 호출된다. - Update함수에서 전처리가 끝난 후 실행..

2020 이전/Unity 2018.12.19

C++ auto

unordered_map mMap;unordered_map::iterator iter = mMap.begin(); unordered_map::iterator iterEnd = mMap.end(); unordered_map mMap;auto iter = mMap.begin(); auto iterEnd = mMap.end(); 와 너무너무 편해요~~ MSDN : https://docs.microsoft.com/ko-kr/cpp/cpp/auto-cpp?view=vs-2017 Q: https://stackoverflow.com/questions/19618759/c-11-auto-compile-time-or-runtime auto의 타입 결정은 compile time 때 이루어진다. 런타임 때에는 성능에 영향을 ..

2020 이전/C++ 2018.11.28

리트코드 문제 3

test case 운빨이고 사실 한 16%정도 시간복잡도 O(n^2) 풀이 class Solution { public: int lengthOfLongestSubstring(string s) { int arrChar[256]; initArr(arrChar); int longestSub = 0; int acc =0; string::iterator it = s.begin(); string::iterator eit = s.end(); string::iterator iter; for (;it!=eit; it++){ for(iter=it;iter!=eit;iter++){ int idx = *iter; if(arrChar[idx]= longestSub) longestSub = acc; break; } } if(ite..

이펙티브 C++ Chapter 5 구현

요약 26. 변수를 너무 앞서서 정의하면 수행성능이 갑자기 떨어진다. 쓰지도 않을 클래스를 불렀을 때, 27. 캐스팅 남용하면 느리고, 손보기도 힘들다. 미묘한 버그에 치명타가 발생할 수 있다.28. 객체 내부 private 멤버의 참조자를 반환하는 public 함수는 캡슐화가 깨고 유효하지 않는 핸들(dangling handle)이 남용할 수 있게 한다.29. 예외발생시 적합한 처리를 하지 않으면, 자원이 누출되고 자료구조가 망가진다.30. 인라인 남용은 비대한 코드를 불러온다.31. 코드의 결합도가 높으면 빌드시간이 길어진다. 26. 변수정의는 늦출 수 있는 곳까지 늦춘다.생성자/소멸자를 호출하는 type(class)로 변수를 정의할때 문제점은 (1) 프로그램 제어 흐름이 변수 정의에 닿을때의 생성자..

2020 이전/C++ 2018.11.12

드로우 콜과 텍스처 아틀라스와 배치와 인스턴싱

1. 드로우 콜draw call: CPU가 OpenGL이나 DirectX의 함수를 호출하여 GPU에게 그리기(draw call)을 요청하는 것. 그래픽 API의 모든 드로우콜은 CPU상의 상당한 퍼포먼스 오버헤드를 일으킨다. draw call을 줄이기 위해 게임 엔진은 batch기술을 제공한다. batch object를 만들고, 그 객체의 자식으로 이미지 스프라이트 컴포넌트를 가진 오브젝트를 생성하면 batch object를 생성하는것이기 때문에 드로우 콜은 1번만 호출된다. 드로우콜 발생조건 위 그림 기준으로 1. 메쉬가 여러개인 경우(3번)2. 마테리얼이 여러개(마테리얼만 2번: 얼굴마테리얼, 눈 마테리얼)3. Shader에 의한 경우(2-pass, 외곽선 그릴때 검은색 단색으로 한번 그리고, 나중에..

xml & json

John Doe Anna Smith Peter Jones 장점: 작성하기 편하다(tag), 사람이 읽기 쉽고 DTD 등 XML의 기능을 확장할 여지가 있다.단점: tag때문에 배열형식이나 반복구조일 경우 불필요한 데이터가 계속 나타나서 길이가 길다. 텍스트의 길이가 길어서 파싱이 힘들어지고 속도가 느려진다. {"employees":[ { "firstName":"John", "lastName":"Doe" }, { "firstName":"Anna", "lastName":"Smith" }, { "firstName":"Peter", "lastName":"Jones" } ]} 장점: 내용이 함축적으로 최소한의 정보를 가지고있다. XML대비 용량이 적다.객체({ })와 배열([ ])의 적절한 만남으로 효율적인 데이..

Coroutine

코루틴은 비선점형 멀티태스킹을 위해 서브루틴을 일반화한 프로그램 요소입니다. 보통의 함수가 return 되는것에 비해 코루틴은 suspend로 잠시 자신의 작업을 홀드하고 다시 작업이 재개할 수 있으며 이를 위해 다수의 진입 포인트를 허용합니다. 멀티스레드 vs 코루틴:코루틴은 쓰레드가 아니므로 비동기가 아닙니다(동시에 실행되지 않는다). 코루틴은 공유 메모리영역, 공유 자원을 읽거나 변경시키지 않습니다. 유니티에서의 코루틴: 닷넷은 멀티쓰레드를 지원하지만 유니티는 단일 쓰레드로 동작한다. 멀티 스레드를 사용할 경우 교착 상태 경합 등 신경써야할 부분이 많아진다. 코루틴은 스레드를 사용하지 않고 멀티 태스킹을 가능하게 한다. 유니티에서의 Update함수는 1프레임에 한번 호출되는데 매 프레임마다 yiel..

RTTI(Run-Time Type Information)

C++ 표준 라이브러리 : https://www.ibm.com/support/knowledgecenter/en/SSPSQF_9.0.0/com.ibm.xlcpp111.aix.doc/standlib/header_files.html 항상 모든 개념들은 사전적인 의미, 키워드 예시, 경험으로 설명할 수 있어야한다. RTTI는 런타임 타입 인포메이션의 약자로 프로그램 실행 중에 객체의 type이 결정될 수 있도록 하는 메커니즘이며 적어도 한개의 virtual function을 가지고있는 클래스에서만 유효합니다. RTTI에는 세 가지 C++ 언어 요소가 있습니다. dynamic_cast 연산자, typeid 연산자, type_info 클래스가 바로 그것입니다. Dynamic cast는 클래스 hierarchy에서 ..