윈도우즈 10 에서 플러그인이나 젠킨스 업데이트 후 재기동이 안되는 문제가 있다. 아래 그룹 설정 활성화가 필요하다.

1. gpedit.msc 를 실행해 로컬 그룹 정책 편집기를 엽니다.

2. '로컬 컴퓨터 정책 > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 사용자 프로필 > 사용자 로그오프 시 사용자 레지스트리를 강제로 언로드하지 않음' 을 사용으로 바꿉니다.

출처 : https://issues.jenkins-ci.org/browse/JENKINS-50219

P.S. 윈도우즈 8 이후로는 그룹 정책 편집기가 기본적으로 설치되지 않을 수 있다. 아래 URL 을 참고해서 설치하자.

https://www.technipages.com/windows-install-group-policy-management-console

728x90

UCLASS(Within=PlayerController, config=Input, transient)
class ENGINE_API UPlayerInput : public UObject
{
GENERATED_BODY()


UCLASS 에 Within 이라는 키워드가 있다. 이 클래스를 생성, 보유할 수 있는 클래스를 제한하는 지정자다.

void UPlayerInput::FlushPressedKeys()
{
APlayerController* PlayerController = GetOuterAPlayerController();


GetOuterAPlayerController() 함수 구현이 궁금해서 헤더 파일을 다 뒤져봤지만 찾을 수가 없어서 차이점을 검색해보다 발견하게 되었다.

DECLARE_WITHIN(APlayerController)

Within 지정자를 사용하면 자동생성되는 코드에 위와 같은 매크로가 추가된다.

#define DECLARE_WITHIN_INTERNAL( TWithinClass, bCanUseOnCDO ) \
/** The required type of this object's outer ({{ typedef-type }}) */ \
typedef class TWithinClass WithinClass;  \
TWithinClass* GetOuter##TWithinClass() const { return (ensure(bCanUseOnCDO || !HasAnyFlags(RF_ClassDefaultObject)) ? (TWithinClass*)GetOuter() : nullptr); }


#define DECLARE_WITHIN( TWithinClass ) \
DECLARE_WITHIN_INTERNAL( TWithinClass, false )

위와 같은 매크로로 GetOuterAPlayerController 코드가 추가되는 구조였다.

참고 : [UE4]  클래스 및 UCLASS 주요 지정자

728x90

애셋이나 모듈 정리하다 보면 특정 클래스를 상속받은 BP 클래스를 찾고 싶을 경우가 있다. BP 클래스의 경우 레퍼런스 뷰어로 찾을 수 있는데 상속받은 부모가 네이티브 클래스일 경우 난감했다.

블루프린트 전체 찾기를 하다보면 검색어 문법이 있을 것 같았다. Content Browser > Advanced Search Syntax 에 따르면 아래와 같은 식으로 ParentClass 를 가진 객체를 검색할 수 있었다.

ParentClass:[ParentClass 이름]

예를 들어 아래와 같이 Actor 클래스를 상속받은 애셋들을 찾고 싶을 때 Type:Actor 라고 치면 안보인다.

ParentClass:Actor 라고 입력해야 보인다.

Detail 정보는 모두 필터로 사용할 수 있는 것 같다. AND, OR 같은 연산자도 지원한다.

지난 번에 애셋 정리할 때 알았으면 더 쉽게 처리할 수 있었을텐데 :)

출처 : https://docs.unrealengine.com/en-us/Editor/Content/Browser/AdvancedSearchSyntax

엔진버전 : 4.20.3

728x90

명령창에서 'slmgr /dlv' 입력 후 제품 키 채널 내용을 확인하면 된다.

출처 : http://damoa-nawa.tistory.com/100

728x90

// Should we use unity build mode for this module?
bool bModuleUsesUnityBuild = false;
if (Target.bUseUnityBuild || Target.bForceUnityBuild)
{
if (Target.bForceUnityBuild)
{
Log.TraceVerbose("Module '{0}' using unity build mode (bForceUnityBuild enabled for this module)", this.Name);
bModuleUsesUnityBuild = true;
}
else if (Rules.bFasterWithoutUnity)
{
Log.TraceVerbose("Module '{0}' not using unity build mode (bFasterWithoutUnity enabled for this module)", this.Name);
bModuleUsesUnityBuild = false;
}
else if (SourceFilesToBuild.CPPFiles.Count < MinSourceFilesForUnityBuild)
{
Log.TraceVerbose("Module '{0}' not using unity build mode (module with fewer than {1} source files)", this.Name, MinSourceFilesForUnityBuild);
bModuleUsesUnityBuild = false;
}
else
{
Log.TraceVerbose("Module '{0}' using unity build mode", this.Name);
bModuleUsesUnityBuild = true;
}
}
else
{
Log.TraceVerbose("Module '{0}' not using unity build mode", this.Name);
}


특정 모듈이 UnityBuild 가 안걸려서 확인해봤다.

일단 bUseUnityBuild는 기본적으로 켜져(true) 있다.
소스 파일 개수가 32개 넘을 때 UnityBuild가 동작하는데 파일 개수가 50개 인 줄 알았는데 cpp 기준으로는 25개 밖에 안되었다.

그냥 bForceUnityBuild 를 켜서 돌아가도록 했다.

위 로그는 Verbose 이상일 때 보이니 BuildConfiguration.xml 수정이 필요하다.

<?xml version="1.0" encoding="utf-8" ?><Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">

<BuildConfiguration>

<!--<bAllowXGE>false</bAllowXGE>-->

<LogLevel>VeryVerbose</LogLevel>

</BuildConfiguration>

</Configuration>



728x90

bUseAdaptiveUnityBuild (Boolean)

Use a heuristic to determine which files are currently being iterated on and exclude them from unity blobs, result in faster incremental compile times. The current implementation uses the read-only flag to distinguish the working set, assuming that files will be made writable by the source control system if they are being modified. This is true for Perforce, but not for Git.

4.19 올리고 나서 작업하는 파일만 Unity Build 에서 빼서 컴파일이 되길래 엔진 기능인 줄 알았는데 마침 그 때 Perforce 로 저장소를 바꿔서 동작하는거였다. -ㅁ-

728x90

비싸고 빠른 쓰레기 Perforce 는 encoding 이 달라도 같은 파일으로 인식하는 경우가 있는 것 같다. reconcile 을 해도 modified 로 체크가 되질 않았다. svn 같으면 지우고 update 받으면 되는데 Perforce 는 이게 애매했다.

초기 버전으로 workspace 를 돌리고 그걸 최신화 하는 식으로 비슷하게 처리했다.

