2016년 5월 30일 월요일

PSN

개발킷 활성화에는 DevKit 뒤쪽의 시리얼 넘버가 필요하다.
ex) 00-********-*******-***-D*****A

비공개 서포트에 요청하면 아래의 안내를 줌

요청하신 시리얼 번호의 개발킷을 등록해 드렸으므로, 아래 내용을 참고해서 활성화를 진행해 주시기 바랍니다.
또한, 네트워크를 통한 자동 활성화 기능도 제공되고 있으므로, 아래 SDK 문서를 함께 참고해 주시기 바랍니다.

비공개 서포트에 요청하면 아래의 안내를 줌

ㅁㅁㄴㅁㄴ

2016년 5월 13일 금요일

unreal

유니티 / UE4 비교 참고
참고 사이트에는 블루프린트 이용법도 있으니 필요하면 찾아가보자

액터 서브클래스 유형

Pawn 폰 - 제어가능한 게임 오브젝트, 전형적으로 플레이어의 아바타를 나타내는 액터 유형입니다. 폰은 Controller 컨트롤러 소유를 통해 플레이어나 AI 등에 의해 움직입니다.

Character 캐릭터 - 이족보행 아바타용으로 디자인된 보다 전문화된 버전의 폰으로, 그러한 게임 오브젝트 유형의 복잡도를 다수 처리합니다.

Controller 컨트롤러 - 폰을 Possess 빙의하여 제어합니다. 폰과 컨트롤러를 분리함으로써, 플레이어를 가정하고 그와 똑같은 인터페이스를 사용하여 폰을 임의로 조작하는 AI 컨트롤러 작성이 가능합니다.

Player Controller 플레이어 컨트롤러 - 플레이어의 게임패드, 터치, 마우스/키보드에서 입력을 받고, 그 입력을 사용하여 빙의중인 폰 또는 캐릭터를 구동시키기 위한 좀 더 전문화된 컨트롤러입니다.
-------------------------------------------------------------------------------------------------

Visual Studio 프로젝트 파일 을 수동으로 새로고침

UE4 새 버전을 다운로드한 후, 또는 디스크의 소스 파일을 수동으로 변경한 후). 메인 메뉴의 "Refresh Visual Studio Project" 또는 프로젝트 디렉터리에 있는 .uproject 파일에 우클릭 한 다음 "Generate Visual Studio project files" 를 선택
-------------------------------------------------------------------------------------------------

UObject 파생 유형을 만든다면
UMyObject* NewObj = NewObject<UMyObject>();
-------------------------------------------------------------------------------------------------

한 유형에서 다른 유형으로 형변환(Cast)
UPrimitiveComponent* Primitive = MyActor->GetComponentByClass(UPrimitiveComponent::StaticClass());
USphereComponent* SphereCollider = Cast<USphereComponent>(Primitive);


게임오브젝트 / 액터 소멸(Destroy)
MyActor->Destroy();


게임오브젝트 / 액터 소멸 (1초 딜레이)
MyActor->SetLifeSpan(1);


게임오브젝트 / 액터 비활성화
MyActor->SetActorHiddenInGame(true);     // Hides visible components
MyActor->SetActorEnableCollision(false);    // Disables collision components
MyActor->SetActorTickEnabled(false);        // Stops the Actor from ticking


컴포넌트에서 게임오브젝트 / 액터 접근
AActor* ParentActor =  MyComponent->GetOwner();


게임오브젝트 / 액터에서 컴포넌트 접근
UMyComponent* MyComp = MyActor->FindComponentByClass<UMyComponent>();


게임오브젝트 / 액터 찾기
// 이름 찾기 (UObject 에도 작동)
AActor* MyActor = FindObject<AActor>(nullptr, TEXT("MyNamedActor"));

// 유형으로 액터 찾기 (UWorld 오브젝트 필요)
for (TActorIterator<AMyActor> It(GetWorld()); It; ++It)
{
        AMyActor* MyActor = *It;
        // ...
}

