Game!

전체 글 (93)

  1. 2022.11.12 [C] C 스타일 파일입출력

    C 스타일 : 자료형 하나씩 저정해도 되지만 보통 구조체로 저장한다. > 한 번에 데이터를 모아서 저장할 수 있어서 C 스타일 파일 입출력을 사용하려면 아래 헤더파일을 추가해야한다 1. 파일에 쓰기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include using namespace std; #define MAX_NAME_LENGTH = 32; struct SAVE_DATA { char arr[MAX_NAME_LENGTH]; int iHp; } void SaveData() { FILE* pWriteFile = nullptr; // 파일 열기 // b : 바이너리 fopen_s..

  2. 2022.10.23 [C] 문자열 상수

    char *test = "abcdef"; 와 char test[] = "abcdef";의 차이점 두 가지의 차이를 이야기 하기에 앞서서 "abcdef"에 대해 짚고 넘어갑시다. "abcdef"란 코드는 컴퓨터가 프로그램을 메모리에 로드할 때 읽기 전용 메모리에 로드되는 문자열 상수입니다. 문자열 상수의 주소란 말이죠. 참고로 읽기 전용 메모리에는 프로그램 코드 라던가 상수가 로드 됩니다. 그럼 돌아와서 문자열 상수 주소를 char *test인 포인터에 넣느냐 아니면 char test[]인 배열에 넣느냐가 차이점 이군요. 둘의 차이는 다음과 같습니다. 1. char *test = "abcdef"; - 포인터에 문자열 상수를 할당합니다. 따라서 문자열을 참조 할 수는 있지만 값을 바꾸지는 못합니다. 문자열이..

  3. 2022.06.20 [UE] UINTERFACE 와 FORCEINLINE

    UINTERFACEC++ 인터페이스인데 언리얼 오브젝트임uclass 매크로를 사용 등.. cdo나 클래스 계층 정보를 가지고 있음   FORCEINLINE길지않은 함수일 경우 인라인으로 써주는게 좋다 ( return bool 같은 한 줄짜리 함수 )크거나 복잡한 태스크를 수행하는 함수의 경우함수 호출의 오버헤드는.. 함수가 실행되는데 걸리는 시간과 비교할 때 중요하지 않다.그러나, 일반적으로 사용하는 작은 함수의 경우함수 호출에 필요한 시간이 실제로 함수 코드를 실행하는데 필요한 시간보다 훨씬 많은 경우가 있다( 배보다 배꼽이 큰 경우 )이로 인해 성능 저하가 일어날 수 있음인라인 함수로 만들게 되면.. 함수 호출이 자체의 내용이 복사본으로 대체되어 함수 오버헤드가 발생하지 않는다.( 함수 내용 자체로 ..

  4. 2022.06.20 [UE] 애니메이션 관련 정리

    BS 는 두 가지가 있다블렌드 스페이스 1D> 분할 기준(축)이 1개블렌드 스페이스 > 분할 기준(축)이 2개 USkeletalMeshComponent> BP 에 붙는 스켈레탈 메시 컴포넌트.> 컴포넌트 내에서 스켈레탈 메시를 적용할 수 있음- BP 로 만들지 않고, C++ 클래스만으로도 사용가능.( C++ 클래스 내부에서만 사용할 경우.. 시각적으로만 안보이는 것 뿐이지, 클래스 내부에 선언된 컴포넌트를 통해 스켈레탈 메시를 적용할 수 있는 거임 )USkeletalMesh> 진짜 스켈레탈 메시 Animation/AnimMontage.h> UAnimMontage 를 가지고 있는 헤더파일UAnimMontage> 애니메이션 몽타주 클래스 이름> 에디터에서는 [메뉴] 애니메이션 ▷ 애님몽타주 생성애니메이션 몽..

  5. 2022.05.30 [UE] 파티클 관련 정리

    ParticleSystem : 실제 파티클 에셋 정보ParticleSystemComponent : 오브젝트에 컴포넌트로 붙는 파티클 정보    ParticleSystemComponent:: SetTemplate > 사용할 파티클을 변경한다  ParticleSystemComponent:: ResetParticles> 파티클 출력 상태를 초기화시킨다

 

C 스타일 : 

자료형 하나씩 저정해도 되지만 보통 구조체로 저장한다.

> 한 번에 데이터를 모아서 저장할 수 있어서

 

C 스타일 파일 입출력을 사용하려면 아래 헤더파일을 추가해야한다

<iostream> 

 

 

1. 파일에 쓰기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
#define MAX_NAME_LENGTH = 32;
 
struct SAVE_DATA
{
    char arr[MAX_NAME_LENGTH];
    
    int iHp; 
}
 
void SaveData()
{
    FILE* pWriteFile = nullptr;
    
    // 파일 열기
    // b : 바이너리
    fopen_s(&pWriteFile, "PlayerData.txt""wb");
 
    SAVE_DATA _save;
 
    // 1. char 배열 저장  
    strcpy_s(_save.arr, sizeof(_save.arr), "불멸의영웅탈론");
 
    // 2. 정수 저장 : 일반 원시 변수
    _save.iHp = 200;
 
    // 파일에 쓰기
    fwrite(&_save, sizeof(SAVE_DATA), 1, pWriteFile);
 
    // 파일 닫기
    fclose(pWriteFile);
    pWriteFile = nullptr;
}
cs

 

 

 

 

2. 파일 읽기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
#define MAX_NAME_LENGTH = 32;
 
struct SAVE_DATA
{
    char arr[MAX_NAME_LENGTH];
    
    int iHp; 
}
 
void LoadData()
{
    FILE* pReadFile = nullptr;
 
    // 파일 열기
    // b : 바이너리
    fopen_s(&pReadFile, "../Data/PlayerData.txt""rb");
 
    if (pReadFile != nullptr)
    {
        SAVE_DATA _save;
 
        // 파일 읽기 : 저장한 구조체와 동일한 자료형 사용해야함
        fread(&_save, sizeof(SAVE_DATA), 1, pReadFile);
 
        // 파일 닫기
        fclose(pReadFile);
        pReadFile = nullptr;
    }
}
cs

 

 

 

 

 

'Language > C++' 카테고리의 다른 글

[BT] 요약  (0) 2023.08.18
[C++] C++ 스타일 파일입출력  (0) 2022.11.12
[C] 문자열 상수  (0) 2022.10.23
[C++] 코드 위치나 정보를 받아오는 매크로 들  (0) 2022.05.08
[C++] 함수 포인터  (0) 2022.05.06

[C] 문자열 상수2022. 10. 23. 17:15

char *test = "abcdef"; 와 
char test[] = "abcdef";의 차이점

두 가지의 차이를 이야기 하기에 앞서서 "abcdef"에 대해 짚고 넘어갑시다. 
"abcdef"란 코드는 컴퓨터가 프로그램을 메모리에 로드할 때 읽기 전용 메모리에 로드되는 문자열 상수입니다. 
문자열 상수의 주소란 말이죠. 
참고로 읽기 전용 메모리에는 프로그램 코드 라던가 상수가 로드 됩니다. 

그럼 돌아와서 문자열 상수 주소를 char *test인 포인터에 넣느냐 아니면 char test[]인 배열에 넣느냐가 차이점 이군요. 둘의 차이는 다음과 같습니다. 

1. char *test = "abcdef";  -   포인터에 문자열 상수를 할당합니다. 
따라서 문자열을 참조 할 수는 있지만 값을 바꾸지는 못합니다. 
문자열이 저장된 메모리가 읽기 전용 메모리 라서 그렇습니다. 
즉 test[2] = 'x'; 구문 처럼 쓰면 에러가 발생합니다. test 변수가 가리키는 문자열이 읽기전용이기 때문입니다.

2. char test[] = "abcdef";  -   문자 배열을 문자열 상수의 크기 만큼 스택에 할당하고 그 내용도 동일하게 복사합니다. 
메모리 상에는 2개의 "abcdef"가 있게되겠군요. 
하나는 읽기 전용 메모리에~ 다른 하나는 스택에~ 이제 test[2] = 'x'와 같이 배열에 있는 값을 변경할 수 있습니다.


결론 --> 문자열 상수를 가리키는 포인터는 그 값을 변경할 수 없다. 대신 문자열 상수로 초기화 한 배열은 사본이 배열에 복사 되므로 변경할 수 있다.

 

 

출처 : https://ingorae.tistory.com/1437

 

UINTERFACE
C++ 인터페이스인데 언리얼 오브젝트임
uclass 매크로를 사용 등.. cdo나 클래스 계층 정보를 가지고 있음

 

FORCEINLINE
길지않은 함수일 경우 인라인으로 써주는게 좋다 ( return bool 같은 한 줄짜리 함수 )

크거나 복잡한 태스크를 수행하는 함수의 경우
함수 호출의 오버헤드는.. 함수가 실행되는데 걸리는 시간과 비교할 때 중요하지 않다.
그러나, 일반적으로 사용하는 작은 함수의 경우
함수 호출에 필요한 시간이 실제로 함수 코드를 실행하는데 필요한 시간보다 훨씬 많은 경우가 있다
( 배보다 배꼽이 큰 경우 )
이로 인해 성능 저하가 일어날 수 있음

인라인 함수로 만들게 되면.. 함수 호출이 자체의 내용이 복사본으로 대체되어 함수 오버헤드가 발생하지 않는다.
( 함수 내용 자체로 치환된다는 것 같음 )

 

* 함수 오버헤드 :
반환을 위해 호출 주소값을 저장하고, 모든 함수 매개변수(지역변수)를 생성 해야하는 일련의 사전 작업들

 

 

 

 

'Engine > Unreal' 카테고리의 다른 글

[UE] 애니메이션 관련 정리  (0) 2022.06.20
[UE] 파티클 관련 정리  (0) 2022.05.30
[UE] 콜리전 관련 정리  (0) 2022.05.30
[UE] UProperty / UFunction  (0) 2022.05.26
[UE] USceneComponent 와 PrimitiveComponent  (0) 2022.05.09

 

BS 는 두 가지가 있다

블렌드 스페이스 1D
> 분할 기준(축)이 1개

블렌드 스페이스 
> 분할 기준(축)이 2개

 

USkeletalMeshComponent
> BP 에 붙는 스켈레탈 메시 컴포넌트.
> 컴포넌트 내에서 스켈레탈 메시를 적용할 수 있음
- BP 로 만들지 않고, C++ 클래스만으로도 사용가능.
( C++ 클래스 내부에서만 사용할 경우.. 시각적으로만 안보이는 것 뿐이지, 클래스 내부에 선언된 컴포넌트를 통해 스켈레탈 메시를 적용할 수 있는 거임 )


USkeletalMesh
> 진짜 스켈레탈 메시

 

Animation/AnimMontage.h
> UAnimMontage 를 가지고 있는 헤더파일

UAnimMontage
> 애니메이션 몽타주 클래스 이름
> 에디터에서는
[메뉴] 애니메이션 ▷ 애님몽타주 생성

애니메이션 몽타주
> 하나의 액션에 여러 애니메이션을 붙이고 싶을 때 사용한다.
( 하나의 애니메이션 몽타주에 하나 이상의 애니메이션 시퀀스를 합친 것 )
- (내 예제 애니메이션에서 그랩/언그랩 애니메이션 몽타주는 애니메이션이 1개만 있음.)

* 애니메이션 몽타주 생성 방법 
애니메이션 시퀀즈에서 오른쪽 마우스 클릭해서 몽타주 생성 하면 된다.

ACharacter:: PlayAnimMontage
> 캐릭터 메시에서 애니메이션 몽타주를 재생합니다
- 반환값 : 애니메이션 몽타주 의 원본 길이 float. scale 등을 무시한 원본 값을 반환

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Engine > Unreal' 카테고리의 다른 글

[UE] UINTERFACE 와 FORCEINLINE  (0) 2022.06.20
[UE] 파티클 관련 정리  (0) 2022.05.30
[UE] 콜리전 관련 정리  (0) 2022.05.30
[UE] UProperty / UFunction  (0) 2022.05.26
[UE] USceneComponent 와 PrimitiveComponent  (0) 2022.05.09

 

 

ParticleSystem : 실제 파티클 에셋 정보
ParticleSystemComponent : 오브젝트에 컴포넌트로 붙는 파티클 정보 

 

 

 

ParticleSystemComponent:: SetTemplate 

> 사용할 파티클을 변경한다

 

 

ParticleSystemComponent:: ResetParticles

> 파티클 출력 상태를 초기화시킨다

 

 

 

'Engine > Unreal' 카테고리의 다른 글

[UE] UINTERFACE 와 FORCEINLINE  (0) 2022.06.20
[UE] 애니메이션 관련 정리  (0) 2022.06.20
[UE] 콜리전 관련 정리  (0) 2022.05.30
[UE] UProperty / UFunction  (0) 2022.05.26
[UE] USceneComponent 와 PrimitiveComponent  (0) 2022.05.09