2021년 5월 26일 수요일

Unreal 초급

- 왼손 좌표계

- 회전의 경우 해당 축에서 시계방향임.

- X,(빨) Y(초), Z(파), XY 평면을 사용하기 위해 다이렉트랑 축이 다름.  

- Yaw(Z, 도리도리), Pitch(Y, 끄덕끄덕), Roll(X, 뒹굴뒹굴)

- Gizmo 의 수직 모양을 클릭하면 해당 평면에서 이동가능


단축키

    Content Browser

        F2 는 이름바꾸기

        Ctrl + Shift + S => 모두저장

        Ctrl + W => 복사

    Level

        Ctrl + S => 저장

        Cntrl + N => 새 Level

    BluePrint

        Alt + Click => Break Node Link

        Node 2개 클릭 + Q => 자동정렬

        선 중앙 더블클릭 => 선 중간에 점 생성(Jump 기능)

        구조체 -> Break => 따로 노드 빼서 구조체 확인 가능

        Wildcard => 자료형 지정 안됨. 노드 상에서 회색으로 나옴.

        Input 에서 펼쳐보기 해서 Pass by Reference 하면 참조 가능. 즉 Out 으로 가능.

    Viewport

        Alt + Click Pivot => Copy

        F8 => 카메라 빙의

    AI

        navigation mesh 를 outliner 에서 선택 후 P => 구역보임

        ' => AI Debug 모드


Content Browser

    우하단 View Option => Show Engine Content 에서 엔진 내부 폴더 볼 수 있음

    EngineContents->BasicShapes 에서 엔진 내부 메시가 있음


BluePrint

    Window

        우상 부모 클래스 확인

        블루프린트 클래스는 화면에 있는 인스턴스에게 적용됨

        Debug Filter 를 통해 개체를 선택해서 BreakPoint(F9), Watch This Value 가능

        구조체의 경우 Pin -> Combine/Re Struct Pin 가능

        Get 의 경우 Pin -> Validated Get / Pure Get 왔다갔다 가능

        Class Setting 에서 부모클래스 설정 가능

        상속받은 값 포함 기본값은 Detail 에서 설정가능하니 참고.

    Class Setting

        부모 클래스 설정 가능

        Run Construct Script 설정 가능

    Class

        코드, 즉 C++ 에선 접두사가 붙어서 U 가 붙음

        상속

            UObejct => 블루프린트에서 최상위 클래스

                AActor => 맵에 배치가능. Place Actors Window 의 이름의 유래

                    APawn => Input Component + Controller

                        ACharacter => Character Movement Component

                UActorComponent => 부모자식 불가능. Transform 없기 때문.

                    USceneComponent => 부모자식 가능. Transform 있기때문.

    Animation    

         Asset->좌클릭->Advanced Asset->Animation 에서 생성

         State Machine 으로 상세구현

         상속    

             AnimInstance => Animation BP 최상위 클래스

             

    Component

        Comp

            StaticMesh 가 잘 쓰임

            Spring Arm => 카메라 이동시 완충재 역할로 많이 씀

                use Pawn Control Rotation 을 켜야지 Target Rotation 을 사용함

        상속

            Actor Component => 데이터의 상속 기능

                Scene Component => Transform 가짐. BP Component 에서 위쪽 영역 표시됨

        폴더에서 오른쪽, 객체 Detail 에서 Blueprint/Add


    AnimNotify

        Animation 추가하는 Notifies 에 해당함

        GetNotifyName 으로 Animation 에서 보이는 이름 바꿀 수 있음.

        Notify State 에 Trail, Timed Particle 으로 궤도 설정 가능.


    Structure

        Advanced Asset -> Blueprint 에서 생성

        보통 U 같은 접두사를 Editor 에서 빼서 보여주는데 구조체는 아니라서 F 붙여줘야함.


    GameMode

        UActor 로부터 상속받음

        대표정보

            Game Session => 한 사람에 대한 서버가 주는 구역

            Game State Class => 전체 게임 상태 ( 현재 버퍼링 중 라던가)            

            Player Controller State => 입력, 네트워크까지 담당하는 Pawn 에 기본으로 있는거

            Player State Class => 서버 통신 어쩌고

            HUD => UI 총괄 관리 및 렌더링

            Default Pawn Class => 우리가 기본으로 선택할 클래스. 편의성에 가까움.

            Spectator Class => 관찰자, 중계용 카메라

        사용

            Project Setting -> Maps & Modes 에서 지정 가능

            지정하면 Settings 옆의 Blueprints -> Project Setting -> Game Mode ... 에서 확인


    Variable

        Tip

            드래그 시 Ctrl => Get, Alt => Set

            F9 로 BreakPoint 가능

            Watch This Value 하면 값이 윈도우에 뜸

            옆에 눈동자 모양으로 해당 변수가 Detail of Instance 에서 수정가능하게 함.

        Type

            color = 0~255

            linear color = 0~1

        Object

            Object Reference 가 기본형임. 객체 내부의 값을 가져올 수 있음.

            Get 변수 => Promote to Variable 쓰면 자동으로 변수생성됨

        문자열

            String, Name(대소문자 구분, Skeleton Socket 이름), Text(완전한 유니코드)


    Interface

        보통 클래스와는 다르게 다중상속이 가능해서 분할가능한 기능은 여기서 구현

        Return Value 가 있으면 Function 없으면 Event 로 인식해서 bool 값 return 해주자

        Notify 의 return 값이 의미없지만 있는 이유와도 관계가 있음(notify interface?)


