Unity 본캠프 6일차 - C# / 미니 프로젝트

한예준·2025년 4월 14일

오늘은 C#에 대한 새로운 강의를 수강하고 연습 프로젝트를 마저 진행해볼 예정이다. 이미 아는 이용은 복습한다고 생각하고 새로 배우는 내용도 정리해보겠다.


C#

C# 언어의 특징

  • 객체 지향 프로그래밍 언어
  • 강력한 형식 시스템, 가비지 컬렉션 기능
  • 다른 언어들과 문법 및 구조적으로 유사함.

.NET 프레임워크

  • 각 언어로 작성한 코드를 중간 언어로 변환
  • 이를 다시 각 환경에 맞는 언어로 변환

Visual Studio

  • Visual Studio 설치 방법, 프로젝트 생성, 솔루션 탐색기 사용법 등 개발에 필요한 기본 세팅과 UI 구성 익히기.

  • 코드 작성 및 실행
    코드를 작성하고 빌드/실행하는 과정


프로그래밍 기본 요소

  • "Hello World"로 구조 이해
    • 기본 코드 구조 및 프로그램의 실행 흐름 확인
  • 출력 기능
    • 콘솔 출력 등 기본적인 출력 방법
  • 주석 처리
    • 코드 내 주석 사용법 (설명 추가 및 디버깅 용이성 향상)
  • 자동 완성 및 보조 기능
    • 개발 생산성을 높이는 기능 활용법

변수와 자료형

  • 기본 자료형 소개
    • 자료형(Data Type)의 정의와 사용 목적
    • 리터럴(Literal)의 개념
      정의: 코드 내에서 고정된 값 자체를 의미한다. 예를 들어, 123, 3.14, "Hello World" 등이 리터럴에 해당한다.
      종류:
      숫자 리터럴: 정수(123), 부동 소수점(3.14), 그리고 다양한 진법(16진수, 2진수 등)을 표현할 수 있다.
      문자 및 문자열 리터럴: 단일 문자('A')와 문자열("Hello World")을 나타낸다.
      불리언 리터럴: truefalse와 같이 논리 값을 직접 표현한다.
      기타: null, 문자 리터럴에서 이스케이프 문자를 사용하는 경우도 있다.
      용도 및 특징:
      리터럴을 사용하면 프로그램 내에서 고정된 값을 직접 할당할 수 있으므로, 변수에 초기 값으로 설정하거나 비교 연산 등에 활용된다.
      컴파일 시점에 값이 결정되며, 값을 변경할 수 없다(불변).
  • 변수 선언 및 초기화
    • 변수 선언 방법과 초기 값 설정
  • 변수 명명 규칙
    • 키워드와 식별자
    • 코드 컨벤션에 따른 네이밍 규칙
  • 형 변환
    • 명시적 형변환 vs. 암시적 형변환
  • 콘솔 입력 처리
    • Console.ReadLine을 사용한 사용자 입력 받기
  • var 키워드 활용
    • 변수의 타입을 암시적으로 지정하는 방법
    • 개념:
      var 키워드는 C# 3.0부터 도입된 기능으로, 컴파일러가 변수의 타입을 초기화 시 할당되는 값에 따라 자동 추론하도록 해준다.
      즉, 변수 선언 시 명시적인 타입을 지정하지 않고, 오른쪽에 오는 값의 타입을 기반으로 변수가 어떤 타입을 가져야 하는지를 결정하게 된다.
      예시:

var message = "Hello, World!";  // message는 string 타입으로 추론됨
var number = 42;                // number는 int 타입으로 추론됨
var pi = 3.14;                  // pi는 double 타입으로 추론됨

코드의 가독성을 높이고, 특히 제네릭 타입이나 복잡한 타입을 다룰 때 선언 코드를 단순화할 수 있다.
타입을 명시적으로 적지 않아도 되므로, 코드 작성 시 편의성이 높아진다.
주의사항:
변수 선언 시 반드시 초기화해야 한다. 초기화 없이 var를 사용할 경우 컴파일러가 타입을 추론할 수 없기 때문이다.
코드 읽는 사람에게 변수의 타입이 바로 보이지 않을 수 있으므로, 지나치게 남용하지 않고 상황에 맞게 사용하는 것이 좋다.


연산자와 문자열 처리

  • 연산자 사용법
    • 산술, 관계, 논리 연산자의 기본 사용법
    • 비트 연산자 소개
    • 복합 대입 연산자와 증감 연산자 사용법
    • 연산자 우선순위에 따른 계산 순서 이해
  • 문자열 처리
    • 문자열 관련 기능 및 메서드 활용 방법

랜덤 타워 디펜스 모작

오늘 남은 시간은 저번주에 이어서 지금까지 진행했던 랜덤 타워 디펜스 모작을 이어서 진행할 것이다. 저번에 두 개의 타워를 합쳐서 업그레이드 하는 시스템까지 구현을 했는데, 오늘은 웨이브에 따라 적의 체력이 올라가는 시스템을 구현하고자 한다.

적 오브젝트 레벨 시스템

  • 먼저, GameManager.cs에서 wave변수를 선언한다.
    public int wave = 1;
  • Enemy.cs에서 Start()함수를 제거하고 Initialize(int wave)함수를 정의한다.
    public void Initialize(int wave)
    {
        maxHealth = 1 + wave * 3;
        currentHealth = maxHealth;
    }
  • EnemySpawner.cs에서 Enemy오브젝트에 있는 Enemy.cs를 불러와서 currentWave 값을 갱신하기 위한 코드를 작성한다.
        enemyObj.GetComponent<Enemy>().Initialize(currentWave);
  • 새로운 wave가 시작될 때마다 wave가 1씩 증가하는 스크립트는 이전에 이미 만들어뒀기 때문에 따로 추가하지 않겠다.
  • 실행결과, 적의 체력이 웨이브에 따라 증가하는 것을 확인할 수 있었다.

오늘은 간단하게 레벨 시스템만 만들도록 하겠다. 내일부터는 발제 때 주어졌던 개인 C# 프로젝트인 TextRPG를 만들어 볼 예정이다. 내일은 C# 2주차 강의를 마저 수강하고, TextRPG의 구조를 미리 구상해보고, 게임의 전체적인 뼈대를 잡는 작업을 해보겠다.

0개의 댓글