07/14 Unity C# 기초 스크립팅과 컴포넌트

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!

댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!

Awake()와 Start() 차이
| 구분 | Awake | Start |
|---|---|---|
| 호출 시점 | 오브젝트 초기화 시 | 첫 프레임 실행 직전 (Update 실행 직전) |
| 호출 순서 | Start보다 먼저 | Awake 이후 |
| 주요 용도 | 내부 초기화, 참조 설정 | 다른 오브젝트를 이용한 초기화 |
| 호출 횟수 | 한 번 | 한 번 |
| 스크립트 비활성화 | 호출 가능 | 활성화될 때 호출 |
Awake → OnEnable → Start → Update
Awake와 Start의 차이
Awake - 게임 오브젝트가 생성될 때, 즉시 호출됨.
Start - 생성된 다른 오브젝트의 컴포넌트에 참조하기 위해서 생성 이후에 실행됨
OnEnable / OnDisable| 메서드 | 호출 시점 | 주요 용도 |
|---|---|---|
OnEnable() | 오브젝트와 컴포넌트가 활성화될 때 | 이벤트 등록, 기능 시작, 상태 초기화 |
OnDisable() | 오브젝트 또는 컴포넌트가 비활성화될 때 | 이벤트 해제, 기능 중지, 자원 정리 |
Update / LateUpdate / FixedUpdate
-> 업데이트 호출 순서 : FixedUpdate/Update/LateUpdate
| 메서드 | 호출 시점 | 주요 용도 |
|---|---|---|
Update() | 매 프레임마다 호출 | 입력 처리, 일반 게임 로직 |
LateUpdate() | Update() 실행 후 호출 | 카메라 추적, 최종 위치 보정 |
FixedUpdate() | 일정한 시간 간격으로 호출 | 물리 연산, Rigidbody 제어 |
OnMouseDown(), OnMouseDrag(), OnMouseEnter(), OnMouseExit(), OnMouseOver(), OnMouseUp()
| 메서드 | 호출 시점 | 주요 용도 |
|---|---|---|
OnMouseDown() | 오브젝트를 클릭했을 때 | 선택, 클릭 동작 시작 |
OnMouseDrag() | 클릭한 상태로 마우스를 움직일 때 | 오브젝트 드래그 |
OnMouseEnter() | 커서가 오브젝트 영역에 들어왔을 때 | 강조 효과, 색상 변경 |
OnMouseExit() | 커서가 오브젝트 영역에서 나갔을 때 | 강조 효과 해제, 색상 복구 |
OnMouseOver() | 커서가 오브젝트 위에 있는 동안 | 마우스 오버 상태 처리 |
OnMouseUp() | 마우스 버튼을 뗐을 때 | 클릭·드래그 동작 종료 |
유니티 생명 주기 순서
Awake() -> OnEnabled() -> Start() -> FixedUpdate() -> Update() -> LateUpdate() -> OnDisable()
Unity 인스펙터 어트리뷰트(Inspector Attributes)
| Attribute | 사용 대상 | 역할 | 예시 |
|---|---|---|---|
[SerializeField] | private 필드 | 비공개 필드를 Unity가 저장하고 Inspector에 표시 | [SerializeField] private int health; |
[HideInInspector] | 직렬화 필드 | 값은 저장하지만 Inspector에서는 숨김 | [HideInInspector] public int id; |
[Header("제목")] | 필드 | 해당 필드 위에 굵은 구분 제목 표시 | [Header("이동 설정")] |
[Tooltip("설명")] | 필드 | 마우스를 올렸을 때 설명 표시 | [Tooltip("초당 이동 거리")] |
[Range(min, max)] | 숫자 필드 | 숫자를 슬라이더로 표시 | [Range(0f, 10f)] |
[Min(min)] | 숫자 필드 | Inspector에서 입력할 수 있는 최솟값 지정 | [Min(0f)] |
[Space] | 필드 | 필드 위에 세로 여백 추가 | [Space(10)] |
[TextArea] | string 필드 | 여러 줄 텍스트 입력창으로 표시 | [TextArea(3, 10)] |
[Multiline] | string 필드 | 지정한 줄 수의 여러 줄 입력창으로 표시 | [Multiline(5)] |
[FormerlySerializedAs] | 이름을 바꾼 필드 | 필드명을 변경해도 기존 Scene/Prefab 값을 유지 | [FormerlySerializedAs("oldHealth")] |
Unity GetComponent 계열 정리
| 메서드 | 검색 범위 | 결과 | 비활성 오브젝트 | 예시 |
|---|---|---|---|---|
GetComponent<T>() | 현재 GameObject | 첫 번째 1개 | 현재 오브젝트 대상 | GetComponent<Rigidbody>() |
TryGetComponent<T>() | 현재 GameObject | 성공 여부 + 1개 | 현재 오브젝트 대상 | TryGetComponent(out Rigidbody rb) |
GetComponents<T>() | 현재 GameObject | 조건에 맞는 전체 | 현재 오브젝트 대상 | GetComponents<Collider>() |
GetComponentInChildren<T>() | 현재 + 모든 자식 | 첫 번째 1개 | 기본적으로 제외 | GetComponentInChildren<Animator>() |
GetComponentsInChildren<T>() | 현재 + 모든 자식 | 조건에 맞는 전체 | 기본적으로 제외 | GetComponentsInChildren<Renderer>() |
GetComponentInParent<T>() | 현재 + 모든 부모 | 첫 번째 1개 | 기본적으로 제외 | GetComponentInParent<Player>() |
GetComponentsInParent<T>() | 현재 + 모든 부모 | 조건에 맞는 전체 | 기본적으로 제외 | GetComponentsInParent<Canvas>() |
컴포넌트 추가·조회·제거 관련 메서드
| 메서드/속성 | 역할 | 대상 | 예시 |
|---|---|---|---|
AddComponent<T>() | 컴포넌트를 추가하고 참조 반환 | GameObject | gameObject.AddComponent<Rigidbody>() |
AddComponent(Type) | 실행 중 결정된 타입의 컴포넌트 추가 | GameObject | gameObject.AddComponent(componentType) |
GetComponent<T>() | 컴포넌트 하나 조회 | 현재 GameObject | GetComponent<Rigidbody>() |
TryGetComponent<T>() | 존재 여부를 확인하면서 조회 | 현재 GameObject | TryGetComponent(out Rigidbody rb) |
GetComponents<T>() | 같은 타입의 컴포넌트를 모두 조회 | 현재 GameObject | GetComponents<Collider>() |
Destroy(component) | 특정 컴포넌트 제거 | Component | Destroy(rb) |
Destroy(gameObject) | GameObject 전체 제거 | GameObject | Destroy(gameObject) |
component.enabled | 컴포넌트를 제거하지 않고 활성화/비활성화 | Behaviour 계열 | collider.enabled = false |
gameObject.SetActive() | GameObject 전체 활성화/비활성화 | GameObject | gameObject.SetActive(false) |
DestroyImmediate() | 즉시 제거 | 주로 에디터 코드 | DestroyImmediate(component) |
Time.deltaTime

XR을 활용한 게임 개발 3기(유니티) 수강생입니다. 곧 수료 하지만 앞으로 이곳에 가끔 저의 개발 경험이 나 지식 기록할까 합니다. 더 나아가 이 사이트가 제 개인위키의 역할을 할 수 있으면 좋겠습니다. 한국 게임 시장을 흔들겠습니다

게임 광고 수익은 단순히 광고를 붙이는 것이 아니라, 여러 광고 네트워크를 경쟁시켜 가장 높은 수익을 만드는 구조입니다.

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.