목표
- 다른 오브젝트에 있는 컴포넌트를 받아와, 실행해보자.
사전 준비
- GetComponent - 1에서 제작했던 BehaviorManager를 아래와 같이 변경한다.
- 외부의 GameObject를 참조하기 위하여, PunchObject를 추가했다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BehaviorManager : MonoBehaviour
{
public GameObject PunchObject;
private PunchScale punchScale;
// Start is called before the first frame update
void Start()
{
if(PunchObject != null)
{
punchScale = PunchObject.GetComponent<PunchScale>();
punchScale.Initialize();
}
}
// Update is called once per frame
void Update()
{
if(punchScale != null)
{
punchScale.ScaleUpdate();
}
}
}
Component 배치
BehaviorManager의 경우 Empty Object를 하나 생성하여, Component를 추가하였다.
Empty Object는 GameObject > Create Empty 메뉴에서 생성 가능하다.
이후 Empty Object의 Name을 BehaviorManager로 변경하였다.
Empty Object는 좌표 정보만 가지는 Object이다.
PunchScale의 경우 Cube 오브젝트에 Component를 추가하였다.
Cube 오브젝트의 Name을 PunchScale로 변경하였다.
GameOejct 참조 시키기
- BehaviorManager의 Inspector를 보면, public으로 선언한 GameObject의 값이 'None (Game Object)' 라고 표시되고 있다.
- 이는 현재 참조하고 있는 Object가 없다는 뜻이다.
- Hierarchy창에서 PunchScale을 누른 상태에서, 드래그&드롭을 사용하여 'None (Game Object)' 부분으로 끌어다 놓으면 GameObject를 연결할 수 있다.
- 혹은 화면에서 강조된 동그라미를 눌러도 참조할 GameObject를 선택할 수 있다.
동작
- 이렇게 연결 시킨 GameObject는 BehaviorManager Component의 PunchObject에 적용되어 동작한다.
마치며
- 위와 같은 방법으로 GameObject를 연결 시켜주면, 저장하지 않고 씬을 종료하는 등의 이유로 설정 정보가 날아가는 경우가 허다하다.
- 이러한 실수를 방지하기 위해서는 GameObject.Find, GameObject.FindWithTag 등을 사용하여, 로직에 의해 오브젝트를 찾아야 한다.