// 유형으로 UObject 찾기
for (TObjectIterator<UMyObject> It; It; ++it)
{
    UMyObject* MyObject = *It;
    // ...
}

// 태그로 액터 찾기 (ActorComponent 에도 작동, 대신 TObjectIterator 사용)
for (TActorIterator<AActor> It(GetWorld()); It; ++It)
{
    AActor* Actor = *It;
    if (Actor->ActorHasTag(FName(TEXT("Mytag"))))
    {
        // ...
    }
}


게임오브젝트 / 액터에 태그 추가
MyActor.Tags.AddUnique(TEXT("MyTag"));// 액터는 태그를 여럿 가질 수 있습니다


모노비헤이비어 / 액터컴포넌트 에 태그 추가
// 컴포넌트에는 자체 태그 배열이 있습니다. 유니티는 컴퍼넌트가 달린 오브젝트에 반영
MyComponent.ComponentTags.AddUnique(TEXT("MyTag"));


게임오브젝트 / 액터 및 모노비헤이비어 / 액터컴포넌트의 태그 비교
// 붙어있는 게임오브젝트의 태그 검사
if (MyComponent.CompareTag("MyTag"))
{
    // ...
}

// 액터에 이 태그가 있는지 검사
if (MyActor->ActorHasTag(FName(TEXT("MyTag"))))
{
    // ...
}

// 액터 컴포넌트에 이 태그가 있는지 검사
if (MyComponent->ComponentHasTag(FName(TEXT("MyTag"))))
{
    // ...
}
-------------------------------------------------------------------------------------------------

블루프린트 단축키

VectorPrameters                  -> v + 마우스 좌크릭

-------------------------------------------------------------------------------------------------

Console Command

