Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

Seonho Cha의 블로그

C#의 함수와 클래스 (unity) 본문

유니티 공부

C#의 함수와 클래스 (unity)

Aaron Cha 2022. 9. 30. 22:49

골드메탈님의 영상을 보며 열심히 유니티를 공부하던 중 특히 저에게 어려웠던 부분은 C#과 클래스 였던 것 같습니다. 

 

https://www.youtube.com/watch?v=j6XLEqgq-dE&list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2&index=5 

 

C#의 경우 제가 기존 전공 수업을 통해 배웠던 C++과 유사한 부분이 많아서 조금은 배우기 편했는데요. 기본적인 변수, 연산자, 조건문, 반복문, 등은 위의 골드메탈님 영상을 통해 차근차근 해보시면 금방 배우실 수 있으실 거에요!

 

저의 경우 앞서 전공과목 중 배운 C++에서 함수와 클래스를 깊게 다루지 않아 공부 했었던 것을 두고두고 보고 싶어서 이 게시글을 작성하는 것이니 참고해 주세요!

 

가장 먼저 유니티 내부에서 C# 스크립트 하나를 만들어 주세요.

 

1. 함수 (메소드)

 

함수는 두 가지 타입으로 나누어 볼 수 있습니다.

 

바로 리턴 값이 없는 void형과 리턴 값이 있는 int, float.... 형 등등 이 있는데요.

이 게시글에서는 void 형으로 다루어 보겠습니다. 

 

아래의 예시 코드는 삼성 주식 게임을 다루었다고 생각해봅시다.

 

전역 변수로 주식의 현재가를 선언하고 Start 함수 내의 StockPriceRising 함수가 실행됩니다. 

이후 void로 선언된 StockPriceRising 함수가 실행되고 현재가가 10,000원 오른 것을 확인 하실 수 있습니다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
    int SamsungStockPrice = 60000;  //삼성 주식 가격을 초기 60,000원으로 설정, 전역 변수 (멤버 변수)로 선언.

    void Start (){
        StockPriceRising(); // 함수를 실행
    }

    void StockPriceRising(){
   
    SamsungStockPrice+=10000; // 현재 삼성 주가 + 10,000원
    Debug.Log("주식 가격이 10,000원 올랐습니다."+SamsungStockPrice); // 유니티 콘솔 창에 현재 주가 표시

}
   
}
 
 

 

이처럼 함수는 여러개의 함수를 만들어 코드를 간략화 시킬 수 있고 비슷한 로직은 계속해서 불러와 쓸 수 있다는 장점이 있습니다.

 

2. 클래스

 

public class NewBehaviourScript : MonoBehaviour

 

우선 unity내부에서 C# 스크립트를 생성하고 바로 볼 수 있는 것이 위와 같은 클래스입니다. 사실 저도 아직 클래스에 대한 개념 자체가 제대로 서지 않는데요.  보통은 클래스를 붕어빵 틀에 비유하고 거기서부터 나온 객체를 붕어빵에 비교하던데 혹여 C#과 같은 객체 지향 프로그래밍 언어에서 객체지향에 대해 궁금증이 생기신 분은 구글링을 통해 자세한 정보를 얻으실 수 있습니다!

 

class : 클래스를 만들 때 사용하는 키워드
 
unity에서는 하나의 클래스는 하나의 파일에 대응합니다. 이를 꼭 기억하도록 합시다.
 
위에서 저희는 삼성 주식 게임을 만들려고 NewBehaviourScript 라는 C# 스크립트를 unity에서 생성했었는데요, 하나의 파일은 하나의 클래스에 대응하기 때문에, 우리는 새로운 파일 하나를 더 만들 것 입니다. unity 내부에서 STOCK이라는 C#스크립트를 하나 더 생성해 주세요.
 
이번에는 주식 게임에 SK도 추가해 보겠습니다.
 
먼저 STOCK 파일에
 
public class STOCK{

public string STOCKname; // public 절대 까먹지 말기!
public string STOCKtype;
public int STOCKprice;

}
 
 
이렇게 코드를 작성해 주세요.
 
여기서 우리는 public 을 통해 NewBehaviourScript 에서도 변수를 사용할 수 있게 하여야 합니다.
 
