spawner 클래스 작성

Tutorial

Beginner

+10XP

30 mins

(16)

Unity Technologies

 spawner 클래스 작성

이 튜토리얼에서 배울 내용은 다음과 같습니다.

  • 클래스의 목적을 파악합니다.
  • 클래스 작성을 통해 더 효율적인 코딩을 수행합니다.
  • 클래스에 사용되는 특별한 함수를 추가 및 검토합니다.
  • 클래스 변수를 초기화합니다.
  • 콘솔에서 스크립트 변경 사항을 확인합니다.


이번 튜토리얼을 마치면 크리에이터 키트: 코딩의 기초 게임에서 물약을 생성하는 클래스를 직접 만들 수 있습니다.

Languages available:

1. 클래스를 사용해 더 효율적인 코드 만들기

클래스의 작동 방식을 살펴보았으니 이제 SpawnerSample 스크립트에서 클래스를 작성할 수 있습니다. 클래스를 활용해 더 효율적으로 코드를 작성하고 유사한 함수를 그룹화할 수 있습니다. 게임 코드를 작성할 때 매우 중요한 부분으로, 필요한 기능과 플레이어 경험을 구현하는 패턴을 알아내 적용해야 합니다.

먼저 이미 학습한 내용을 바탕으로 체력 물약에 필요한 각도 값을 계산하는 클래스를 작성해 보겠습니다.

2. 클래스 선언 작성

먼저 클래스 선언을 추가합니다. SpawnerSample 스크립트 파일에서 SpawnerSample 클래스의 닫는 중괄호 뒤에 다음과 같은 클래스를 추가합니다.

public class LootAngle
{
}

public 키워드와 함수에 대해서는 다음 튜토리얼에서 더 알아보겠습니다.

3. 데이터 유형 식별

이제 이 함수로 제어하려는 작업을 처리하는 데 필요한 데이터 유형을 식별해야 합니다. 먼저 만들고자 하는 클래스의 목적에 대해 생각해 보겠습니다.

이 클래스는 물약이 생성되는 위치의 각도 값을 일정한 순서에 따라 계산해야 합니다. 이를 위해 저장해야 하는 정보는 다음과 같습니다.

  • 현재 물약의 각도(n)
  • 새로운 물약이 생성되는 위치마다 추가해야 하는 각도(x°)

이를 바탕으로 방정식을 세우면 다음과 같습니다.

새로운 물약의 위치 = n + x°

4. 필요한 데이터에 대한 변수 선언

새 클래스 LootAngle에서 방정식에 사용할 데이터를 저장할 정수로 이루어진 변수 두 개를 선언합니다.

1. 현재 물약의 각도(angle이라고 칭함)

2. 다음 물약에 추가할 각도(step이라고 칭함)

5. 변수 선언 확인

새로 작성한 LootAngle 클래스는 다음과 같아야 합니다.

public class LootAngle
{
    int angle;
    int step;
}

모든 명령어는 세미콜론으로 끝나야 컴파일러가 개별 명령어로 인식할 수 있습니다.

6. 함수 추가

마지막으로 다음에 사용할 각도 값을 계산하는 함수를 추가해야 합니다.

LootAngle 클래스에 다음 함수를 추가합니다.

public class LootAngle
{
    int angle;
    int step;
    
    int NextAngle()
    {
        int currentAngle = angle;
        angle = Helpers.WrapAngle(angle + step);
        
        return currentAngle;
    }
}

7. 함수 검토

지금까지 해 온 것과 마찬가지로, 이미 알고 있는 내용을 활용하여 이 함수의 주요 정보를 식별하고 스크립트의 각 부분이 어떤 작업을 수행할지 생각해 보세요.

함수를 자세히 살펴보겠습니다.

1.

int NextAngle()

이 함수의 유형은 void가 아니라 int입니다. 함수가 무언가를 실행할 뿐만 아니라 결과(새로운 물약의 각도)를 반환하기 때문입니다.

여기서 코드는 NextAngle 함수가 정수(int) 값을 반환한다고 컴파일러에 알립니다. 기존에 사용한 함수에서는 계산은 이루어지나 결과를 반환하지 않았기 때문에 void('아무것도 없음')를 사용했습니다.

2.

        int currentAngle = angle;

이 명령어는 currentAngle이라는 새 변수에 현재 각도를 저장합니다.

3.

        angle = Helpers.WrapAngle(angle + step);

다음 명령어는 새로운 물약의 각도를 계산하여 변수 angle에 다시 저장합니다. WrapAngle 함수는 미리 작성된 함수이며, 0°에서 360° 사이의 각도 값을 저장할 수 있습니다.

4.

        return currentAngle;

이 명령어는 원래 각도(순서대로 진행되기 전)를 호출자에게 반환합니다. 함수는 return 키워드의 오른쪽에 있는 값을 반환합니다.

8. 함수의 계산 검토

방정식을 푸는 함수에 대해 잠시 알아보겠습니다.

public class LootAngle
{
    int angle;
    int step;
    
    int NextAngle()
    {
        int currentAngle = angle;
        angle = Helpers.WrapAngle(angle + step);
        
        return currentAngle;
    }
}


이 함수는 증가 값(step)을 현재 각도에 더하여 새로운 물약의 위치를 계산해야 합니다. angle = 0step = 45로 시작해 보겠습니다.

함수를 처음 호출하면 다음과 같은 결과가 나옵니다.

1. currentAngle에 0을 저장합니다.

