[Unity] Attribute란?

Unity 2023. 3. 25. 13:46
  • Unity에서 Attribute는 특정한 기능이나 정보를 클래스, 프로퍼티, 필드, 메소드 등 코드의 요소에 부여하는 데 사용되는 특별한 타입의 메타데이터입니다. 
  • Attribute는 C#에서 제공되는 기능으로, 주로 코드를 작성할 때 추가적인 정보를 제공하거나 Unity의 인스펙터 창에 표시되는 방식을 변경하는 데 사용됩니다.
  • Unity에서는 다양한 Attribute들이 있으며, 이는 코드의 가독성을 높이고 작성자의 의도를 명확하게 전달할 수 있습니다.
  • 주요 Unity Attribute의 예시는 다음과 같습니다.

예시

SerializeField: 일반적으로 private 변수는 Unity 인스펙터에 표시되지 않지만, 이 Attribute를 사용하면 해당 변수를 인스펙터 창에서 수정할 수 있게 됩니다.

[SerializeField] private int myValue;

Tooltip: 변수에 마우스를 올렸을 때 툴팁으로 표시될 정보를 설정할 수 있습니다. 이를 통해 변수의 사용 목적을 명확하게 전달할 수 있습니다.

[Tooltip("This value represents the player's speed.")] public float speed;

Range: 인스펙터에서 변수 값의 범위를 지정할 수 있습니다. 이를 통해 변수 값의 최소값과 최대값을 제한할 수 있습니다.

[Range(0, 100)] public int health;

Header: 인스펙터에서 변수들을 그룹화하거나 구분할 때 사용할 수 있는 헤더를 추가합니다.

[Header("Player Settings")] public string playerName;

RequireComponent: 이 Attribute를 사용하면, 해당 컴포넌트와 함께 다른 특정 컴포넌트가 필요한 경우 자동으로 추가됩니다.

[RequireComponent(typeof(Rigidbody))] public class PlayerController : MonoBehaviour { ... }

블로그 이미지

RIsN

,

[Unity] System.Obsolete란?

Unity 2023. 3. 25. 13:38
  • System.Obsolete는 사용되지 않는 메서드 또는 클래스를 표시하는 데 사용되는 어트리뷰트(Attribute)입니다.
  • 이 어트리뷰트는 더 이상 사용되지 않는 메서드 또는 클래스에 적용됩니다.
  • Obsolete 어트리뷰트를 사용하여 더 이상 사용되지 않는 메서드 또는 클래스를 표시하면, Unity의 에디터 또는 콘솔에서 경고 메시지가 표시됩니다.
  • 이를 통해 사용자가 해당 메서드 또는 클래스를 사용하지 않도록 유도하고, 대신 새로운 API를 사용하도록 안내할 수 있습니다.

블로그 이미지

RIsN

,

기본

  1. Look At Constrait을 사용

간단 확인

  1. Head Bone에 Look At Constrait을 설치
  2. 마우스 타깃으로 할 목표 오브젝트를 제작 후에 해당 Constrait에 타깃으로 적용
    • 움직임을 보면서 회전 등 미세 조정
  3. 목표 오브젝트가 마우스를 따라 다니도록 처리

블로그 이미지

RIsN

,

기본: 아래 블로그의 Punch 부분 확인

유니티 - UI 이미지에 구멍뚫기 | Rito15

 

유니티 - UI 이미지에 구멍뚫기

Mask

rito15.github.io