그리고 다시 NewBehaviourScript 로 돌아와 삼성 주식 게임 코드에서 아래와 같이 Start함수에 추가로 작성해 주세요.
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    int SamsungStockPrice = 60000;  //삼성 주식 가격을 초기 60,000원으로 설정, 전역 변수 (멤버 변수)로 선언.

    void Start (){
        StockPriceRising(); // 함수를 실행

    STOCK SKSTOCK = new STOCK();   //  인스턴스화, 정의된 클래스를 실체화 하는 과정
    SKSTOCK.STOCKname="SK";
    SKSTOCK.STOCKprice=200000;
    SKSTOCK.STOCKtype="KOSPI";

    Debug.Log("주식의 이름은 "+SKSTOCK.STOCKname + " 주식의 종류는 "+SKSTOCK.STOCKtype+" 주식의 가격은 "+SKSTOCK.STOCKprice);

    }

    void StockPriceRising(){
   
    SamsungStockPrice+=10000; // 현재 삼성 주가 + 10,000원
    Debug.Log("주식 가격이 10,000원 올랐습니다."+SamsungStockPrice); // 유니티 콘솔 창에 현재 주가 표시

}
   
}
여기서 중요한 과정은 정의된 클래스를 위의 코드 처럼 인스턴스화 시켜주는 것이 중요합니다.
 
이 코드를 unity 내부에서 실행 시켜보면
 
 

이와 같은 결과를 얻을 수 있습니다.

 

어찌보면 STOCK이라는 붕어빵 틀로 SKSTOCK이라는 붕어빵을 만들어냈다고 할 수 있겠네요.

 

자, 다음은 상속에 대해 알아보겠습니다.

 

이번에도 새로운 C#스크립트를 만들어 주세요. 이름은 STOCK2로 하겠습니다.

STOCK2에서 아래와 같이 코드를 작성해 보겠습니다.

 

public class STOCK2 : STOCK
{
   
}
보시다 시피 클래스 선언 이외에는 아무것도 없는 모습을 보실 수 있는데요, 저희는 지금부터 STOCK 클래스를 

STOCK2 클래스로 상속 시켜 줄 것입니다.

다시 NewBehaviourScrip 로 돌아와서 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

 

public class NewBehaviourScript : MonoBehaviour
{
    int SamsungStockPrice = 60000;  //삼성 주식 가격을 초기 60,000원으로 설정, 전역 변수 (멤버 변수)로 선언.

 

    void Start (){
        StockPriceRising(); // 함수를 실행

 

    STOCK2 SKSTOCK = new STOCK2();   //  여기만 STOCK을 STOCK2로 변경하면 상속 완료!!
    SKSTOCK.STOCKname="SK";
    SKSTOCK.STOCKprice=200000;
    SKSTOCK.STOCKtype="KOSPI";

 

    Debug.Log("주식의 이름은 "+SKSTOCK.STOCKname + " 주식의 종류는 "+SKSTOCK.STOCKtype+" 주식의 가격은 "+SKSTOCK.STOCKprice);

 

    }

 

    void StockPriceRising(){
   
    SamsungStockPrice+=10000; // 현재 삼성 주가 + 10,000원
    Debug.Log("주식 가격이 10,000원 올랐습니다."+SamsungStockPrice); // 유니티 콘솔 창에 현재 주가 표시

 

}
   
}

 클래스를 인스턴스화 시키는 과정에서 STOCKSTOCK2로만 바꿔 주겠습니다.

( STOCK2 SKSTOCK = new STOCK2();   //  여기만 STOCK을 STOCK2로 변경하면 상속 완료!!)

 

분명 STOCK2스크립트에서는 아무런 코드가 작성되지 않았는데 여러분은 아래와 같은 결과를 보실 수 있습니다. 

 

 

이처럼 상속을 이용하면 부모 클래스의 코드 내용을 쉽게 자식 클래스로 넘겨줄 수 있습니다.

 

유니티에서 스크립트를 최초 실행했을 때 나오는 아래의 코드도 바로 클래스 상속입니다.

 

public class NewBehaviourScript : MonoBehaviour

 

MonoBehaviour라는 클래스를 NewBehaviourScript가 상속한 것이죠! 

(MonoBehaviour는 유니티 게임 오브젝트의 클래스 입니다!)

 

이만 글 마치겠습니다.

감사합니다.