GetComponent관련 메서드를 자주 쓰고있긴 한데 항상 틀리기도 하고, 다시 찾아보게 되던걸 테스트 해보았다.
우선 빈오브젝트에 이름을 달아서 구조로 만들었다. 스크립트를 담을 오브젝트는 "Badger"에 스크립트를 달고, 각각 알고싶었던 스크립트를 작성해서 Debug.Log 해보았다.
스크립트는 간단한 구조로 버튼누르면 로그가 나오도록 했다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NaughtyAttributes;
public class Component_practice : MonoBehaviour
{
[SerializeField]
List<Transform> objsList = new List<Transform>();
[Button]
public void GetComponentsInParent()
{
objsList.Clear();
foreach (Transform item in GetComponentsInParent<Transform>())
{
objsList.Add(item);
}
int i = 0;
foreach (var item in objsList)
{
Debug.Log($"{i} 번째 오브젝트 : {item.name}");
i++;
}
}
[Button]
public void GetComponentsInChildren()
{
objsList.Clear();
foreach (Transform item in GetComponentsInChildren<Transform>())
{
objsList.Add(item);
}
int i = 0;
foreach (var item in objsList)
{
Debug.Log($"{i} 번째 오브젝트 : {item.name}");
i++;
}
}
[Button]
public void GetComponentInChildren()
{
objsList.Clear();
foreach (Transform item in GetComponentInChildren<Transform>())
{
objsList.Add(item);
}
int i = 0;
foreach (var item in objsList)
{
Debug.Log($"{i} 번째 오브젝트 : {item.name}");
i++;
}
}
[Button]
public void GetComponentInParent()
{
objsList.Clear();
foreach (Transform item in GetComponentInParent<Transform>())
{
objsList.Add(item);
}
int i = 0;
foreach (var item in objsList)
{
Debug.Log($"{i} 번째 오브젝트 : {item.name}");
i++;
}
}
}
- GetComponentsInParent
- GetComponentsInChildren
- GetComponentInChildren
여기서 의문이 생긴다 GetComponents를 안하고 GetComponent를 했는데 이때는 본인을 제외한 자식들 셋이 순서대로 추출되었고
- GetComponentInParent
Parent에다 했더니 똑같이 자식들이 나왔다. 이상하다;; 그래서 Parent에 Rigidbody를 부착하고 디버그로그를 이렇게 찍어보았다.
[Button]
public void PONGPONG()
{
Debug.Log($"이름은??? : {GetComponentInParent<Rigidbody>().gameObject.name}");
Debug.Log($"이름은???? : {GetComponentInParent<Transform>().gameObject.name}");
}
찍힌 로그는???
도대체 뭐지 ;;???? 더 재미있는건 Badger에 Rigidbody를 부착하고 로그찍어보면 둘다 Badger가 나온다. 그럼 굳이 왜 GetComponentInParent라는 명칭을 쓰는거지?;;
모든 Rigidbody를 지우고 GrandParent에 부착해서 로그를 찍어보니 GrandParent가 나왔다. GetComponent는 가장 가까운것중 첫번째꺼를 도출하는거 같다.
※ 추가적으로 .. GetComponent<Type>() 에서 여기 Type에 GameObject가 들어가면 찾을 수 없다고 한다. 이유는 ChatGPT에게 물어보니 GetComponent 시리즈는 Component 클래스를 상속받는 구조에서만 동작한다고 한다. 상속 구조에 대해 설명해주는데
'Departure' 카테고리의 다른 글
유니티(Unity), 단축키, 내가 자주쓰는 단축키 기록 (0) | 2024.06.12 |
---|---|
Debug.ClearDeveloperConsole(); 콘솔창 로그 지우기 (2) | 2024.06.11 |
유니티 셰이더(쉐이더), 폴백 - Unity Shader, FallBack (0) | 2024.05.31 |
유니티 셰이더(쉐이더), 프로퍼티 - Unity Shader, Properties (0) | 2024.05.31 |
댓글