2020 이전 81

HPBar의 난

문제: HPBar가 지워지지않는다.원인: 쿠키가 오브젝트로 생성한 HPBar가 쿠키가 죽고나서 제때 지워지지 않는다. world UI레이어에 계속 (참조)남아있다 프로토타입을 지우는 과정에서 쿠키 클래스의 소멸자를 호출하는 과정에서 nullptr인 m_pHPBar의 Die()를 호출하고 있다.생성된 쿠키클래스에게는 m_pHPBar가 있지만 프로토타입에게는 없기 때문이다. 그렇다면 m_pHPBar가 유효할 때만 Die()를 호출하도록 하자. nullptr인 m_HPBar을 참조해제 하고싶은데 nullptr를 참조해제하다니 돌아오는것은 싸늘한 memory leak뿐 편ㅡ안ㅡ

2018.12.25 유니티 쉐이더 스타트업 공부

파트8 버텍스 컬러를 이용한 텍스쳐 블렌딩, 스펙큘라 효과 적용 void surf(Input IN, inout SurfaceOutputStandard o){ ... o.Albedo = lerp(c.rgb, d.rgb, IN.color.r); o.Albedo = lerp(o.Albedo.rgb,e.rgb, IN.color.g); o.Albedo = lerp(o.Albedo.rgb,f.rgb, IN.color.b); } 물체는 전부다 반짝거리는 정반사(Specular)를 가지고 있다. 서피스 쉐이더에서는 o.Smoothness로 조절한다(1에 가까울수록 정반사이며 반짝거림 0은 난반사 Diffuse). 버텍스 컬러영역을 이용하여 특정부분만 반짝거리도록 이용할 수 있다. 파트11 Lambert lighting..

2020 이전/Unity 2018.12.25

유니티 로직함수

함수명 함수 특징 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대비 용량이 적다.객체({ })와 배열([ ])의 적절한 만남으로 효율적인 데이..