2. angle 값을 0 + 45 = 45로 변경합니다.

3. 0을 반환합니다.



함수를 두 번째로 호출하면 다음과 같은 결과가 나옵니다.

1. currentAngle에 45를 저장합니다.

2. angle 값을 45 + 45 = 90으로 변경합니다.

3. 45를 반환합니다.



이렇게 호출될 때마다 동일한 프로세스를 진행합니다.

9. angle 및 step 변수 초기화

이제 거의 마무리되었습니다. 이제 남은 학습 내용은 anglestep 변수를 초기화하는 것입니다.

방금 컴퓨터에 LootAngle 클래스가 메모리에 이 두 개의 변수 값을 위한 공간을 예약해야 한다고 알렸지만 변수에 값을 할당하지는 않았습니다. 기본적으로 이 값은 0으로 설정됩니다.

Init이라는 함수를 작성해 이 값들을 작성자가 부여한 파라미터로 초기화할 수도 있으나, 클래스에는 생성자라고 하는 매우 유용한 기능이 있습니다.


생성자의 기능을 살펴보겠습니다.

1. SpawnerSample 스크립트에서 Start 함수 상단(첫 번째 SpawnPotion 호출 위)에 새 줄을 삽입합니다.

2. 다음 명령어를 추가합니다.

LootAngle myLootAngle = new LootAngle();


특정 클래스 유형의 새 변수를 어떻게 작성하는지 되짚어 보겠습니다. 유형 이름 다음에 함수와 같은 두 개의 소괄호가 오는데, 이 유형 이름이 실제로는 생성자인 함수이기 때문입니다.

10. 생성자에 대한 파라미터 작성

생성자는 클래스와 이름이 동일하며 그 앞에 아무 유형도 작성되어 있지 않은(예: void) 특별한 함수입니다. 컴파일러는 기본적으로 아무것도 하지 않는 숨겨진 생성자를 만듭니다. 직접 작성한 생성자에는 특정한 파라미터를 부여할 수 있습니다.

생성자를 직접 만드는 과정은 다음과 같습니다.

1. SpawnerSample 스크립트에서 LootAngle 클래스를 찾습니다.


2. angle 및 step 변수를 초기화하는 명령어 아래에 다음 코드를 추가합니다.

LootAngle(int increment)
{
    step = increment;
    angle = 0;
}



3.
작성한 클래스를 다음의 완성된 버전과 비교하여 확인합니다.

public class LootAngle
{
    int angle;
    int step;

    LootAngle(int increment)
    {
        step = increment;
        angle = 0;
    }
    
    int NextAngle()
    {
        int currentAngle = angle;
        angle = Helpers.WrapAngle(angle + step);
        
        return currentAngle;
    }
}


이제 생성자는 NextAngle 함수가 호출될 때마다 값이 증가하는 하나의 파라미터를 사용합니다. 이는 step 변수에 저장되며 angle 변수는 0으로 초기화됩니다.


4. SpawnerSample 스크립트의 Start 함수로 돌아가서 LootAngle 변수 생성 명령어를 다음과 같이 수정합니다.

LootAngle myLootAngle = new LootAngle(45);



이렇게 해서 첫 번째 클래스를 작성하고 클래스로 변수를 만드는 과정이 완료되었습니다.

11. Start 함수 업데이트

사용할 클래스를 직접 작성했으며, 스크립트를 업데이트한 다음 사용할 수 있습니다.

LootAngle 생성자 클래스를 사용하도록 스크립트를 조정합니다.

1. SpawnerSample 스크립트에서 Start 함수를 찾습니다.

2. Start 함수 안에 있는 명령어를 다음과 같이 바꿉니다.

LootAngle myLootAngle = new LootAngle(45);

//모든 호출 시 각도가 추가됨
SpawnPotion(myLootAngle.NextAngle());
SpawnPotion(myLootAngle.NextAngle());
SpawnPotion(myLootAngle.NextAngle());
SpawnPotion(myLootAngle.NextAngle());


3.
스크립트 변경 사항을 저장합니다.

12. 변경 사항 테스트

에디터에서 변경 사항을 테스트하는 것은 항상 중요합니다.

1. Unity 에디터로 돌아가서 콘솔 창을 확인합니다.


2. CS0122 오류가 5건 발생한 내용이 표시될 것입니다.

이 오류는 보호 수준으로 인해 함수에 액세스할 수 없음을 의미합니다.

LootAngle.NextAngle()은 직접 작성한 함수입니다. LootAngle.LootAngle은 LootAngle 클래스에 포함된 LootAngle이라는 함수로서, 직접 작성한 생성자입니다.

왜 액세스가 불가능한지 궁금하신가요? 다음 튜토리얼에서 public 키워드와 이러한 함수에 액세스하는 방법을 알아보겠습니다.

13. 튜토리얼 요약

이 튜토리얼에서 학습한 내용은 다음과 같습니다.

  • SpawnerSample 스크립트에서 커스텀 클래스를 작성했습니다.
  • 생성자를 사용하여 파라미터를 초기화했습니다.
  • Unity 에디터에서 변경 사항을 테스트하고 보호 수준 오류를 식별했습니다.


다음 튜토리얼에서는 보호 수준 오류를 수정하고 public 키워드에 대해 자세히 알아보겠습니다. 또한 상속의 개념과 이를 활용하여 더 효율적인 코드를 작성하는 방법을 살펴보겠습니다.

Complete this Tutorial