멋쟁이사자처럼/유니티 게임 개발 3기

[멋쟁이사자처럼 부트캠프 TIL 회고] 유니티 게임 개발 3기 10일차

MaterialStone 2024. 12. 2. 17:59
namespace UnityGameDevelopment.Day10 {
    public class Outline {
    	public static string Chapter1 = "진법 변환";
        public static string Chapter2 = "LINQ 기초";
    }
}

 

 

1. 진법 변환

10진수에서 2진수로의 변환과 2진수에서 10진수로의 변환에 대해 알아봅니다.

 

2진수에서 10진수로 변환하기

2진수를 10진수로 변환하는 방법은 2의 "자리수-1"승을 그 자리의 수(0 또는 1)와 곱하여 전부 더하여 구하는 방법이 있습니다.

 

2진수 1001을 10진수로 변환해보겠습니다.

자리의 수 1 1 0 1
자리수 값 2의 3승 2의 2승 2의 1승 2의 0승
자리수 값 8 4 2 1

 

각 자리의 수와 해당 자리수 값을 각각 곱해서 모두 더해주면 10진수 표현이 됩니다.

10진수에서 2진수로 변환하기

아래 표는 10진수 13을 2진수로 변환하는 과정입니다.

 

계산 나머지
13 / 2 = 6 1
6 / 2 = 3 0
3 / 2 = 1 1
1 / 2 =  0 1

 

처음엔 변환할 값을 2로 나누어 몫과 나머지를 계산합니다. 구한 몫을 다시 2로 나누어 몫과 나머지를 계산합니다. 이 과정을 몫이 0이 될 때까지 반복합니다.

 

마지막으로 아래에서 위로 순서대로 나머지에 해당하는 값을 읽으면 2진수 표현이 됩니다.

10진수 13에 대한 나머지들을 나열해보면, 1101이 되어 10진수 13은  2진수 1101임을 알 수 있습니다.

2. LINQ 기초

LINQ에는 배열이나 리스트의 값을 종합하는 함수들이 있어서 이들을 사용하면 더욱 쉽고 효율적으로 코드를 작성할 수 있습니다.

LINQ를 사용하려면 아래와 같은 코드를 스크립트에 추가해야합니다.

using System.Linq;

Max 함수

Max 함수는 배열이나 리스트의 값 중 가장 큰 값을 반환하는 함수입니다.

int[] playerScores = { 10, 20, 30 };

int maxScore = playerScores.Max();

 

Average 함수

Average 함수는 배열이나 리스트의 값의 평균을 구하는 함수입니다.

int[] playerScores = { 10, 20, 30 };

double averageScore = playerScores.Average();

 

Contains 함수

Contains 함수는 배열이나 리스트에 값이 있는지 확인하는 함수입니다.

int[] playerScores = { 10, 20, 30 };

bool hasTwenty = playerScores.Contains(20);

 

실습 및 응용

▶ 2차원 배열을 사용해서 랜덤 맵 생성하기

먼저 2차원 배열을 선언합니다. 그리고 씬에 배치할 큐브 프리팹과 구 프리팹을 에디터에서 받아옵니다.

int[,] mapTiles = new int[10, 10];
public GameObject cubeObject;
public GameObject sphereObject;

 

반복문으로 장애물 혹은 길에 해당하는 값을 랜덤하게 넣어줍니다.

for (var x = 0; x < mapTiles.GetLength(0); x++)
{
    for (int y = 0; y < mapTiles.GetLength(1); y++)
    {
        mapTiles[x, y] = Random.value > 0.8f ? 1 : 0;
    }
}

 

80%의 확률로 장애물로 설정합니다.

for (int x = 0; x < mapTiles.GetLength(0); x++)
{
    for (int y = 0; y < mapTiles.GetLength(1); y++)
    {
        Instantiate(mapTiles[x, y] == 1 ? cubeModel : sphereModel, new Vector3(x, 0, y), Quaternion.identity);
    }
}

결과

 

구를 큐브로 바꾸고 머티리얼을 투명하게 만들어서 맵을 생성한 결과입니다.