목표
- GetComponent 사용법에 대해 알아보자.
Component
- 소프트웨어에서 컴포넌트란 독립적인 기능을 수행하는 모듈을 의미한다.
Component 추가하기
- Unity에서 미리 정의된 Component는 GameObject의 Inspector의 Add Component를 클릭하면 추가할 수 있다.
- 미리 정의된 Component는 Collider(충돌 처리), Audio Source(사운드 출력), Animation(애니메이션 관리) 등이 있다.
- 해당 Component들의 자세한 기능은 차후 다뤄보도록 하겠다.
Component 만들기
- 혹은 C# Script를 사용하여 Component를 제작할 수 있다.
- 다음은 물체를 크기를 변형하여 두근 두근 하게 보이는 PunchScale Component를 제작해 보자.
- 해당 Component는 Max와 Min 크기 값을 정하는 Initialize와 크기를 변환하는 ScaleUpdate로 구성되어 있다.
- 이때 크기의 변화는 Vector3.Lerp을 사용하였다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PunchScale : MonoBehaviour
{
private Transform _transform;
private Vector3 _maxSize;
private Vector3 _minSize;
private float _t;
private float _speed;
private int _status;
public void Initialize()
{
_transform = this.gameObject.transform;
var scale = _transform.localScale;
_status = 0;
_speed = 1;
_maxSize = new Vector3(
scale.x * 2.0f,
scale.y * 2.0f,
scale.z * 2.0f);
_minSize = scale;
}
public void ScaleUpdate()
{
_t += Time.deltaTime * _speed;
if (_status == 0)
{
_transform.localScale = Vector3.Lerp(_transform.localScale, _maxSize, _t);
if (_transform.localScale.Equals(_maxSize))
{
_status = 1;
_t = 0;
Debug.Log(System.DateTime.Now);
}
}
else
{
_transform.localScale = Vector3.Lerp(_transform.localScale, _minSize, _t);
if (_transform.localScale.Equals(_minSize))
{
_status = 0;
_t = 0;
Debug.Log(System.DateTime.Now);
}
}
}
}
GetComponent
- 다음으로 해당 component를 실행할 BehaviorManager 클래스를 작성해 보자.
- 현재 Cube라는 GameObject에 BehaviorManager와 PunchScale 모두 붙어있는 상황이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BehaviorManager : MonoBehaviour
{
private PunchScale punchScale;
// Start is called before the first frame update
void Start()
{
punchScale = this.gameObject.GetComponent<PunchScale>();
punchScale.Initialize();
}
// Update is called once per frame
void Update()
{
if(punchScale != null)
{
punchScale.ScaleUpdate();
}
}
}