유니티:컴포넌트 조작하기
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
코드로 오브젝트의 컴포넌트를 조작해야 할 때가 있다.
방법
드래그&드롭으로 컴포넌트 지정하기
단순하게 생각하면 스크립트의 클래스 변수에 컴포넌트를 드래그&드롭으로 컴포넌트를 넣을 수 있다.
컴포넌트 준비.
조작할 컴포넌트를 게임 오브젝트 내에 추가한다.
코드 내에서의 준비. 프로퍼티 만들기.
코드 안에서 공용 변수를 지정해주어 인스펙터 창에서 볼 수 있게 한다.
public class 클래스명 : MonoBehaviour {
public 받을타입명 받을변수명;
}
예컨대 RigidBody를 조작하고자 한다면 public RigidBody mine
형태로 익스펙터 창에서 리지드바디 컴포넌트를 끌어다 놓을 공간을 보이게 할 수 있다.
리지드바디 컴포넌트 안엔 AddForce 등 힘을 가하는 물리기능을 포함하고 있다.
위처럼 필드를 public으로 할당하면 인스펙터 창에서 편집이 가능하게 보인다.(mine이라는 필드 안에 Rigidbody라는 형태로 보임) 이를 프로퍼티라 부른다.
코드에 적용하기
이처럼 지정된 공용변수를 필드라 부르는데, 필드에 해당 컴포넌트를 드래그&드롭한다.(해당 컴포넌트를 접어두고 옮기면 편하다.)
이후, '받을변수명'을 조작함으로써 컴포넌트를 다룰 수 있다.
코드 내에서 컴포넌트 가져오기
드래그&드롭은 직관적이고 편하지만, 조작에 실수가 있을 수도 있고, 코드로 해결하고 싶은 경우도 있다. 그런 경우, 다음과 같이 해당 컴포넌트를 가져올 수 있다.
public class 클래스명 : MonoBehaviour {
private 받을타입명 받을변수명;
void 메서드명() {
받을변수명 = GetComponent<컴포넌트명>();
}
}
가져오고 싶은 것이 RigidBody라면 다음과 같이 작성한다.
public class Move : MonoBehaviour {
private Rigidbody playerRigidbody;
void Start() {
playerRigidbody = GetComponent<Rigidbody>();
}
}
컴포넌트를 가져올 때, 해당 컴포넌트가 없다면 null을 반환한다.
기타
transform
트렌스폼 컴포넌트는 편의상 GetComponent를 사용할 필요 없이, transform
변수로 바로 불러올 수 있게 되어있다.
게임 오브젝트에 접근하기
코드 내에서 gameObject라는 변수로 게임오브젝트에 접근이 가능하다.
게임 오브젝트 활성화, 비활성화
다음과 같이 게임 오브젝트가 기본적으로 갖고 있는 메서드를 이용해 오브젝트 활성/비활성이 가능하다.
public void End() { // public으로 해주면 외부에서 이 함수에 접근할 수 있다.
gameObject.SetActive(false); // gameObject는 이 코드를 담고 있는 오브젝트를 의미한다.
}