Unity) gameObject 와 Component

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

댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
씬에 놓이는 모든 것이 게임오브젝트이고, 게임 오브젝트 자체는 아무 기능도 갖지 않습니다.
기능을 갖기 위해 컴포넌트를 담는 그릇입니다.
게임에서 오브젝트와 동작에 관한 기본 구성 요소 입니다.
오브젝트의 포지션을 원점을 기본으로 놓고 진행을 해야 편한데 위와 같이 좌표 기준이 오브젝트의 중앙이라
오브젝트의 포지션을 원점으로 놓게 되었을 때 불편한 상황이 발생할 수 있다.
위와 같이 빈 오브젝트를 생성하여 객체를 자식으로 바꾸면 부모 오브젝트가 움직였을때 Capsule의 로컬값은 변화하지 않게 된다.
[Header(" ")] : 인스펙터창에 Header를 띄울 수 있다.
[Tooltip(" ")] : 인스펙터창에 표시된 기능들에 설명을 추가할 수 있다.
[SerializeField] : 인스펙터창에 해당 기능을 표시해줄 수 있다.
[Header("회전 관련 데이터")]
[Tooltip("회전 관련 데이터를 설정합니다.")]
[SerializeField][Range(0, 300)] private float RotSpeed; // 0~300의 값을 조정할 수 있는 "바" 가
==※주의==
==[SerializeField] private float _moveSpeed = 5f;==
코드상에서 이렇게 적어놓고 인스펙터상에서 12로 변경한 후에, 다시 코드로 돌아와 5f를 20f로 변경하더라도
실제로 쓰이는 값은 인스펙터에서 적은 12로 사용된다.
코드에 적은 초기값은 인스펙터에 저장된 값이 없을 때만 쓰입니다.
==[field: SerializeField] public float MoveSpeed { get; private set; }==
==[field: SerializeField]==는 프로퍼티가 감춰 만든 필드에 이 표시를 붙이라는 뜻입니다.
이렇게 하면 다른 클래스에서 MoveSpeed를 읽을 수 있고, 값을 넣는 것은 인스펙터와 이 클래스 안쪽으로 제한됩니다.
같은 게임 오브젝트에 붙어 있는 컴포넌트 하나를 찾아 돌려줍니다.
못 찾으면 null을 반환합니다.
문법형식 :
대상.GetComponent ( );
Renderer foundRenderer = GetComponent<Renderer>();
찾았는지 여부를 bool로 돌려주고, 찾은 것은 out 매개변수에 넣어줍니다.
if (TryGetComponent<Renderer>(out Renderer foundRenderer) == true)
{
foundRenderer.enabled = false;
}
같은 게임 오브젝트에서 조건에 맞는 컴포넌트를 전부 찾아 배열로 돌려줍니다.
MonoBehaviour[] foundScripts = GetComponents<MonoBehaviour>();
GetComponentInChildren : 자기 자신과 그 아래 자식 전체에서 → 처음 찾은 컴포넌트 하나
GetComponentInParent : 자기 자신과 그 위 부모를 거슬러 올라가며 → 처음 찾은 컴포넌트 하나
GameObject.Find( )
※ 주의 / 사용하지 않는 것이 좋다. -> 씬 전체로 순회하기 때문에 오브젝트가 많을 수록 프레임드랍의 원인이 될 수 있다.
Unity 면접 대비 입력, 카메라/이동/AI, 에셋/빌드
Unity 면접 대비 렌더링/그래픽, 메모리/최적화
Unity 면접 대비 애니메이션, UI