[RequireComponent(type())]


보통 GetComponent는 대부분 자기 자신의 컴포넌트 중 하나를 가져와 사용한다.


자신에 부착돼있는 컴포넌트를 가져와 사용하려면 기본적으로, 다음과 같이 호출한다.


Rigidbody rigid = GetComponent<Rigidbody>();


보통 이런 목적으로 사용할 때는 Awake나 Start에서 미리 선언한 뒤 사용한다. 


하지만 Rigidbody 컴포넌트의 존재를 보장하지 않는다. 


무슨말이냐면, 실수로 Rigidbody를 게임오브젝트에서 지웠다면 null이 되어 실행 시, 문제가 발생된다.


그래서 엄격히 컴포넌트의 존재를 보장하고 싶을 때 RequireComponent를 사용한다.


사용방법은 다음과 같다. 클래스보다 위에 쓴다는 점. 명심하자.



[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(Collider))]

public class Bullet : MonoBehaviour
{



제법 깔끔하기도 하고 자주 사용하는 방법이다.


이렇게 되면, 이 게임오브젝트는 반드시 Rigidbody와 Collider를 갖고 있어야 한다는 의미이다.


따라서, 위 두 컴포넌트는 삭제할 수 없다. Delete해봐라. 그럼 아래와 같은 창을 볼 수 있다.



Bullet 스크립트가 Box Collide를 요구하고 있기때문에, 이것은 삭제할 수 없게 되므로 에러 발생 확률이 적어진다.






이렇게 인스펙터와 관련된 기능이 많다.



Posted by sungho88
,

[같은 게임오브젝트(GameObject)에서 컴포넌트(Component) 호출하기]

 

동일한 게임오브젝트가 갖고 있는 특정 다른 컴포넌트에 접근해야 할 경우 사용하는 방법은 다음과 같다.

이러한 선언은 Start()함수에서 또는 Awake()함수에서 미리 할당해놓아야 한다.

 

void Start() {

Transform tr = GetComponent<Transform>();

Transform tr = gameObject.GetComponent<Transform>();

Transform tr = (Transform)GetComponent("Transform");

Transform tr = (Transform)GetComponent(typeof(Transform));

}

 

이 스크립트가 포함된 게임오브젝트가 갖고 있는 컴포넌트 중에서 Transform 컴포넌트를 추출하여 tr 변수에 저장해라

 

 

[다른 게임오브젝트(GameObject)에 있는 컴포넌트(Component) 호출하기]

 

오브젝트들은 서로 독립적으로 작동하기때문에, 

위와같이 GetComponent만으로는 다은 오브젝트에 컴포넌트는 호출할 수 없다. 

이럴때는, 스크립트에 

 

public GameObject other;

 

와 같이 위에 선언해주고,

 

tr = other.GetComponent<Transform>();

 

이렇게하면, other의 게임오브젝트에 붙어있는 컴포넌트를 tr에 저장하여 사용할 수 있게된다.

 

아, 게임오브젝트는 유니티 에디터로 돌아와서, other가 어떤 게임오브젝트인지를 알려주어야한다.

즉, 이 스크립트가 붙어있는 게임오브젝트로 가면 Inspector에 스크립트 하단에 other가 보이고, 그 옆에 값은  None.

이 부분에다가 참조하고 싶은 게임오브젝트를 드래그 앤 드롭으로 옮겨주면 None대신 게임오브젝트가 들어간다.

이것이 연결된 것이라고 할 수 있다.

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

또는 Tag를 이용한 방법도 있다.

 

Button button = GameObject.FindGameObjectWithTag("게임오브젝트이름").GetComponent<Button>();

 

이렇게하면, 게임오브젝트에 태그를 검색해서, 찾아온 뒤, Button 컴포넌트를 가져오게 된다.

 

https://www.10000duck.com/ducks/37

 

10000duck - 그레타 툰베리가 우리 도서관에 ?!

온라인 모금함을 통해 기부하세요.

www.10000duck.com

 

Posted by sungho88
,