추가적으로 마티리얼 속성에 관한 확인

  1. Tint: Tint는 Material의 기본 색상을 조정하는 데 사용됩니다. 이 값을 변경하면 Material의 색상이 변경됩니다.
  2. Stencil Comparison: 스텐실 비교(Stencil Comparison)는 스텐실 테스트(Stencil Test)를 수행하기 전에 사용되는 비교 함수를 정의합니다. 스텐실 테스트는 스텐실 버퍼(Stencil Buffer)에 적용되는 것으로, 스텐실 버퍼에는 오브젝트의 선택적인 렌더링이나 후처리 효과에 사용되는 정보가 저장됩니다.
  3. Stencil ID: 스텐실 ID(Stencil ID)는 스텐실 테스트에서 사용되는 ID입니다. 이 값은 다른 오브젝트에서 사용되는 것과 겹치지 않아야합니다.
  4. Stencil Operation: 스텐실 작업(Stencil Operation)은 스텐실 테스트가 성공하면 스텐실 버퍼에 쓰일 작업을 정의합니다. 예를 들어, 스텐실 버퍼에 값을 쓰거나, 스텐실 버퍼에서 값을 읽어와 변경하는 등의 작업을 수행할 수 있습니다.
  5. Stencil Read Mask: 스텐실 읽기 마스크(Stencil Read Mask)는 스텐실 테스트에서 사용되는 비트 마스크입니다. 이 값은 스텐실 버퍼에서 읽어온 값을 마스킹하는 데 사용됩니다.
  6. Color Mask: 색상 마스크(Color Mask)는 Material에서 렌더링하는 색상 채널을 지정하는 데 사용됩니다. 예를 들어, 색상 마스크가 'RGB'로 설정되면 Material은 렌더링할 때 빨간색, 초록색, 파란색 채널을 모두 사용합니다.
  7. Use Alpha Clip: 알파 클리핑(Alpha Clipping)은 Material에서 알파 값을 기반으로 텍스처를 제거하는 데 사용됩니다. Use Alpha Clip 옵션을 사용하면, 알파 값이 특정 값 이하인 픽셀은 렌더링되지 않습니다. 이를 통해, 일부 오브젝트를 불투명하게 만들거나, 불필요한 부분을 제거할 수 있습니다.

블로그 이미지

RIsN

,

카메라를 선택 후: Ctrl + Shift + F

블로그 이미지

RIsN

,

코드

  • enum 데이터
private enum CharacterVoice
{
    LJ8 = 15,
    POKI = 16,
    CHARASI = 65
}
  • 실행 코드
// :: enum 안의 모든 데이터를 가져옴
var values = System.Enum.GetValues(typeof(CharacterVoice));
// :: 데이터의 길이 만큼 랜덤 획득
int random = Random.Range(0, values.Length);
// :: 해당 enum의 수치값을 획득
Debug.Log((int)values.GetValue(random));

// >> 결과: 15 or 16 or 65

 

블로그 이미지

RIsN

,

코드

string textData = "들어갈 내용";
GUIUtility.systemCopyBuffer = textData;

참고

  • Unity Editor에서의 사용: 성공
  • Web GL 빌드에서의 사용: 실패
  • Window 빌드에서의 사용: 실패
    • 이 부분은 조금 더 확인해야 합니다.
블로그 이미지

RIsN

,

문제: Cinemachine을 사용할 때 Virtual Camera를 캐릭터에서 오브젝트(모닥불)로 변경할 때 흔들림이 발생

  • 원인
    • Follow와 LookAt에 오브젝트를 넣을 때 해당 카메라가 따라가고, 바라보며 흔들리는 현상
  • 제약 및 현 상황
    • 한 번만 발생
    • Follow와 LookAt 둘 다 써야 조금 더 보기 좋은 상황, 즉, 둘 다 써야 함
    • Delay를 넣으면 미묘하게 느낌이 안 좋음
  • 해결
    • Follow와 LookAt을 따로 메소드로 변경
    • 우선도를 바꾸기 전에 전 단계(현재 케이스는 설치 결정 팝업 화면)에서 이미 해당 메소드를 실행
      • (기존 변경) 현재 Instantiate될 오브젝트를 카메라가 따라가고 있는데, 좌표 타일 자체를 따라가도록 변경
  • 추가
    • 오브젝트가 움직일 때(위치가 바뀔 때) Follow와 LookAt도 그대로 놔둔 채로 움직이면 흔들림이 발생
      • 어차피 방향이 정해졌다면 Follow만 처리해서 위치 변경
블로그 이미지

RIsN

,

목표: 설치할 때 해당 오브젝트가 투명으로 보이도록 하는 처리

  • 아래와 같이 Unlit에서 Transparent를 사용 후 투명도 변경

블로그 이미지

RIsN

,

Mobile에서 너무 느리게 실행되는 문제 발생

  • 이게 답인지 모르겠지만 일단 이 부분 제거 후 느린 것이 사라짐
    • Post Processing을 사용하는 것으로 되어 있는 상황
    • 현재 게임에서는 Post Processing을 사용하지 않기에 해당 제거
      • 어떤 상황에서 저것이 자동으로 만들어지는 지 확인 필요
  • Project Settings ⇒ Player  Other Settings

블로그 이미지

RIsN

,