목록전체 글 (194)
초보 코린이의 성장 일지
1. 에디터안에 카테고리에 무언가를 추가하기 위해서는 StaticComponent를 가져와야 한다. 2. 그 안에 그릴 정보는 StaticMesh를 가져와서 작업을 진행해야한다. 더보기 #include "StaticMesh_Detail.h" #include "DetailLayoutBuilder.h" #include "DetailCategoryBuilder.h" #include "DetailWidgetRow.h" #include "Misc/MessageDialog.h" #include "Serialization/BufferArchive.h" #include "CStaticMesh.h" // 에디터 상에서만 끼워넣기 때문에, 게임모드인지 확인할 수 있는 방법이 없다. FReply FStaticMesh_Det..
https://www.youtube.com/watch?v=8uWJhG8FJ_k 진행 중인 작업 - AI 작업 중 - Final Boss AI 작업 - AI 구조 변경 진행 예정 작업 - AI 작업 중 - Boss AI 작업 - 보스들 각 거리 비례해 스킬 랜덤으로 동작하게 구현하기 - 디테일 작업 진행 완료 작업 - Fire스킬 타겟팅 유도 - 정해놓은 Distance 범위안에 들어가면 Forward로 회전없이 이동
더보기 #if WITH_EDITOR // 월드 아웃라이너 // 안에 이름 전부를 알아낼떄 사용 GLog->Log(GetActorLabel()); #endif 1. 게임내에서 코드를 수정 할 수 없는 부분, 즉 에디터 전용일때는 매크로 사용을 필히 해줘여한다. 2. 매크로를 꼭 써야하는 이유에 대해 한가지 알게 된 것이다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CStaticMesh.generated.h" UCLASS() class U2212_05_API ACStaticMesh : public AActor { GENERATED_BODY() #if WITH_EDITOR public: // 에디터 ..
모듈화 (Modularization) - 소프트웨어를 각 기능별로 나누는 것 - 프로그램을 효율적으로 관리될 수 있도록 시스템을 분해, 추상화 함으로써 제품의 성능을 향상시키고, 수정 및 재사용, 유지관리를 용이하게 하는 방법 - 각각의 모듈은 주어진 기능만을 독립적으로 수항하며, 다른 모듈과 적게 연관되어야 한다. 모듈 - 기능별로 나눠진 모듈들의 결과 결합도 - 서로 다른 모듈 간에 상호 의존하는 정도 또는 연관된 관계를 뜻한다. - 자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도 - 모듈의 변화의 영향과 의존성을 낮추고 재사용성을 높이기 위해 결합도를 낮게 유지시키는 것이 좋다. 결합도가 높은 클래스 특징 - 모듈 연관성이 없다. - 복장성 감소 결합도 낮은 클..
https://www.youtube.com/watch?v=OgiaSjgaHdo 진행 중인 작업 - AI 작업 중 - Mini Boss 마무리 단계 - Final Boss AI 작업 진행 예정 작업 - AI 작업 중 - Boss AI 작업 - 보스들 각 거리 비례해 스킬 랜덤으로 동작하게 구현하기 - 범위 스킬 랜덤으로 떨어지도록 구현 - 베지어를 활용한 보스 타겟팅 스킬 구현 진행 완료 작업 - 보스 랜덤 패턴으로 동작하게 구현 - Mini Boss 스킬 구현 완료 - Final Boss 리타겟팅 및 범위 스킬 구현
레이스 컨디션 - 한정된 자원을 동시에 여러 프로세스가 자원을 이용을 위해 경쟁을 벌이는 현상 - 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓰는 동작을 할 때 공용 데이터 접근이 어떤 순서에 따라 이루어졌는가에 따라 그 실행 결과가 같지 않고 달라지는걸 의미한다.. - 만일 2개의 프로세스에서 어떤한 수를 3번 더하는 기능을 수행할 때 그 결과값을 얻을 수 있지만, 어떠한 프로세스가 먼저 실행되었는지 알 수 없다. 이 때 Context Switching이 발생하면서 그 문제를 Race Condition라고 부른다. 해결 방법 - Mutex (뮤텍스), Semaphoer(세마포어) - Thread들이 서로 겹치지 않게 단독으로 실행 할 수 있도록 하나의 임계구역을 만들어 준다. Mutex (..
등록시킨 StaticMesh를 클릭하거나 에디터 맵에 올릴때 로그가 출력되도록 만들어 볼 것이다. 1. 직렬화 시켜줄 클래스를 하나 생성해준다. 1. 엔진에있는 MatineeCam_SM을 복사해서 가져와준다. 1. 머터리얼을 하나 검은색으로 생성해주고, 사용할 수 있도록 인스턴스 생성도 해준다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CStaticMesh.generated.h" UCLASS() class U2212_05_API ACStaticMesh : public AActor { GENERATED_BODY() private: UPROPERTY(VisibleAnywhere, Category =..
명령을 Console를 통해 내려 동작을 하도록 구현해 볼 것이다. 더보기 #pragma once #include "CoreMinimal.h" class EXAMPLE_API FExampleConsoleCommand { public: FExampleConsoleCommand(); ~FExampleConsoleCommand(); private: // I가 붙었지만 클래스가 아닌 구조체이다. // 연결해줄 변수 struct IConsoleCommand* Command; private: void ExecuteCommand(); #include "ExampleConsoleCommand.h" #include "GameFramework/Character.h" #include "HAL/IConsoleManager.h..
디버그 플러그인을 사용하여, 플레이어 정보, 플레이어 전방에 있는 객체, Debug Actor 3가지를 띄어보도록 할 것이다. 1. 화면상에 그려지기 위해 상속받은 부모로 들어가서 함수를 오버라이드 해서 사용한다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameplayDebuggerCategory.h" class EXAMPLE_API FExampleDubuggerCategory : public FGameplayDebuggerCategory // 사용하기 위해 상속 { public: // 실제로 그려주는 함수 void DrawData(APlayerController* OwnerPC, FGameplayDebuggerCanvasContext& CanvasC..
언리얼에 기본적으로 사용할 수 있는 플로그인이 아닌, 자체적으로 기능을 만들어 볼 것이다. 플러그인이라는 개념은 여러 모듈을 만들어 배포한다고 생각하면 된다. 1. 기본적으로 템플릿 내려보기로 생성해서 시작해 보겠다. 1. 기본적인 왼쪽에 플러그인들은 엔진 폴더안에 있는 기능들을 보여주고있다. 2. 새로운 사용자에 플러그인을 만들기 위해 오른쪽 하단에 새 플러그인을 클릭해 만들어준다. 3. 기본으로 설정하고 Example라고 이름을 지어 생성해준다. 1. 만들어준 플러그인을 보면 폴더안에 h와 cpp가 분활되어 있는걸 볼 수 있다. 2. 헤더는 모듈을 나눠줄때 dll로 컴파일해서 주게된다. 그때 어떠한 함수가 dll안에 있는지 모르기 때문에 publid로 .h만 지원해준다. cpp는 안에 내부적인 코드 ..