C#/C# 학습 (TIL)

C# SendMessage / Attributes

jjiing 2022. 7. 2. 13:39

 

▶SendMessage

- 유니티 Api 메세지 기반 명령어
ㄴ 다른 오브젝트에 있는 명령을 실행하거나 혹은 명령을 내릴 때 사용한다.
- 또한 샌드메세지는 다른 오브젝트의 특정 명령만 실행하게 할 수 있다.(코루틴 포함)
- 유니티 엔진의 특성상 사용 빈도가 높을 수 밖에 없다.
ㄴ 유니티 엔진 : 컴포넌트 기반 프로그래밍

 

 

 

<하나의 큐브(sender)에서 다른 큐브(receiver)로 ray를 쏴서 맞으면 회전하게 하는 센드메세지 예제> 

샌더클래스1
샌드클래스2

엔터를 눌렀을 때 레이가 맞으면 그 오브젝트가 "ReceiveMessageSample"을 실행하게 메세지를 보내는 것이다.
"회전"은 메서드의 매개변수이다.

 

리시버 클래스

 

레이를 맞은 오브젝트는 "ReceiveMessageSample"메서드를 가지고 있고, 이를 실행시킨다.

 

 

 

<결과>

 

 

 

 

 

 

 

 

▶Arrtibutes


- 스크립트에서 클래스와 속성, 또는 함수와 변수 위에 추가하며 속성에 해당되는 동작을 한다.
- 유니티에서는 굉장히 많은 속성이 있지만 자주 사용되는 속성들은 몇개 없다.


★★★★
1. Serializable
- 인스펙터에는 클래스나 구조체는 표시할 수 없다.
    표시할 수 없지만 Serializable 속성을 사용하면 인스펙터 창에 노출이 된다. (편집 가능)


★★★
2. SerializeField
- private 멤버를 인스펙터창에 노출시킨다.
- 다른클래스에서 참조는 하지 않지만 변수를 인스펙터에서 노출시키고 싶을 때 사용


★★★★
3.HideInInspector
- public 변수를 인스펙터 창에 노출시키지 않는 용도
- 변수를 외부에 공개해야 하나 인스펙터 창에서 값을 수정할 필요가 없을 때 사용

★★★★★
4. RequireComponent (typeof (Component)
- 이 컴포넌트를 추가할 때 요청한 Type에 해당되는 컴포넌틀가 없을 경우 자동으로 추가 요청

★★★★★★★★★★★★★★★★★★★★★★★★★★★★
5. Header ("string")
- 인스펙터에 타이틀을 달 수 있다.
- 프로젝트의 규모가 커지면 정리가 필수가 되기 때문에

6. Multiline (int)
- 라인 수를 늘려준다.
- 장문의 문자열을 작성할 때 유용

7. Range (int, int) // Range (float, float)
- 최소/ 최댓값을 기반으로 변수의 값을 슬라이드 바로 표시한다.

8. Space (int / float)
- 인스펙터 창에서 자료형 만큼의 간격을 조절할 수 있다.
- 필드 사이에 여백을 줄 수 있다.

9. Tooltip ("string")
-마우스 커서를 올릴경우 표시되는 툴팁을 설정할 수 있다.

 

 

 

 

(참고)
    에디터 접근 범위 설정(직렬화)
    직렬화(마샬링(Marshalling)):
    - 어떤 데이터를 전송하기 위해 재구성가능한 형식으로 변환한 것
    (사용자가 받을 수 있는 형태로 변환해 주는 것)
    - 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장을 하고 나중에 재구성할 수 있는 포맷으로 자동 변환 하는 프로세스

    - 유니티 에디터에서는 저장 및 로딩, 인스펙터 창, 프리팹, 인스턴스화 같은 일부 내장 기능에 직렬화 / 역직렬화가 사용이 된다.