728x90
반응형

개발 33

15. Constructor & Destructor (1)

1. Constructor & Desturctor 생성자 (Constructor)는 특별한 멤버함수이다 생성자는 객체 생성시 호출되고 초기화에 유용하게 사용된다 생성자 이름은 클래스 이름과 같다 ex) Player 클래스의 생성자는 Player(), Player(int 32 Test)... 등등 생성자는 반환형은 없고 매개변수는 존재할 수 있으며 오버로딩 할 수 있다 (클래스는 오버로딩을 통해 많은 생성자를 가질 수 있다, 이 많은 생성자들은 각각 Unique해야 한다 (객체 생성시 어떤 생성자를 호출해야 할 지 알아야 하기 때문이다, 모호성을 가진다면 컴파일 에러가 발생한다) 소멸자는 (Destructor)는 특별한 멤버함수이다 소멸자 이름은 클래스 이름과 같고 앞에 ~이 붙는다 ex) ~Player(..

C++ 2024.04.03

14. OOP Class & Object (1)

1. OOP OOP란 Object Oriented Programming으로 객체 지향 프로그래밍을 의미한다 절차 지향 프로그래밍 (Procedural Programming)은 함수를 중심으로 프로그래밍 하는 방식이다 따라서 함수들의 집합이라고 볼 수 있다 절차 지향 프로그래밍에서 데이터는 함수에서 분리되어 선언되고 데이터를 함수에서 사용해야 하면 해당 함수로 데이터를 전달해서 사용한다 절차 지향 프로그래밍의 한계점은 함수가 데이터의 구조에 대해 알아야 한다는 점이다 -> 데이터 구조가 변경되면 이 데이터를 사용하는 함수들도 전부 다 변경되어야 한다 (추후에 프로그램이 커지면 복잡해짐) 프로그램의 크기가 커질수록 절차 지향 프로그래밍의 한계점은 더욱 드러나게 되는데 프로그램이 커질수록 절차 지향 프로그램은..

C++ 2024.02.22

13. Pointer And Reference (2)

1. Pointer Arithmetic 포인터는 대입, 비교, 산술 연산이 가능하다 포인터에서 ++,--연산은 해당 주소 다음,이전을 가리킨다 (포인터 변수의 타입 크기만큼 증가,감소한다) ex) int형 포인터 변수의 주소가 1000이고 해당 포인터 변수를 ++. --하면 1004, 996이 된다 일반 변수와 마찬가지로 포인터변수++, 포인터변수--로 사용이 가능하다 이때 *포인터변수++은 주소를 ++하는것이고 (*포인터변수)++은 주소를 타고간 데이터 값을 ++하는것이다 포인터 변수는 덧셈 뺄셈도 가능하며 +=, -=도 사용할 수 있다 마찬가지로 포인터 변수의 타입 크기만큼 증가, 감소된다 포인터 변수와 포인터 변수의 뺄셈은 두 주소 사이의 거리를 계산한다 이때 타입이 다르면 컴파일 에러가 발생한다 ..

C++ 2024.02.14

21. Collision & Overlap (2)

1. On Component Begin/End Overlap SphereCollisionComponent는 USphereComponent이다 USphereComponent* Sphere; USphereComponent는 UPrimitiveComponent를 상속받고 UPrimitiveComponent에는 OnComponentBegin/EndOverlap Delegate가 존재한다 따라서 USphereComponent뿐 아니라 UPrimitiveComponent를 상속받는 모든 Component는 OnComponentBegin/EndOverlap Delegate를 사용할 수 있다 OnComponentBeginOverlap은 Component가 다른 Actor/Component와 Overlap이 시작했을 때..

Unreal 2024.02.08

12. Pointer And Reference, Memory Allocate (1)

1. What is a Pointer? 포인터 타입 변수는 다른 변수의 메모리 주소를 저장한다 포인터는 주소 전달 방식으로서 함수의 매개변수에 사용되고 배열에 아주 효과적으로 사용되며 힙 영역에 메모리를 동적으로 할당할 때 사용한다 또한 임베디드 시스템에서 특정 메모리 주소 액세스 권한이 필요할 때 사용된다 타입* 변수명;으로 포인터 변수를 선언할 수 있다 이때 *는 수학적의미가 아닌 포인터 변수를 의미한다 포인터 변수도 일반 변수와 마찬가지로 초기화 하지 않으면 쓰레기값(Garbage Data)이 들어가게 된다 꼭 사용하기 전에 초기화를 하고 사용해야 한다 포인터 변수의 쓰레기값은 결국 주소이다 만약 이 주소가 프로그래머가 알지 못하는 유효한 곳이라면 접근 시 상당히 위험한 결과를 나타낼 수 있다 포인..

