유니티 컴포넌트(Component), 스크립트(Script), 메시지함수( Message)

simple_coding·2024년 1월 30일

게임오브젝트(GameObject)

씬을 구성하는 모든 오브젝트의 기본 클래스로, 게임오브젝트만으로는 독자적인 기능은 없다.
실질적인 기능은 컴포넌트들이 수행하며, 게임오브젝트는 컴포넌트들을 가지기 위한 컨테이너이다.

<게임오브젝트 구성요소>

name : 게임오브젝트의 이름
active : 게임오브젝트의 활성화 여부, 비활성화인 경우 씬에 없는 게임오브젝트로 취급됨
static : 게임오브젝트의 정적상태 여부, 런타임 당시 변경되지 않는 데이터를 지정하여 최적화
tag : 게임오브젝트의 태그, 게임오브젝트를 특정하기 위한 수단으로 사용
layer : 게임오브젝트의 레이어, 씬에서 게임오브젝트를 분리하는 기준 (카메라의 선별적 표현, 충돌 그룹, 레이어 마스크 등에 사용)

component : 게임오브젝트에 포함된 기능모듈, 실질적인 기능을 수행 게임오브젝트는 컴포넌트를 담기위한 컨테이너 역할

컴포넌트 (Component)

특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위이다.
게임오브젝트의 작동을 담당하며 추가, 삭제하는 방식의 조립형 부품이다.

MonoBehaviour

컴포넌트를 기본클래스로 하는 클래스로 유니티 스크립트가 파생되는 기본 클래스이다.
게임 오브젝트에 스크립트를 컴포넌트로서 연결할 수 있는 구성을 제공하고 스크립트 직렬화 기능, 유니티메시지 이벤트를 받는 기능, 코루틴 기능을 포함한다.

<스크립트 직렬화 기능>

인스펙터 창에서 컴포넌트의 맴버변수 값을 확인하거나 변경하는 기능으로 컴포넌트의 값형식 데이터를 확인하거나 변경할 수 있고 컴포넌트의 참조형식 데이터를 드래그 앤 드랍 방식으로 연결한다.

public class UnityScript : MonoBehaviour
{
//Debug.LogError("에러표시");
//Debug.LogWarning("경고표시");
//Debug.Log("정보표시");

// <인스펙터창 직렬화가 가능한 자료형>
[Header("C# Type")]
public bool boolValue;
public int intValue;
public float floatValue;
public string stringValue;
// 그 외 기본 자료형

// 기본 자료형의 선형자료구조
public int[] array;
public List<int> list;

[Header("Unity Type")]
public Vector3 vector3; //xyz 값 부여 float
public Vector3Int vector3Int; //xyz 값 부여 int
public Color color; //컬러 변경
public LayerMask layerMask; //그룹을 대상으로 기능적용
public AnimationCurve curve; //곡선그래프로 속도,확률 등 보간
public Gradient gradient; //그라데이션 컬러 적용

[Header("Unity GameObject")]
public GameObject obj; //GameObject 참조변수

[Header("Unity Component")]
public new Transform transform; //Transform 참조변수
public new Rigidbody rigidbody; //Rigidbody 참조변수
public new Collider collider; //Collider 참조변수

[Header("Unity Event")]
public UnityEvent OnEvent; //이벤트 발생 시 지정한 함수 작동

// <어트리뷰트>
// 클래스, 프로퍼티 또는 함수 위에 명시하여 특별한 동작을 나타낼 수 있는 마커
[Space(30)] //픽셀 간격

[Header("Unity Attribute")] //구분자 제목
[SerializeField] //private 인스펙터에서 표시 
private int privateValue;
[HideInInspector] //public 인스펙터에서 숨기기
public int publicValue;

[Range(0, 10)] //최소, 최댓값 설정 / 슬라이드 형태
public float rangeValue;

[TextArea(3, 5)] //최소, 최대 보여지는 열 설정
public string textField;

유니티 메시지 함수

유니티가 보내는 메시지에 반응하는 함수이며 MonoBehavior 클래스에 같은 이름의 함수를 포함할 경우 반응한다.
스크립트는 유니티 엔진이 보내는 메시지에 반응하여 자신의 행동을 정의하는데, 같은 이름의 함수를 포함할 경우 유니티메시지에 반응하지만 포함하지 않을 경우 무시한다.

 private void Awake()
 {
     // 스크립트가 씬에 포함되었을 때 1회 호출되는 함수
     // 스크립트가 비활성화 되어 있는 경우에도 호출됨

     // 역할 : 스크립트가 필요로 하는 초기화 작업 진행
     //		  (스크립트만의 초기화 작업, 외부 게임상황과 무관한 초기화 작업)
     // ex) 데이터 초기화, 컴포넌트 연결
     Debug.Log("Awake");
 }

 private void Start()
 {
     // 스크립트가 씬에 처음으로 Update하기 직전에 1회 호출됨
     // 스크립트가 비활성화된 경우 호출되지 않음

     // 역할 : 스크립트가 필요로 하는 초기화 작업 진행
     //		  (다른 스크립트와의 연관 초기화 작업, 외부 게임상황이 필요한 초기화 작업)
     // ex) 몬스터의 플레이어 타겟선정
     Debug.Log("Start");
 }

 private void OnEnable()
 {
     // 스크립트가 활성화될 때마다 호출, 순서상 Start보다 먼저  

     // 역할 : 스크립트가 활성화 되었을 때 작업 진행
     Debug.Log("OnEnable");
 }
 private void OnDisable()
 {
     // 스크립트가 비활성화될 때마다 호출

     // 역할 : 스크립트가 비활성화 되었을 때 작업 진행
     Debug.Log("OnDisable");
 }

 private void Update()
 {
     // 게임의 프레임마다 호출

     // 역할 : 핵심 게임 로직 구현
     Debug.Log("Update");
 }

 private void LateUpdate()
 {
     // 씬의 모든 게임오브젝트의 Update가 진행된 후 호출

     // 역할 : 게임프레임의 진행 결과가 필요한 동작이 있는 기능 구현
     // ex) 플레이어의 위치가 결정된 후에 카메라의 위치 설정, 승패 판정
     Debug.Log("LateUpdate");
 }

 private void FixedUpdate()
 {
     // 유니티의 물리설정 단위시간마다 호출 (기본 1초에 50번)
     // Update와 다르게 프레임당 연산과 단위시간이 일정
     // 단, 게임로직 등, 연산이 많은 작업을 FixedUpdate에 구현하지 않아야 함

     // 역할 : 성능과 프레임 드랍에 영향을 받지 않아야 하는 작업
     // ex) 물리적 처리
     Debug.Log("FixedUpdate");
 }

 private void OnDestroy()
 {
     // 스크립트가 삭제되었을 경우 호출

     // 역할 : 스크립트의 마무리 진행
     Debug.Log("OnDestory");
 }

profile
기록하는 것이 기억된다.

0개의 댓글