1. 정의
- C#으로 작성된 코드 파일
- 게임 오브젝트에 컴포넌트 형태로 붙여 동작 제어
: 캐릭터 움직임, 입력 처리, AI, UI 반응, 물리 작용 등 모든 게임 로직과 동작 제어하는 핵심 요소
- 컴포넌트 기반 구조
: MonoBehaviour 클래스를 상속받아 컴포넌트처럼 오브젝트에 붙임
: Update(), Start() 같은 이벤트 함수를 구현해 게임 동작 생성
2. 유니티에서 만드는 방법
1) Script 라는 이름의 빈 폴더 생성
- 폴더 내에서 Create > MonoBehavior Script 생성
2) Script 파일 열기
(1) using UnityEngine;
- 유니티 엔진 기본 기능을 사용하기 위해 반드시 포함해야하는 네임스페이스
(2) 클래스
- class [클래스명] : MonoBehavior
: MonoBehavior를 상속 받아 유니티 게임 오브젝트에 붙일 수 있는 스크립트 컴포넌트가 됨
: 클래스명은 스크립트 파일명이랑 동일해야함
(3) 매서드
: 다양한 간격으로 동작을 정의할 수 있는 코드 섹션
- void Start()
: 게임이 실행(씬 시작)되고 해당 스크립트가 활성화된 후 한 번만 호출하는 초기화 함수
: 오브젝트가 처음 생성될 때 필요한 초기 설정을 하는 부분
: Awake() 메서드가 호출된 뒤 다음 프레임에서 호출
: 스크립트가 꺼졌다가 다시 켜질 때는 호출되지 않음(이 때는 OnEnable() 호출)
: Awake()와 달리 다른 커모넌트나 오브젝트가 초기화된 상태에서 실행하기 때문에 다른 오브젝트 참조 같은 작업에 적합
- void Update()
: 게임 실행 중에 매 프레임마다 호출되는 함수
: 플레이어의 입력 처리, 움직임 계산, 애니메이션 조작 등 반복적인 체크 / 갱신이 필요한 작업에 사용
: 프레임속도(FPS)에 따라 호출횟수 변동(FPS가 높으면 더 자주 호출)
: 게임의 메인 루프 역할 수행
: 무거운 작업을 넣게 되면 프레임 드랍 현상 발생 가능성 있음
: 시간에 민감한 물리 연산은 FixedUpdate()에서 처리하는게 좋음
3) 변수 선언하기
(1) SerializeField
: private / protected로 선언된 변수라도 에디어틔 인스펙터 창에 노출해 수정 가능하게 하는 특성(Attribute)
(기본적으로는 public 변수만 인스펙터에서 보이기에 public 변수만 값 조정 가능)
: 보안 / 캡슐화를 지켜 변수 접근을 제한하면서 인스펙터에서 편하게 값 조정 가능
: 캡슐화를 유지해 코드 안정성 높임
: 에디터에서 빠르게 값 테스트 / 튜닝 가능
* 직렬화(Serialize)
1) 정의
- 데이터를 저장하거나 전송할 수 있는 일정한 형식(ex. 텍스트 / 바이트 배열)으로 변환하는 과정
- 게임에서 만든 데이터를 파일 저장 / 네트워크로 주고받기 / 에디터에서 값 유지하기 위해 사용
2) 역할
- 인스펙터 창의 변수 값 저장 및 호출
- 씬 저장, 프리팹 저장, 게임 실행 중 상태 저장
- SerializeField나 public 변수: 기본적으로 직렬화되어 인스펙터에서 값 조정 가능
(2) SerializeField 없이 선언도 가능
: SerializeField가 붙지 않았기에 기본적으로 private 접근 제한자로 선언된 변수
: 인스펙터에서 해당 변수 확인 불가
(3) 오브젝트를 변수로 선언
: 씬에 존재하는 특정 오브젝트 / 프리팹을 가리키는 참조 저장
: 변수에 할당된 오브젝트 조작(ex. 컴포넌트 접근, 위치 변경, 활성화 / 비활성화) 가능
: 오브젝트의 참조 주소가 메모리에 저장됨
→ 여러 오브젝트 가리킴 가능 / 변수 변경 시 해당 오브젝트에 영향
: 변수 미할당 시 NullReferenceException 오류 발생
4) 에디터에서 빈 객체를 만들어 스크립트 배치
- 빈 객체를 만들어 ScriptHolder라고 이름 지어준 뒤 Script를 드래그&드롭
: SerializeField된 변수는 Inspector 안에 들어오지만 SerializeField를 붙이지 않은 변수는 없음
5) 스크립트에서 매서드 정의
(1) void Start() 에서 변수 초기화
- myNumber를 4로 설정
- myName을 "UDantaeng" 으로 설정
- myChoice를 true로 설정
- myGate라는 게임오브젝트 활성화
- 저장 후 에디터로 돌아가서 Inspector안의 myGate변수에 오브젝트 할당
: 변수로 설정하면서 스크립트를 실행할 때 Gate로 생성한 오브젝트를 참조해 씬에서 조작하거나 보일 수 있음
- Start()에서 설정한 변수의 초기화 내용이 씬 실행 시 Inspector 에 반영
- 조건문 가능
: myNumber를 4로 설정했을 때
: myNumber를 5로 설정했을 때
(2) void Update()
- Inspector에서 실시간으로 값 변경 가능
: 조건문을 통해 myNumber를 4로 설정했을 때와 아닐 때의 myName 출력을 다르게 해보기
: myNumber가 4인 경우와 아닐 경우의 myName 차이
: 실행 중일 때 값을 변경할 경우, 변경된 값이 바로 적용됨
참고영상
https://www.youtube.com/watch?v=fheKzs9F8_U&list=PLZ1b66Z1KFKhO7R6Q588cdWxdnVxpPmA8&index=7
'Unity🎮 > 실습' 카테고리의 다른 글
UI: 캔버스 (1) | 2025.07.09 |
---|---|
Scene에 캐릭터 가지고 오기 (3) | 2025.07.09 |
애니메이션 (1) | 2025.07.08 |
충돌 처리: Collider 와 Gravity (2) | 2025.07.08 |
카메라 (0) | 2025.07.07 |