C++ 2024.01.30

18. IK (Inverse Kinematics)

1. IK IK처리를 하지 않고 Character의 움직임을 구현했다면 다음과 같이 경사로에 위치했을 때 발이 뜨는 현상을 볼 수 있다 자연스럽게 보이려먼 Character기준 왼쪽 다리는 구부리고 오른쪽 다리는 밑으로 더 내려와야 한다 로봇으로 비유를 하면 로봇 다리의 끝을 제어하고 싶다면 다리와 관련되어 있는 관절 부품 시작부터 다리의 끝 관절까지 제어해야 한다 이를 게임개발에서 IK를 사용하여 처리한다 IK는 말그대로 Inverse Kinematics이다 위 사진을 예시로 설명하면 왼쪽 경사면에 맞게 왼발을 배치하면 왼발에 연관되어 있는 상위 Bone (L_Knee, Pelvis) 이 어디 위치에 들어가야 하는지 역으로 계산할 수 있다는 것이다 IK 계산 방식은 다음과 같다 오른쪽 발에 가상의 Sp..

Unreal 2024.01.27

11. Function (2)

1. Passing Arrays to Function 함수의 인자로 배열을 넘길 수 있다 반환형 함수이름(타입 배열이름[]);로 함수를 선언하고 호출 시 인자로 배열 이름을 넣어준다 함수이름(배열이름); 배열의 이름은 배열 0번째 index의 주소 (배열의 시작주소)를 의미한다 따라서 인자로 배열을 넘기게 되면 기존의 일반 value를 인자로 넘길때와 달리 사본이 전달되지 않고 배열의 시작 주소가 전달되게 된다 따라서 배열을 인자로 넘기게 되면 함수 내부에서 원본 수정이 가능하기 때문에 조심해야 한다 이때 const를 매개변수 앞에 선언해주면 원본 수정이 불가능한 rodata가 된다 인자로 배열의 이름 (배열의 시작주소)를 넘기기 때문에 함수는 배열의 크기를 알 수 없다 따라서 배열의 크기도 같이 전달해..

C++ 2024.01.26

10. Function (1)

1. What is Function? C++개발을 할 때는 C++ STL의 함수나 클래스, Third-party Library (Unity, Unreal, Cocos2D 등), 직접 만든 함수나 클래스를 사용하여 개발을 한다 함수를 사용하여 기능들을 모듈화 하고 여러 부분에 동일한 기능을 사용해야 할 때 사용하며 이를 통해 크고 복잡한 프로젝트를 관리하기 쉽게 개발 할 수 있다 (디버깅, 가독성 등에 좋다) 함수는 추상화 하는것이 중요하다, 함수 내부의 코드가 어떻게 돌아가는지 상관없이 함수 호출시 함수 이름 의미 그대로 실행되어야 한다 #include #include //standart library 함수를 사용하기 위한 헤더파일 #include //C++에서 수학관련 함수를 사용하기 위한 헤더파일 #..

C++ 2024.01.25

17. Jump Animation

1. Jump Character를 Jump 시키기 위해서 우선 InputAction부터 만들어야 한다 Jump같은 경우에는 InputValue가 눌렀는지 안눌렀는지 bool값만 있으면 되기 때문에 Digital (bool)로 ValueType을 지정해준다 C++에서 만든 InputAction을 넣어주기 위해 변수로 선언을 해주고 Bind할 함수도 선언 해준다 UPROPERTY(EditAnywhere, Category = Input) UInputAction* JumpAction; void Jump(const FInputActionValue& Value); SetupPlayerInputComponent()에서 EnhancedInputComponent로 InputAction에 원하는 함수를 Bind해준다 vo..

Unreal 2024.01.24

16. Anim Instance

1. Anim Instance AnimBP의 Parent Class는 UAnimInstance클래스이다 따라서 C++ Class로 생성하고 싶다면 부모클래스를 UAnimInstance로 지정해야 한다 AnimBP는 게임을 실행하지 않아도 계속해서 Tick이 돌고 있다 (에디터를 실행하지 않아도 AnimBP의 UpdateAnimation 노드는 계속 실행중이다) 이는 C++에서도 마찬가지이다 따라서 nullptr 참조에 굉장히 조심해야 한다 (바로 크래시 발생할 수 있음) 따라서 AnimInstance Class작업시에는 LiveCoding보다 Editor를 닫고 작업하는걸 추천한다 C++에서 다음 이벤트들은 UAnimInstance에서 override하여 사용할 수 있다 #include "CoreMini..

Unreal 2024.01.23
728x90
반응형