목록전체 글 (142)
오보에블로그
멀티 스레드란? 멀티 스레드란, 하나의 프로세스 안의 여러개의 스레드를 병렬적으로 실행시키는 것을 의미한다. 멀티 프로세스와 다르게 프로세스 안의 자원을 공유할 수 있어서, 컨텍스트 스위치 비용이 적다는 장점이 있다. 하지만, 여러 스레드에서 동시 자원을 사용할 때 문제가 발생할 수 있다. 아래의 코드 예시를 확인해보자. #include #include #include #include using namespace std; int counter = 0; void func() { for (int i = 0; i < 100000; i++) counter += 1; } int main() { vector ts; // counter에 1씩 100000번 더하는 스레드 5개 생성 for (int i = 0; i <..
C++ this_thread 현재 스레드에 접근할 수 있는 함수 라이브러리 get_id 현재 스레드의 아이디 반환 /* output : main thread ID : 37832 t1 thread ID : 18204 func called! thread ID : 18204 */ #include #include using namespace std; void func() { cout
스레드 란? 프로세스를 실행시키는 단위, 하나의 프로세스는 여러개의 스레드(멀티 스레드)로 이루어 질 수 있으며, 동일 프로세스 내에서는 메모리 자원을 공유할 수 있다. C++ thread 참고 : C++레퍼런스 C++11 에서 부터 thread 헤더를 통해 스레드 관련 라이브러리를 사용할 수 있다. std::thread 는 싱글 스레드를 실행하는 클래스이다. 해당 클래스를 사용하면, 별도의 싱글 스레드에서 지정한 함수가 호출된다. /* output : 28580 thread execute! */ #include #include using namespace std; void func() { cout
1. World 안에서 변경 두가지 방법이 존재한다! 원하는 메쉬를 World 로 가져온다음에 가져온 메쉬를 클릭하고 위치 이동 모드로 변경(W키) 시킨 다음, alt키를 누른 상태에서 마우스 휠 버튼으로 드래그 한다. 그 후에 이 상태를 고정시키고 싶다면, 우클릭 > Pivot > Set as Pivot Offset 을 클릭한다. 2. 메쉬 파일 자체적으로 변경 1 번 방법은 World 내의 액터 상에서만 변경이 되고, 실제 메쉬 파일에서는 적용이 안되므로, 본인은 2번 방법을 사용했다. 메쉬 에딧 모드에 들어가서( 메쉬 더블 클릭) Import Setting > Transform> Import Translation 을 변경한다. 제대로 변경되었는지 확인하려면, Reimport Base Mesh를 클릭..
상황 마인크래프트에서 땅과같은 지형물을 획득했을 때 이를 손에 들고 있게 만들고 싶다. 큐브를 손에 장착할려면 skeletal mesh 여야하는데, 언리얼에서 기본으로 제공하는 1M_Cube 메쉬는 static mesh여서 변환이 필요하다. 해결 방법 참고 사이트 에서 첫부분만 읽으면 언리얼 상으로는 안된다는 것 같지만,,! 계속 쭉 읽다보면 가능하다고 써져있다. Try this: Right click your static mesh → Asset Actions → Export → save .fbx. Then, click import → select .fbx. On fbx import options, toggle “skeletal mesh”, and set “skeleton” to None. Please ..
상황 언리얼은 맨처음에 프로젝트를 생성할 때, 블루프린트 전용으로 사용할지, C++ 클래스 로 사용할지 선택하고 진행한다. C++ 용으로 프로젝트를 생성하면 아래와 같이 C++ Classes 라는 폴더가 생성되고, 여기에 C++ 클래스를 추가할 수가 있는데, 블루 프린트 전용으로 선택하고 진행하면 해당 폴더가 없고, 컨텐츠 폴더 아래에 C+ 클래스를 만들려고 하면 오류가 발생한다. 마켓 플레이스에서 가져온 라이브러리 중에 "Create Project" 로만 라이브러리를 프로젝트에 넣을 수 있는 유형이 있는데, 이때 해당 라이브러리가 블루프린트 전용이라면, C++ 프로젝트로 변환해줘야하는 상황이 발생한다. 해결 방법 참고 사이트 : https://allarsblog.com/2015/11/05/convert..
유니티 허브에 접속해서, WebGL을 사용할 유니티 버전에대해 톱니바퀴 버튼을 클릭한 뒤 [모듈 추가] 버튼을 누른다. [WebGL Build Support] 모듈을 클릭 후 설치한다. 유니티 프로젝트에 접속해서 [Package Manager] > Packages 를 Unity Registry 로 변경한다. WebGL Publisher 를 검색후 설치한다. 설치가 완료되면 아래와 같이 Publish 버튼이 생성된다. Publish 버튼을 클릭하면 아래와 같은 UI 가 표시되며, Build and Publish 를 진행한다. 이제 창이 하나 생성되고, 해당 링크로 게임을 실행할 수 있다. (https://play.unity.com/mg/other/webgl-builds-149838)
상황 어떤 오픈소스 레포지토리를 fork 했다. 이후에 해당 오픈소스 레포지토리가 다른 변경 사항이 생겼고, fork 한 나의 레포지토리에도 해당 내용을 pull 받고 싶다. 해결 방법 기본적으로 나의 레포지터리는 origin 으로, fork 한 오픈소스 레포지터리가 원격 저장소로 upstream 으로 지정이 되어 있을 것이다. 아래의 명령어로 확인이 가능하다. git remote -v 만약에 지정이 안되어있다면, 직접 지정을 해주도록하자. git remote add upstream [username]/[repositoryname].git 그후에 지정한 upstream 으로 pull 받아준다. git fetch upstream [fetch받을 branch명] # fetch git pull upstream..
상황 게임에서 AI 나 시범을 보여주는 기능을 만들려고할때 버튼을 누르는 이벤트 발생시 버튼이 눌리는 효과도 같이 나왔으면 좋겠다. 구현 방식 Button 컴포넌트의 사용 방식이 tint color 일때를 기준으로 설명한다. 현재 보이는 이미지의 색상은 기본 이미지색상과 현재 버튼의 상태에 따른 색상의 곱으로 현재 이미지의 색상을 표현된다. 아래의 첨부 이미지를 보면, 버튼 배치시에Color 과 Normal Color 모두 흰색이기 때문에 버튼을 누르지 않은 기본 상태에서는 첨부한 기본 이미지 색상의 모습으로 버튼이 보인다. 따라서, 버튼이 눌리는 이벤트를 스크립트내에서 직접 호출할 때는 기본 이미지색상과 현재 버튼의 상태에 따른 색상의 곱으로 현재 이미지의 색상을 직접 표현한다. 코드 해당 코드는 Up..
Range 라이브러리 기존의 열거형 자료구조에 범위 관련 알고리즘을 추가한 라이브러리. (C# LINQ 와 비슷) range : 순회 할 수 있는 아이템 집합를 일컫는다. (ex STL Container) begin() , end() 가 가능해야함. iterator의 상위 호환 느낌인가 view : 아래에서 좀더 자세히 기술 range adoptor : | : range adoptor 오브젝트를 연결(파이프) View 독스도 찾아보고, 블로그도 찾아보았지만, 의미가 잘 와닿지 않아 좀더 찾아보았다. 참고 a view is a range that is semiregular and has constant time copy/move/assignment 뷰는 range의 is-a 관계라고 생각하면 된다. 집합의..