목록분류 전체보기 (194)
초보 코린이의 성장 일지
malloc - 라이브러리 추가 stdlib.h를 해줘야 사용 가능. - 함수의 일종 - 오버로딩 불가능 - 동적할당 할때 sizeof()와 형변환 캐스팅이 필요하다. - POD 타입만 크기 할당이 가능 (char, int, float 등) - 반환 값 void* - 할당 실패시 error를 throw 한다 - 생성자 호출 기능이 없고, 동적할당만 가능하며, 초기값을 지정해 줄 수 없다. - realloc를 사용해 메모리 크기를 조정할 수 있다. - 사용이 끝나고 해제할때 free 사용 new - 라이브러리 별도 추가 없이 사용 가능. - 연산자 - 연산자 오버로딩 가능 - 형변환 없이 사용 가능 - 컴파일때 메모리를 할당하는게 아닌, 실행시간 동안에 메모리를 할당해준다. - 반환 값 해당 타입의 포인터..
이제 Spline을 활용하여 Patrol 기능을 만들어 볼 것이다. 1. Enemy가 타입별 다른 속도로 움직일 수 있도록 하기 위해 Task를 상속받아 클래스를 하나 생성해준다. #pragma once #include "CoreMinimal.h" #include "BehaviorTree/BTTaskNode.h" #include "Components/CMovementComponent.h" #include "CBTTaskNode_Speed.generated.h" UCLASS() class U2212_06_API UCBTTaskNode_Speed : public UBTTaskNode { GENERATED_BODY() private: UPROPERTY(EditAnywhere, Category = "Type")..
Enemy가 Player를 인식할 수 있도록 만들어 볼 것이다. 1. Enemy가 무기를 들고 있도록 만들어 주기 위해 데이터 에셋을 하나 추가해준다. 2. 실행해보면 등록해준 Sword를 장착하고 있는 모습을 볼 수 있다. 1. 우선 비헤이비어 트리를 생성해주고, Wait를 하나 연결해준다. 2. 아무것도 연결이 안되어있으면 동작하는지 모르기 때문에 동작하는지 확인하기 위한 용도. 1. 만들어준 비헤이비어 트리를 선택해준다. #pragma once #include "CoreMinimal.h" #include "Characters/CEnemy.h" #include "CEnemy_AI.generated.h" UCLASS() class U2212_06_API ACEnemy_AI : public ACEnemy..
extern - 어딘가에 선언되어 있는 전역변수를 가져다 사용하기 위한 키워드 - 즉 전역변수를 공유할 수 있게된다. - extern 외부에 전역변수가 있다는 표시, 정의되어 있지 않는 상태에서 부르려고 한다면 링크 에러가 발생한다. - 외부에서 사용하기 위해 extern 키워드를 사용했다면, 내부에서 사용하는게 아닌 외부에서 선언되어야 한다. - 반복적으로 같은 이름을 사용하게 될때 (중복선언) - A라는 곳에서 int a라는 변수를 선언 및 사용, B라는 곳에서 a라는 변수를 사용하기(참조) 위해 B에서 extern int a; 를 하게되면 전역변수 a를 사용할수 있게된다. - A라는 곳에서 선언만 한 상태라면 B라는 곳에서 정의를 할 수 있지만, A라는 곳에서 선언과 정의 둘다 했다면 B라는 곳에서..
https://www.youtube.com/watch?v=xk9gBtQKJVQ 진행 중인 작업 - Player 스킬 - UI 진행 예정 작업 - Player 스킬 - Player 공중 콤보 - UI 진행 완료 작업 - RopeAction 완료 - Jump, DoubleJump 완료
IK는 어제 코드를 통해 마무리가 되었으며, 이제 ABP에서 처리를 해서 값들을 먹여줘야 한다. 1. 이제 True로 보내줄 링크된 애님 레이어가 하나 필요하다 생성해줄 것이다. 1. 우선은 연결을 해주고, 레이어 안에 작업을 시작해 보겠다. 1. 입력이 들어온 상태에서 IK를 섞어줘야한다. 2. IK를 먹일 왼발 가상의 본으로 시작해서 정해진 기준까지 천천히 계산을 누적해 나간다. 1. 오른발도 동일하게 값을 누적해 나간다. 1. 마지막 허리를 계산해주는데 값이 들어오는것 중에 큰값을 사용했다. 1. 최종 상태. 1. 사용할 애니메이션에 IK값을 적용 시키도록 커브값을 양발에 준 상태이다. 1. 자연스럽게 IK가 적용된 모습을 확인할 수 있다. 2. IK는 이제 끝이났다. 1. AI를 만들어주기 위해 ..
#pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "Kismet/KismetSystemLibrary.h" #include "Engine/DataTable.h" #include "CParkourComponent.generated.h" UCLASS() class U2212_06_API UCParkourComponent : public UActorComponent { GENERATED_BODY() private: void CheckTrace_Land(); // 떨어질때 밑에 추적하기 용도 private: bool Check_FallMode(); void DoParkour_Fall(); public: bool..
#pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "Kismet/KismetSystemLibrary.h" #include "Engine/DataTable.h" #include "CParkourComponent.generated.h" UENUM(BlueprintType) enum class EParkourArrowType : uint8 { // 추적할 화살표 Type Center = 0, Ceil, Floor, Left, Right, Land, Max, }; UENUM(BlueprintType) enum class EParkourType : uint8 { // 파쿠르 수행할 Type Climb = 0, ..
C++ - 객체 지향 프로그래밍 언어 (멀티패러다임 언어) - 코드를 어셈블리어로 컴파일한다. - 수동으로 관리하기 때문에 속도가 빠르다. - 동적할당으로 만든 변수 및 &를 사용하여 변수 참조이 가능하고 참조 타입으로 분류된다. - 수동적으로 New를 사용하여 동적할당, 사용이 끝나면 Delete로 수동적인 해제를 해줘야한다. - 메모리 관리 수동 처리, 대신 메모리를 직접 관리해야 하므로 메모리 누수 문제가 발생할 수 있다. - 수동적인 특성을 고려하여, 포인터를 사용할 수 있다. - 게임, 서버에 사용이 적합하다. (언리얼) C# - 컴포넌트 지향 프로그래밍 언어 - 코드를 가상 머신(.NET)를 이용해 IL(Intermidiate Language)로 중간언어로 파일생성, CLR (공용 언어 런타임..
인터프리터 - 인터프리터는 자체 실행 기능이 없기 때문에, exe를 만드는 곳만 컴파일러 언어를 사용하고, 대부분 코드를 인터프리터 언어로 결합하는 경우가 많다. - 실행이 시작되면 소스 코드를 한 줄씩 기계어로 번역하는 방식을 사용한다. - 컴파일러는 문제가 발생하면, 소스 코드를 다시 컴파일하고 문제를 하나씩 찾아가며 해결해야하지만, 인터프리터는 소스코드만을 수정해서 실행시키면 끝이나기 때문에 과정이 간편하다 - 메모리를 사용하지 않는다. - 오류 발생시마다 전체를 컴파일해 확인할 필요가 없으므로, 디버깅할때 편하며 효율적이다. - 속도는 컴파일러보다 느린 단점이 있다. - 코드 유출될 확률이 크다. 컴파일러 - 실행파일을 만들어 놓고 계속 사용하기 때문에 한번만 생성해 놓는다면, 런타임 상황일때는 ..