` 키를 누르면 활성화 됨: show me the money 를 생각하면 됨

FreezeRendering : 랜더링의 기준을 현 상태에서 정지.
                        Occulusion 이나 Frustum culling 이 제대로 적용 되는지 확인

r.* : rendering 관련된 명령어



stat GPU : 그래픽에서 이루어지는 작업 목록

ctrl + shift + ,(쉼표) : GPU 프로파일링
                            단일 프래임에서 수행한 모든 작업을 알려줌

stat FPS : FPS 를 출력한다.

stat UnitGraph : 1 프레임을 그리는데 드는 비용을 그래프와 시간으로 나타냄

Frame: 프래임 당 시간
Game: 프래임당 게임 로직에서 차지하는 시간
Draw: 그리는데 드는 시간(CPU 에서 차지하는 렌더링 부분)
GPU: 그래픽 카드에서 드는시간

에디터는 자체의 오버헤드를 가지기에 프로파일링을 에디터에서 하는건 정확하지 않음

다시 없에는 방법
stat UnitGraph 를 반복하면 글자는 남는다
stat Unit 을 하면 모두 사라짐




-------------------------------------------------------------------------------------------------
Blueprint 단축키

Material 에서
1 + 마우스 좌클릭 -> Constant 노드
2 + 마우스 좌클릭 -> Constant2Vector
3 + 마우스 좌클릭 -> Constant3Vector
4 + 마우스 좌클릭 -> Constant4Vector
e + 마우스 좌클릭 -> 제곱 노드
r + 마우스 좌클릭 -> reflection vector 노드
t + 마우스 좌클릭 -> Texture Sample 노드
u + 마우스 좌클릭 -> texture coordinate 노드
i + 마우스 좌클릭 -> if 노드
o + 마우스 좌클릭 -> OneMinus(1-x) 노드
p + 마우스 좌클릭 -> panner 노드
a + 마우스 좌클릭 -> add 노드
s + 마우스 좌클릭 -> ScalarParameter 노드
d + 마우스 좌클릭 -> Divide 노드
f + 마우스 좌클릭 -> MaterialFunctionCall (Unspecified Function) 노드
l + 마우스 좌클릭 -> Lerp 노드
c -> comment
v + 마우스 좌클릭 -> VectorParameter 노드
b + 마우스 좌클릭 -> BumpOffset 노드
n + 마우스 좌클릭 -> normalize 노드
m + 마우스 좌클릭 -> Multiply 노드

Custom Blueprint 에서
s + 마우스 좌클릭 -> Sequence 노드
d + 마우스 좌클릭 -> Delay 노드
f + 마우스 좌클릭 -> For Each Loop 노드
g + 마우스 좌클릭 -> Gate 노드
c -> comment
b + 마우스 좌클릭 -> Branch 노드
n + 마우스 좌클릭 -> Do N 노드
M + 마우스 좌클릭 -> MultiGate 노드
-------------------------------------------------------------------------------------------------
TextBox 편집

enter 입력시 포커스 유지
widget > Designer 탭 > TextBox 잡고 Detail 의 Behavior 의 고급 >
Clear Keyboard Focus on Commit 을 false 로 변경


-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
프로젝트 빌드 이슈
1. 프로젝트에 커스텀 Plugin 이 추가 되었을 경우
 - epic 에서 책임지고 관리 하는 플러그인이 아니기 때문에 스스로 플러그인의 의존성에
   문제가 발생하지 않도록 조치해야한다.
 - 에디터에서만 작동, 빌드본에는 포함되지 않아 작동 않음

  위 그림 같은 플러그인을 적용해야 하는 상황

  TangoAuthenticatorLib 폴더에는 말 그대로 TangoAuthenticatorLib.dll 파일 하나가 있다.
  TangoPlugin 폴더에는 Resources, Source 폴더와 TangoPlugin.uplugin 파일 등이 있다.

  우선 TangoAuthenticatorLib 폴더를 TangoPlugin\Source\ 하위로 이동 시킨다.

  이제 TangoPlugin\Source\ 하위에
  TangoPlugin 와 TangoAuthenticatorLib 폴더가 존재하게 됨

  TangoPlugin 폴더 내부에 있는 TangoPlugin.Build.cs 의 내용 수정

  PublicDependencyModuleNames.AddRange(new string[] { "Core", "Http", "Json", "JsonUtilities", "Sockets" });

 를 아래와 같이 수정( TangoAuthenticatorLib 를 추가해줌 )

  PublicDependencyModuleNames.AddRange(new string[] { "Core", "Http", "Json", "JsonUtilities", "Sockets","TangoAuthenticatorLib" });


  TangoAuthenticatorLib 폴더 하위에는 TangoAuthenticatorLib.Build.cs 파일 생성

  내용은 아래와 같이

using System.IO;
using UnrealBuildTool;

public class TangoAuthenticatorLib: ModuleRules
{
    public TangoAuthenticatorLib(ReadOnlyTargetRules Target) : base(Target)
    {
        Type = ModuleType.External;

        string LibraryPath = ModuleDirectory + "/";

        string DllName = "TangoAuthenticatorLib.dll";
        RuntimeDependencies.Add(LibraryPath + DllName);
    }
}

※ 4.18 버전의 경우
 RuntimeDependencies.Add(new RuntimeDependency(LibraryPath + DllName));
 이렇게 바꿔서 해줘야 함





-------------------------------------------------------------------------------------------------



주요 클래스

Prefix
U - UObject 상속 ( UTexture )
A - AActor 상속 ( AGameMode )
F - 그외의 모든 클래스와 struct 들 ( FName, FVector )
T - 탬플릿 ( TArray, TMap )
I - 인터페이스 클래스 ( ITransaction )
E - Enum 타입 ( ESelectionMode )
b - Boolean 변수 ( bEnabled )

pascal case : 함수이름, 파라미터 등등 모두  단어의 첫자는 대문자
                 지역변수와 루푸까지도