전체 글 (100)

  • 2021.12.16
  • 2021.12.16
  • 2021.12.13
  • 2021.12.07
  • 2021.12.05
  • 2021.11.19
  • 2021.11.18
  • 2021.11.18
  • 2021.11.11
  • 2021.11.09
  • 2021.11.08
  • 2021.11.08
  • 12
    16

    오래전에 정처기 공부할때 정리했던것이다. 

    Sort 알고리즘


     

    1. 삽입 정렬

     

    5 2 4 1 7

     

    현재 인덱스보다 앞에 있는 숫자와 비교를 통해 자신이 들어갈 자리를 찾는다.

     

    진행 1 결과 25417 (52417에서 2를 기준으로 5와 자리 바꿈, 앞에 있는 숫자와 비교)

    진행 2 결과 24517 (25417에서 4를 기준으로 5번과 자리 바꿈)

    진행 3 결과 12457 (24517에서 1를 기준으로 245 모두 우측으로 넣는다.)

    ...

     

    최상의 경우 0(N) 평균적으로 0(N^2)


    2. 선택 정렬

     

    5 2 4 1 7

     

    비교를 통해 비교 데이터들 중 가장 작은 값을 뽑아나감으로 정렬

    여기서 헷갈릴만한건..작은값을 앞으로 밀어 넣는것이 아닌 자리 교체를 한다는 것이다

     

    진행 1 결과 15247 (52417에서 가장 작은 수인 1를 선택해서 가장 왼쪽에 넣음)

    진행 2 결과 12547(15247에서 가장 작은 수인 2를 선택해서 0번째 제외해서 가장 왼쪽에 넣음)

    진행 3 결과 12457 (12547에서 가장 작은 수인 4를 선택해서 1번째 제외해서 가장 왼쪽에)

    진행 4 결과 12....

     

    0(N^2)의 성능


    3. 버블 정렬

     

    52417

    N개의 데이터가 있을때 n-1번의 비교를 통해 진행함

    진행 1 결과 24157 (52417에서 옆에 있는 애들끼리 비교해서 바꿔줌)

    진행 2 결과 21457(옆에 있는 애들끼리 비교해서 바꿔줌)

    진행 3 결과 12457

    진행 4 결과 12457

     

    0(N^2)의 성능


    4. 병합 정렬

     

    n개의 데이터를 이분법을 통해 n/2개로 쪼개고 그 n/2개를 또 n/4의 4개로 쪼갠다.

    합칠때 데이터의 크기를 비교하여 합치는 과정으로 정렬함

    O(Nlog^2N)을 가지는 특징이 있음

     

    단순(구현 간단)하지만 비효율적인 방법
    삽입 정렬, 선택 정렬, 버블 정렬
    복잡하지만 효율적인 방법
    퀵 정렬, 힙 정렬, 합병 정렬, 기수 정렬
    https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html

    COMMENT
     
    12
    16

    -행렬의 상등, 덧셈, 스칼라 곱셈, 뺄셈

    행렬의 상등 : 두 행렬의 행수와 열수가 같음

    행렬의 덧셈 : 행수와 열수가 같은 행렬 들만 덧셈 가능하다.

    행렬의 스칼라 곱셈 : 모든 성분에 그 스칼라를 곱셈함

    행렬의 뺄셈 : 곱셈과 행렬 덧셈으로 정의함

     

    -행렬 곱셈

    행렬의 곱셈은 교환 법칙이 성립하지 않음 AB의 곱이 정의되려면

    A의 열 수가 B의 행수와 일치해야 함 2X3 * 3X2 내항 일치라고 함 

    행렬의 곱은 내적의 연속이다.

    고로 2차원 벡터와 3차원 벡터의 내적을 취할 수 없다.

     

    -행렬의 전치 transpose

    주어진 행렬의 행들과 열들을 맞바꾼것을 의미한다.

    T로 표시한다. 다음과 같은 유용한 속성이 있음

    (AB)T = BT*AT 세번째 성질을 보면 곱셈은 순서가 바뀐다.

     

    -단위행렬 identity 

    10       100       1000

    01       010       0100

              001       0010

                          0001

    단위행렬은 대각선 1 나머지 0인 정방 행렬이다.

    1의 행렬 버전, 곱해도 행렬이 변하지 않음 

     

    -역행렬 inverse 

    오직 정방 행렬만이 역행렬을 가지지만 모든 정방 행렬이 역행렬을 가지는 건 아님

    역행렬이 있는 행렬을 가리켜 가역 행렬이라고 부르고 없으면 특이 행렬이라고

     

    A형렬이 직교행렬이면 A의 역행렬은 A의 전치행렬과 같다.

    대부분의 DirectX는 직교행렬을 쓰기 때문에

    역행렬대신에 전치행렬을 쓰기도한다.

     

    역행렬 구하는 공식은 아래와 같다.

    A의 역행렬은 A행렬식분의 A 수반행렬

    detA는 행렬식이다. A*는 딸림행렬 혹은 수반행렬(adjoint matrix)이다.

    최종적으로 공식은 이렇게 된다. 

     

    행렬식이 0이면 역행렬이 없다는 뜻이며 행렬식은

    역행렬의 유무를 따지는데에 사용한다. 

     

    그럼 아래서 부터 행렬식과 딸림행렬(여인수 행렬의 전치)

    를 구하는 방법을 알아보자.

     

    -행렬식(determinant)

    행렬식은 역행렬을 구할 수 있는지 판별하는 식으로

    3x3까지는 사러스법칙으로 구할 수 있지만

    4x4 이상은  라이프니츠가 만든 소행렬식이나 크레마공식을 사용해야 한다. 

     

    -행렬식(determinant) - 소행렬

    위 그림을 보면 소행렬은 한 행과 열을 잡아 그 부분을 뺀

    나머지가 소행렬이 된다는 것을 볼 수 있다.

     

    모든 행과 열을 잡아 그 부분을 빼서 소행렬식을 계산하면

    마이너 행렬을 구할 수있다. 모든 행과 열의 소행렬식 모음집.

     

    소행렬 식에 + - + - (짝수면 + 홀수면 -) 부호를 붙인 것을

    여인수(confactor)라고 한다.

     

    마이너 행렬 -> 여인수 행렬 -> 전치하면 딸림, 수반행렬이된다.

     

    아래는 순서대로 행렬의 소행렬 정의를 적용한 2x2, 3x3, 4x4 행렬식이다.

    재귀적으로 정의된다. det로 표기함

    만약에 3X3 행렬식을 구한다고 하면

    위의 행렬식을 보며 반대로 접근하면 된다.

     

    소행렬식 계산

    A 같은 임의의 행렬이 있다고 했을때

    임의의 행 또는 열을 잡아 사용하면 행렬식을 얻을 수 있다.

     

    ->1행기준

    ->1열기준

    둘다 마찬가지로 20이 나온다.

    어디 기준으로 행렬식을 구하든 같은 값이 나오기 때문에

    행렬식을 구하는데에는 계산이 편한 행 또는 열 기준으로 구하는게 편하다. 

    아무튼 이 행렬은 0이 아니여서

    역행렬이 존재한다. 그럼 역행렬을 구해보자.

     

    역행렬 도출

    COMMENT
     
    12
    13

    Play sound at location에는 두가지 세팅이 있다.

    오늘은 이 두가지를 살펴봤다.

     

    블루프린트의 Playsound at Location에

    위치를 지정해도 거리에 상관없이 볼륨이 일정하다. 

     

    이는 Attenuation Settings(감쇠)을 채워주지 않았기 때문이다.

     

    사운드 감쇠(Attenuation)을 생성한다. 

     

     

    멤버변수(속성)으로 여러개가 있는데, 중요한건 감쇠거리와 감쇠함수이다.

     

    입맛에 맞게 조절하여 사용하면 된다.

     

    플레이 사운드뿐만 아니라 Ambient Sound 등에서, 사운드가 출력되는 클래스에는

     

    감쇠 기능을 넣을 수 있다.

     

    두번째로는 동시 실행인 Concurrency이다.

     

    나는 이것을 위험에 쳐했을때 웅장한 분위기의 음악을 쓰는데 사용했다.

     

    위험요소가 여러가지일때 음악이 딱 한번만 출력되야하므로 최대수는 1로

     

    해상도 규칙는 새로운걸 막는 Prevent New를 사용했다.

     

    유니티였으면 IF문으로 isplaying을 체크했을텐데. 이러한 기능이 클래스로 구성되어있다니

     

    언리얼은 자체 기능이 되게 많은 것 같다.

    COMMENT
     
    12
    07

    https://www.youtube.com/watch?v=miB4qah7n_A

     

    언리얼에서 플러그인 두개를 받는다.

    Control Rig, Full Body IK

     

     

    작업할 캐릭터 매시를 선택해서(오른쪽마우스) 컨트롤릭을 생성한다. 

     

     

    아래 사진과 같이생성한 컨트롤릭은 매쉬 에셋 디테일에서 적용가능하다.

     

     

    이제 컨트롤릭을 열어서 

     

    릭그래프를 구성해준다.

     

     

    간단한 발 위치 조정을 구현할려고 한다.

    Full Body IK로 중앙 루트가 될 뼈를 선택하고 영향을 미칠 뼈들을 선택하는데

    뼈가 아닌 컨트롤로 구성해야한다. 

     

     

    컨트롤을 생성해서 사용할 뼈에 맞게 이동시켜주고 본세팅을 해준다.

     

    Rotation stiffness은 부자연스러운

    뼈 움직임을 조정해줄 수 있다.

     

     

    이후 레이케스트를 사용해 접촉한 지면의 위치를 알아내서

    컨트롤을 움직인다면 발의 위치를 조절할 수 있다.

     

    추가적으로 이렇게 만들어진 컨트롤은 자동으로 매쉬의

    하이라이키에 업데이트가 되는 것이 아니다.

     

     

    베타버젼이라 그런지 새로고침을 해줘야 한다.

    시간이 되면 이 컨트롤을 이용해 응용하는 것도 포스팅해보겠다.

    이를 응용하면 실시간으로 움직이는 거미도 만들 수 있을 것이다.

    COMMENT
     
    12
    05

    언리얼에서 캐릭터 애니메이션에 노티파이를 추가해서 효과음을 출력하는 기능이 있다.

    노티파이는 유니티에 애니메이션에 Event?를 추가했던 것 같다. 같은 기능이다.

    노티파이 추가 누르면 해당 프레임에 Play Sound 해 줄 수 있다.

    현실에서 발 소리는 일정하지 않기 때문에

    랜덤한 발소리를 나게 해줘야한다. 

    언리얼에는 사운드큐라고 이를 편하게 해주는 것이 있다.

     

    랜덤함수로 오디오 파일 중 하나를 출력하도록 만든다.

    이걸 playsound 노티파이로 등록하면

    발소리는 공격소리는 랜덤으로 구현할 수있다.

    굳이 함수를 따로 만들지 않아도 

    사운드큐라는 편한 방법이 있다는 걸 배워서 포스팅했당

    COMMENT
     
    11
    19

    유니티는 포톤서버를 이용해 멀티플레이를 구현했었는데,

    언리얼은 멀티플레이 기능을 내장하고 있다.

    내장하고 있어서 구현하기에 아주 편하다.

     

    언리얼 멀티플레이에는 두 종류가 있다.

    리슨서버데디케이티드 서버가 그것이다.

     

    서버란 게임을 호스팅하는 역활이고 다수의 클라이언트가 연결이 가능하다.

    즉, 서버에서 모든 걸 결정짓는다 생각하면 된다.

     

    리슨서버는 멀티플레이하는 4명이 있다고 가정하면

    그 중, 한명은 호스팅을 하는 호스트이다. 

    그런 와중에 4명 모두 클라이언트인셈이다.

    호스팅도 하고 클라이언트이여서 비용이 비싸다.

     

    데디케이티드 서버는 전용서버가 따로 있다.

    최적화가 잘되어있어서 실행비용이 싸다.

     

    오늘은 간단히 IP주소를 입력해

    접속하는 리슨 서버를 구현해봤다.

     

     

    우선 언리얼을 킨다.

     

     

    플레이어 수를 지정하고 리슨서버로 플레이한다.

     

    그 후에 호스트, 접속, IP주소 입력 할 UI 를 만들어준다.

    유저인터페이스 블루프린트로 만들어준다.

     

     

    이런 식으로 만들어준다. 

     

     

    Host 버튼을 누르면 Level1 맵을 열고

    Connect 버튼을 누르면 IPAddress에 아이피를 텍스트를 받아와 toString()해서

    Level1맵을 여는 방식이다. 이는 리슨서버에서 맵이 IP로 구성되어 있기 때문이다.

     

     

    해당 레벨 블루프린트에서 UI가 뿌려지게 블루프린트 배치한다.

     

     

    추가적으로 테스트를 위해 마우스가 보이게 레벨블루프린트에서

    SetShowMouseCursor를 켜주었다.

     

    에디터에서 플레이하면 뷰포트에서는 이미 리슨서버로 연동되어있어

    이미 연결되어 있는 모습일 것이다.

     

     

    한쪽은 호스트 입장하고

    한쪽은 아이피로 입력해

    같은 공간에서 각자 입력을 할 수 있는 모습이다.

    COMMENT
     
    11
    18

    랜덤으로 이동하다가 SphereTrace 구형 위치에 캐릭터가 감지되면
    캐릭터한테 이동되는 로직을 비헤이비어 트리로 구현하였다.

    Behavior Tree는 게임 AI에 특화되어있고 가독성, 재활용성이 좋다고 한다.

    1. Behavior Tree란?

    FSM(유한상태머신)의 유지보수와 가독성의 단점을 보안한 트리구조로 이루워져있다.
    트리구조이기 때문에 위에서 아래로 쭉 볼 수 있기때문에 흐름이 한눈에 보인다.
    우선순위도 쉽게 잡을 수 있다는 뜻이다.

    FSM에서 A에서 B로 상태를 바꾸려면 내부에서 SetState로 흐름을 바꿔줘야하는데
    BT는 부모노드가 체크를 해 왼쪽에서 오른쪽으로 한꺼번에 바꿔줄수 있다.

    만약에 전이순서가 맘에 안들면 FSM의 경우 일일히 SetState를 수정해야하는데
    BT의 경우에는 자식노드의 순서만 바꿔주면된다.

    2. Selector, Sequence

    트리구조로써 왼쪽에서 오른쪽으로 가는것이 원칙이다.

    BT에는 Selector와 Sequence가 있다.
    Selector는 자식중에 하나라도 성공하면 실행하고
    Sequence는 자식중에 하나라도 실패하면
    실행하지 않는다는 특징이 있다.

    3. BlackBoard

    블랙보드는 값을 set하거나 get할 수있는
    공유가능한 멤버변수가 저장되는 곳이다.

    키 형태로 이루워져있다.

    4. 태스크, 서비스, 데코레이터

    언리얼 BT UI에서 태스크는 보라색,
    데코는 파란색, 서비스는 초록색이다.

    1. 태스크는 말그대로 실행업무를 담당한다.
    2. 데코레이터는 조건절이다. 조건에 따라 결과를 변형하거나 반복시킨다. 실행 여부를 제어한다.
    3. 서비스는 검사를 통해 블랙보드의 내용을 업데이트하는데 쓴다.

    참고로 BT는 일반적인 BP와 다르게 BeginPlay나 Tick이 없다
    Receive Tick AI 와 Recevie Execute AI과 같이
    별도의 이벤트를 지니고 있다.

    - 서비스 예시

    구현된 서비스

    SphereTrace로 감지된 플레이어 캐릭터의 오브젝트를 블랙보드에 저장한다.
    (SetBlackboard Value as Object)

    - 데코레이터 예시

    태스크 직전 부모노드에 속하며
    캐릭터와 AI 거리로 태스크 실행 유무를 결정한다.

    - 태스크 예시

    블랙보드의 키에 저장된 값을 받아와 AI의 캐릭터 위치로 이동을 한다.
    태스크가 끝나면 끝났다고 선언해줘야한다. Finish Execute.

    우리가 자주 사용할 것같은 Task는 이미 정의되어있다.
    Wait나 Moveto 등 AI에 특화되어있다.

    왼쪽-> 오른쪽 실패시 그냥 랜덤으로 움직이는 FindLocation 태스크가 Execute된다.

    -랜덤 이동

    COMMENT
     
    11
    18

    언리얼 엔진에서는 리타겟팅을 지원한다.

     

    리타겟팅이란, 서로 다른 본을 가진 인간형 타입의 캐릭터들이

     

    하나의 같은 애니메이션 파일을 가지고 적용할 수 있는 것이다.

     

    유니티도 지원한다. 

     

    source : unrealengine docs

    위 사진은 리타겟팅이 없다면, 이런식으로 된다,

     

     

    여기 언리얼 기본형 캐릭터가 있다. 이 캐릭터가 갖고 있는

     

    애니메이션을 다른 캐릭터 매쉬에 이식해보자.

     

    스켈레톤 파일을 열어 리타겟팅 매니져를 연다.

     

    인간형 릭으로 선택해준다.

     

    리타겟팅할 캐릭터가 T-pose인지 드레스 포즈인지

     

    알맞게 바꿔줘야한다. 최대한 비슷하게 뼈를 회전시키면 된다.

     

     

    자동매핑으로 자동으로 뼈를 맞춰주지만

     

    그래도 안된다면, 해당 뼈에 맞는 뼈타겟을 기입해주면 된다.

     

    COMMENT
     
    11
    11

    만약에 디스패처와 인터페이스가 없다면??
    캐릭터에 물체에 부딪힐때 뭔가 이벤트를 발동하고
    싶다고 하자. 하나의 오브젝트면 상관이 없지만
    그 부딪힌 객체가 뭔지 몰라 객체 수 만큼
    캐스팅해야한다.

    만약 캐스팅해서 그 형태가 아니라면.. 또 예외처리하고 다음 캐스팅을 하고..해야한다.

    그런 어려움을 막기위해 인터페이스와 이벤트 디스패쳐를 사용한다면
    각자의 작업, 일괄 작업을 편하게 할 수 있다.

    이벤트 인터페이스 예시

    이렇게 인터페이스 블루프린트를 만들었다.
    캐릭터가 닿으면 인터렉트라는 인터페이스를
    작동하게 한다.

    그 다음으로 인터페이스를 구현할 객체(라이트 객체)에 인터페이스를 물려준다.
    (해당 객체 블루프린트 클래스 세팅 누르면
    설정할 수 있음)

    윗 그림은 라이트에서 불끄고 키는거 함수로 구현해서 인터페이스 이벤트에 물려주엇다.
    다른 객체도 이와같이 Interact라는 인터페이스 이벤트에 각각의 활동을 물려주면
    한 인터페이스 이벤트에 각각의 함수를 발동 할 수 있다.
    한 객체의 함수를 호출한다.

    이벤트 디스패처는 이벤트를 달아놓고 일괄적으로 작동하게 할 수 있다.

    이벤트 디스패처 예시

    여기 테이블이라는 BP_Table 객체가 있다.


    이 객체는 블루프린트 왼쪽 하단에
    이벤트 디스패처를 만들어서 테이블 콜리젼에 닿으면 ED EventDispather라는 디스패쳐가
    작동하도록 설정했다.

    문이다. 우리는 이것을 Door라고 하기로 했다.


    테이블에 등록했던 Dispatcher에 문이 열리는 이벤트를 등록했다. 이벤트 바인딩이라고 한다.
    이 이벤트 바인딩으로 하나의 디스패쳐가 작동하면 디스패쳐에 바인딩한 여러 활동을 일괄적으로
    작동하도록 할수 있다.

    정리하자면 인터페이스는 인터페이스 이벤트로 함수를 실행하는 것이고
    이벤트 디스패쳐는 디스패쳐에 이벤트들 할당(바인딩)을 해 일괄적으로 이벤트를 실행하는 것이다.

    언뜻보면 둘이 같은 용도 아니야? 라고 생각할 수 있지만..
    둘은 엄연히 다르고 인터페이스 이벤트를 디스패쳐에 할당해서 사용하곤 한다.

    인터페이스는 실체만 갖고 순수 가상의 형태이다. 구조를 잡기위해 쓰곤한다.

    즉, 인터페이스를 활용하면 각각의 활동을 할 수 있다.
    예를 들어 캐릭터에 닿으면 인터페이스 이벤트가 작동하게 한다고 하자.
    그러면 그 인터페이스 이벤트를 갖고 있는 클래스는
    아이템이라고 치면 그만의 활동(함수)을 할 것이고
    적이라고 하면 그 적의 활동(함수)를 발동시킬수 있다. -> 다양한 객체를 캐스팅 할 필요가 없음

    이벤트 디스패처는 이벤트를 할당해놓고 일괄적으로 작동하게 할 수 있다.
    예를 들어 문에 플레이어가 닿았다면,
    여러 물체들 마다 일괄적으로 동작하게 한다. -> 커스텀 이벤트, 인터페이스 이벤트까지
    받는 쪽이 불특정 다수이며 그냥 호출만으로 반응시키고 싶을 때는 받는 쪽에서 이를 이벤트로 구현하는 방식이다.
    할당하는 것도 자유자재이다. 언바인딩으로 디스패쳐에서 제외시킬수도있다.

    COMMENT
     
    11
    09

    1. 프로젝트 : 각각의 게임을 이루는 콘텐츠와 코드가 있는 유닛, 디스크상의 디렉토리 세트와 일치

     확장자인 .uproject파일으로 그 파일을 가리키기도 하지만, 서로 공존하는 별개의 파일이 두개있음

     파일 uproject는 생성 열기 저장에 사용되는 레퍼런스 파일인 반면에 Project는 프로젝트에 관련된 모든 파일과

    폴더가 들어 있음.

     

    2. 오브젝트 : 언리얼 엔진의 기본 구성 요소 메모리관리, 모든 오브젝트의 최상위 클래스이다. (메모리 관리) 언리얼 엔진의 기본 구성 요소는 UObject.

     

    3. 액터(Actor) : 월드에 배치 할 수 있는 오브젝트면 액터이다. Actor는 언리얼 엔진에서 3D 위치 회전 스케일 데이터를 포함한 오브젝트이다. 유니티의 GameObject 정도인듯하다

     

    4. 폰(Pawn) : 액터(Actor)의 서브클래스로서 Actor보다 구체적으로 정의된 오브젝트 클래스 input처리와 ai기능이 있다. 

     

    5. 캐릭터(Character) : 폰(Pawn)의 서브클래스로서 폰보다 구체적으로 정의됨, 2족보행 인간형 캐릭터에 특수화됨

     

    actor -> pawn -> character

    6. 레벨 : 유니티에서는 씬이지만 언리얼은 레벨이다. .umap 확장자로 맵이다. 

     

    7. 월드 : 월드 하나에 여러개의 레벨이 있을 수도 있다.

    월드는 범위가 큰것으로 마찬가지로 .umap이다. 추상적인 개념으로 최상위 노드라 생각하면 된다. 

     

    8. 게임 모드(Game Mode) : 게임 모드는 규임 규칙 승패조건 등 각기 다른 다수의 레벨에 하나의 게임 모드를 적용시킬 수 있다.

     

    9. 게임 상태(Game State) : 게임의 상태 모니터링 playerstate도 있음

     

    10. 컴포넌트 : 액터를 구성하는 시각적 요소, 

    COMMENT
     
    11
    08

    c++에서는 인스턴스를 만들어야만 조사식으로 해당 내부 정보를 확인 가능하다.

    c#이나 java에서는 리플렉션 기능이 있어서 할당하지 않아도 그 정보를 알 수 있는데

    c++이라는 제약에서 언리얼 엔진에서는 리플렉션 기능을 지원한다.

     

    언리얼 엔진에는 4개의 에셋 참조가 있다.

     

    ObjectReference

    엑터 인스턴스에 대한 하드 참조가 된다.
    즉, 참조된 클래스가 인스턴스화 되고 참조된 리소스도 인스턴스화 된다.
    이는 참조된 리소스가 메모리에 로드 된다는 단점이 있다.


    Class Reference

    UObject 클래스에 대한 참조가 된다.
    C++에서 TSubclassOf가 해당된다.

    언리얼 엔진이 컴파일 전에 메타 소스 파일과 헤더 파일을 생성한다. 

    이러한 정보는 언리얼 엔진이 UClass 클래스에 보관된다.

    컴파일 단계에서 UClass 클래스가 생기고

    실행 초기 런타임에서는 오브젝트 마다 클래스 정보와 오브젝트의 인스턴스가 생성된다

    인스턴스가 CDO (클래스 기본 객체)이다. 


    Soft Object Reference

    C++의 TSoftObjectPtr 가 해당된다.
    FSoftObjectPath : 리소스의 전체 이름이 포함된 문자열 구조.
    FSoftObjectPtr : UObject에 대한 약한 포인터, 디스크의 오브젝트 경로도 추적한다.  모든 구현은 TPersistentObjectPtr<FSoftObjectPath>가 된다.


    Soft Class Reference

    C++의 TSoftClassPtr 가 해당된다.
    UObject에 해당하는 UClass를 반환한다.

    COMMENT
     
    11
    08

    처음 언리얼 엔진 c++ 프로젝트 생성하면 닷넷 프레임 워크 없다고 뜬다.

     

    Running D:/Ue5/UE_5.0EA/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe  -projectfiles -project="D:/Project/SampleCPlus/SampleCPlus.uproject" -game -rocket -progress
    It was not possible to find any compatible framework version
    The framework 'Microsoft.NETCore.App', version '3.1.0' was not found.
      - The following frameworks were found:
          5.0.11 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

    You can resolve the problem by installing the specified framework and/or SDK.

    The specified framework can be found at:
      - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCor

    e.App&framework_version=3.1.0&arch=x64&rid=win10-x64

     

    설치해주면 쉽게 해결된다. 오류를 잘 읽어보면 링크까지 알려준다.

    COMMENT
     
    1 ··· 4 5 6 7 8 9