Unity-2.C# 프로그래밍

CHO WanGi·2024년 3월 25일

Unity

목록 보기
2/13

변수

값을 저장하는 장소,
데이터 타입, 변수, 할당할 값, 세미콜론

int gold = 1000;

int, float,boolean, string 등등

함수(메서드)

미리 지정된 동작을 수행하는 코드 묶음

public class Animal
{
    public string name;
    public string sound;

    public void Playsound () {
        Debug.Log(name + ":" + sound);
    }
}

입력이 필요하다면 파라미터를, 출력이 필요하다면 return 키워드를 사용
함수 역시 반환값의 타입을 명시해야함
void, int, float, string... etc

주의점

Unity 에서 C# script를 추가하여 파일명 변경시 주의가 반드시 필요.
C# script의 파일 명을 클래스 명으로 자동 반영.
생성후 이름 변경시 수동으로 일일히 바꾸어 주어야 하기 때문에 주의가 필요함.

using

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

public class Zoo : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Animal tom = new Animal();
        tom.name = "Tom";
        tom.sound = "야옹";

        Animal jerry = new Animal();
        jerry.name = "Jerry";
        jerry.sound = "찍찍";

        tom.Playsound();
        jerry.Playsound();

    }
}

사용할 라이브러리의 경로를 지정, 해당 라이브러리 내 코드를 가져와서 사용 가능

Start

코드 실행이 시작되는 시발점을 제공
게임 시작시 자동으로 한번 실행되는 메서드(대표적 유니티 이벤트 메서드)

-> 스크립트는 오브젝트에 추가해야 사용 가능

변수

  • float 타입 사용시 숫자뒤엔 f 붙이기 필수
float height = 179.9f;

배열

나열된 여러값을 하나의 변수로 다룰 수 있는 타입.

// 5칸짜리 배열 생성
int[] student = new int[5]

클래스

객체지향?

사람이 보는 것과 최대한 가깝게.

클래스

표현하고자 하는 대상을 추상화하여 대상과 관련된 변수와 메서드를 정의

오브젝트

실제로 존재하는 실체, 즉 하나의 클래스로 여러 오브젝트 생성이 가능
이렇게 클래스를 통해 생성된 하나의 객체를 인스턴스 라고 함.

//Animal.cs

public class Animal
{
    public string name;
    public string sound;

    public void Playsound () {
        Debug.Log(name + ":" + sound);
    }
}

// Zoo.cs
public class Zoo : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Animal tom = new Animal();
        tom.name = "Tom";
        tom.sound = "야옹";

        Animal jerry = new Animal();
        jerry.name = "Jerry";
        jerry.sound = "찍찍";

        tom.Playsound();
        jerry.Playsound();

    }
}

new 연산자로 인스턴스를 생성함.
Animal() 메서드로 Animal 클래스의 생성자를 실행하여 인스턴스 생성

  • 멤버
    오브젝트 내부의 변수나 메서드

  • 필드
    멤버중 변수
    Animal 클래스의 name, sound가 필드

  • 접근 제한자
    pubilc, private, protected 가 존재
    public으로 설정시, 추후 오브젝트에 추가하면 유니티 에디터의 Inspector에서 수정 가능.

참조 타입

참조타입의 변수는 실체화된 옵젝이 아님.
변수 선언만으로는 생성이 되지 않아 new 생성자로 개별적 생성이 필수

따라서 위에 tom 변수는 오브젝트(인스턴스) 그 자체가 아닌 Animal 오브젝트로 향하는 참조값.

void Start()
    {
        Animal tom = new Animal();
        tom.name = "Tom";
        tom.sound = "야옹";

        Animal jerry = new Animal();
        jerry.name = "Jerry";
        jerry.sound = "찍찍";
        
        // 변경
        jerry= tom;
        jerry.name = "미키";

        tom.Playsound();
        jerry.Playsound();

    }

jerry의 name 필드만 변경했음에도,
tom의 name 필드까지 변경

  • 이유
    jerry=tom; 실행을 통해서 모든 멤버 변수의 값이 tom의 모든 멤버 변수의 값으로 덮어써지는 것이 아님.

jerry에 할당된 참조값을 tom에 할당된 참조값을 덮어씌움
즉, jerry에 할당된 참조값이 tom에 참조값으로 변경.

jerry는 Animal로 생성한 인스턴스가 아닌, tom이 가르키던 인스턴스로 변경

따라서 동일한 하나의 인스턴스를 가리키며, 이를 수정해버렸기 때문에 둘다 이름이 변경되었던 것.

따라서 분신(필드)를 수정하면 실제로는 분신의 본체인 오브젝트가 수정

Class, 컴포넌트, C#script(Monobehavior 상속 받는 것)이 바로 참조타입

profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글