  • 일단 문제 폴더를 선택하고 오른쪽 마우스 메뉴에서 Get Revision 을 선택한다.
  • Specifying revision using 을 선택하고 Changelist 에 0 을 입력한다.
  • Get Revision 버튼을 누르면 populate 되었던 처음 버전으로 폴더 내용이 돌아간다.
  • 그 상태에서 Get Latest Revision 을 눌러 최신 버전을 받는다. 
p4 command line 에서는 sync 명령어를 이용하면 된다. :(


728x90

aws 로 작업하다보면 아키텍처 다이어그램을 그릴 일이 많은데 gliffy 에서 아이콘을 제공하고 있으나 최신 서비스에 대한 아이콘은 없을 수도 있다.

aws 에 아이콘 리소스를 제공하고 있으니 아래 URL 을 참고하자.

https://aws.amazon.com/ko/architecture/icons/

PowerPoint, Visio, EPS or SVG, 스케치 형식 4가지 종류가 제공된다.


728x90
Edit > Perference 창의 'Merge' 탭에서 바꿀 수 있다.
Ohter application을 선택하고 Location 을 TortoiseMerge 실행파일 경로로 바꾸고 Argument 를 '/base:%b /theirs:%1 /mine:%2 /merged:%r' 로 하면 될 것 같으나 안된다.
비싸고 빠른 쓰레기 Perforce 가 파라미터 변환을 안하는 것 같다.

TortoiseMerge 경로에 헬퍼용 배치 파일을 먼저 생성한다.

TortoiseMerge.exe /base:%1 /theirs:%2 /mine:%3 /merged:%4

Location 에서 배치 파일을 선택하고 Arguments는 그대로 둔다.

출처 : https://stackoverflow.com/questions/12637072/how-to-use-tortoisemerge-from-perforce-p4v

728x90

.a 파일

7zip 과 같은 압축 프로그램을 사용하면 내부에 txt 파일과 o 파일을 볼 수 있습니다.


txt 파일을 열어보면 어떤 심볼들이 포함되어 있는지 확인할 수 있습니다.

.so 파일

linux 에 nm 이라는 프로그램이 있습니다. 윈도우용 clang 에도 포함되어 있으니 이 프로그램을 사용하면 아래와 같은 형식으로 덤프해서 볼 수 있습니다.


728x90

+ Recent posts