Material

    Material Interface

    Material

        객체에 할당시 매번 컴파일이 일어나고 값 공유가 일어나지 않아 원본형태로만 사용

    Instance

        material 의 BP 나 값을 변경하면 할 때마다 컴파일을 하기 때문에 필요함

        우클릭 Create Instance 로 생성

        에디터 상에서만 변수 바꿀 수 있음.

        값 공유가 일어나 최적화가 됨

    Instance Dynamic

         프로그래밍으로 변수 수정 가능하고 프로그래밍에서만 생성가능


Controller(Character Movement)

    빙의

         Pawn->Auto Poccess Player 에서 설정 가능

    3인칭 이동회전

        Character Movement Rotation Setting->Orient Rotation To Movement    

            이동시 캐릭터가 움직이는 방향으로 회전하게 함

            Pawn 의 Use Controller Rotation Yaw 해제해서 카메라랑 같이 회전 막음.

            Spring Arm 이 있는 경우 Use Pawn Control Rotation 을 켜줘야함.


Animation

    State Machine

    Montage

        Section

            Play Anim Montage 에서 재생의 Section을 지정할 수 있음. 

            여러 애니메이션 끌어서 합치는거도 됨.

            Montage Section Window 에서 Link 를 설정가능하고 다음링크가 자신이면 루프.

        Slot

            Skeleton->Anim Slot Manager 에서 Slot 생성    

        생성

            Animation 좌클릭 -> Create -> Create AnimMontage 

            Montage 에서 원하는 Slot 지정하고 Notify 필요하면 지정.

        사용

            Event Graph 에서 Play Anim Montage 로 특정 Slot에 특정 Anim 을 재생

            Anim Graph 에서 Montage 를 사용할 수 있음. 

            이때 이전 노드가 초기화가 되서 Cache 를 사용해야함.

            Layered Blend Per Bone 을 Anim Graph 에서 사용해서 특정 관절 이하 블렌드.

            이를 위해선 Config -> Layered Setup -> Branch Filter 에서 Filter 를 생성해야함.

            이때 안보이면 화살표 누르기 

        주의

            애니메이션의 경우 Root Motion 이 이동해야함.

            Animation -> Viewport 창의 Character -> Animation -> Process Root Motion

            여기에 Detail -> Root Motion -> Enable Root Motion 으로 확인

            Anim 이 연속적으로 움직일 때 Montage 를 썼을 때 위치가 바뀜.

    Cache


Physics

    Box 같은 Collider 을 눌러야 Detail 에서 확일 할 수 있음.

    Physics 의 Simulate Physics 를 On 하면 움직임 ( Static, Stational, Dynamic )    

    충돌

        Overlap

            Query 에 해당함. 

            Generate Overlap 이 받는 쪽만 켜져있으면 Event 사용가능.

        Block(Hit)

            Physics 에 해당함. 

            Simulation Generates Hits 가 서로 켜져있으면 Event 사용가능.


Damage

    Actor Object 는 ApplyDamage 를 호출

    Damaged Actor 에게 서버 혹은 로컬이 DamageAny 를 호출해줌 

    이때 Instigator 가 공격자의 Controller, Causer 가 데미지를 준 무기에 해당될 것.


Event

    Delay => 마지막 Delay 로부터

    ReTriggable Delay => 최초의 Delay Call 시간부터


UI

    타입

        Widget => 하나하나의 컨트롤

        Slate Widget UI => Editor 상의 UI

        Widget Blueprint UI => InGame 상의 UI

    Component

        Canvas Panel => 화면 크기를 기준으로 함

        Size Box => 상대 위치

    기타

        영문체 폰트사이즈 = 96 

        Detail 에서 Is Variable 을 체크하면 이벤트 그래프에서 변수로 사용가능

    사용

        Class 에서 Widget 추가 

        => Detail -> User Interface 에서 Draw Size, Widget Class 설정


AI

    AI Controller

        Pawn Class 의 Details 를 보면 AI Controller Class 지정이 있음. 여기서 지정.

    Blackboard

        Behavior Tree 가 사용할 변수를 관리하는 객체

        [Get/Set] Value as [Type] 함수로 BP 내에서 값 접근 가능

        Behavior Tree 에서 Blackboard 를 직접 지정함

        Behavior Tree 를 실행하는 AIController 에서도 GetBlackboard 로 가져올 수 있음.

    Behavior Tree

        AI Controller 가 BT 를 실행시킴

        Blackboard 를 꼭 Behavior Tree 에서 지정해야함

        Decorator

            Flow Control 용

            Add Decorator -> Blackboard 

                사실상 이거만 씀

            Abort 옵션에 self 면 자기과 자식노드, Lower Priority 면 오른쪽 노드, Both 면 둘다.

        Service

            주로 Blackborad 값 설정 용

            overload function 에서 ai 가 붙으면 BT 내부, 없으면 외부에서 호출되는 함수.

            주의사항

                TInverval 이 실행 중에 Tick이 실행 안될 수도 있음.

                그래서 Inverval 을 3초 이렇게하면 Tick 을 씹고 같은 행동을 하게됨.

                그래서 Tick 에서 상태검사를 할 시 Receive Search Start 에서도 해야함.

        Task

            Leaf 노드에서 행동을 지정할 때 씀

    AI Perception

        AIController 에 AIPerception Component 를 넣어서 주로 사용

        Sense Config 에 여러 종류의 감각을 등록할 수 있음.

            Hearing

                그냥 소리가 아니라 Make Noise 에 반응함

            Sight 

                시야각도 조정 가능함

        GetCurrentlyPerceivedActors 로 현재 인식된 개체들을 알 수 있음

    Navigation Mesh

        A* 을 대체하는 길찾기 알고리즘용 영역.

        ai 의 MoveTo 를 쓰려면 이 영역에 Controller 가 있어야함.

        크기 조정을 Brush 라고 따로 있음. Transform 의 Scale 이 아님.

        P 를 누르면 영역이 화면에 표시됨

        EQS(Environment Query System)

            Query Item 을 환경에 배치해서 Test 에 따라 점수를 매김. 

            이러한 점수-item 쌍들에 Behavior Tree 가 접근가능해 선택가능. 

            Score 는 결과값을 0~1 범위로 정규화함에 주의

            EnvQueryContext

                Dot Test 에서 Line 을 지정할 때 EnvQueryContext_Querier 등을 보았을 거임.

                그거처럼 우리가 원하는 액터를 불러오고 싶을 때 사용함.

                이는 EnvQueryContext_Base 를 상속해서 구현이 가능함.

                Querier 가 인자로 오는데 여기서 Blackboard 에 접근해 값을 빼오는게 일반적. 

       

Data

    Data Table

        csv 형식으로 많이 사용함

        자신이 만든 Struct 타입을 행으로 해서 데이터를 외부에서 가져와 정리 가능 

        Reference Path

            에셋을 불러올 땐 reference path 을 사용함

            자료형'경로' 의 형식이 정석으로 충돌때문에 약식은 거의 사용하지 않음

            클래스 타입을 가져오는 경우 맨 뒤에 _C 를 붙임 ( '_C' ) 

    Data Assets




폴더

    Config(엔진정보), Content, Cache,Intermediate(중간저장파일), Saved(로그) => 앞 두개면 충분

    "/Game/" 은 컨텐츠 경로 

    "/Engine/" 은 언리얼 기본 제공 소스 경로


Viewport

    Active Play Mode

        Stand Alone Game => 게임화질 최대로

        New Editor Window => F8 안통하는 새창


Setting

    Project Setting->map&mode->default map => 기본 실행 레벨 설정

    Engine Scalability Setting -> Quality => 에디터에서 렌더링 퀄리티 설정

    Engine Input -> Binding -> Axis / Action Mapping 으로 Input 처리. 여기서 그룹은 BP_Evnet 에서 쓸 수 있음.


File

    Package Project


PBR (Physically Based Rendering)

- Roughness, Metallic



Normalize

tolerance => 0 으로 나눠야 할 때 이 값으로 나눔


Tag

Actor 밑에 확장하면 있음



List