오브젝트 검색 FindGameObject
FindGameObjectWithTag()
-
FindGameObjectWithTag()
메서드는 지정된 태그를 가진 게임 오브젝트를 빠르게 찾을 수 있게 해줌 - 유용하긴 하지만, 특히 큰 씬에서는 이 메서드가 성능에 부담을 줄 수 있음
GameObject player = GameObject.FindGameObjectWithTag("Player");
FindGameObjectsWithTag()
- 동일한 태그를 가진 여러 게임 오브젝트에 접근해야 하는 상황에서는
FindGameObjectsWithTag()
가 유용 - 지정된 태그를 가진 모든 게임 오브젝트를 Array로 반환합니다.
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
SendMessageOptions
GameObject.SendMessage(string methodName, SendMessageOption option);
-
SendMessage()
메서드를 이용하면 게임 오브젝트에 동적으로 메서드를 호출할 수 있습니다. -
SendMessageOptions
열거형은 이 호출이 어떻게 처리될지를 정합니다.
메서드 | 설명 |
---|---|
SendMessageOptions.RequireReceiver | 수신자가 없을 경우 에러를 발생시킵니다. |
SendMessageOptions.DontRequireReceiver | 수신자가 없어도 에러를 발생시키지 않습니다. |
- SomFunction과 동일한 메서드가 있다면, 실행 시키고 없어도 에러를 반환하지 않음
gameObject.SendMessage("SomeFunction", SendMessageOptions.DontRequireReceiver
사용자 정의 이벤트 - Delegate
- SendMessage의 같은 경우 호출해야 하는 오브젝트가 많다면, 성능에 문제가 생길 수 있다.
- foreach 처럼 순차적인 함수 호출 방식에서 => 이벤트 구동방식 (Event Driven) 방식으로 최적화 가능
Event
- 특정한 조건을 만족하면 자동으로 아려주는 메세지 (Notification)을 의미
- 예를 들어, Player가 사망할 때 “Player Die”를 알리는 이벤트를 생성하면, 이러한 상황이 발생시 시스템에서 이를 자동으로 통보 (Notification)하고, 이벤트에 연결된 모든 적 유닛에 해당 동작을 수행 시킬 수 있음
- 이벤트 방식은 for, foreach 구문을 사용해 순차적으로 호출하는 방식보다 메모리 사용, 구동속도에 효율적
Delegate
- 델리게이트 함수(메서드)를 참조하는 변수를 의미
- 즉, 메서드를 저장할 수 있는 일종의 변수 (C++의 함수 포인터와 같은 의미)
- 델리게이트 사용시, 선언해야 함
private delegate 반환타입 델리게이트명 (매개변수);
using UnityEngine;
public class DelegateDemo : MonoBehaviour
{
// 델리게이트 선언
delegate float SumHandler(float a, float b);
// 델리게이트 타입의 변수 선언
SumHandler sumHandler;
// 덧셈 연산을 하는 함수
private float Sum(float a, float b)
{
return a + b;
}
private void Start()
{
// 델리게이트 변수에 함수 (메서드) 연결 (할당)
sumHandler = Sum;
// 델리게이트 실행
float sum = sumHandler(10.0f, 5.0f);
// 결괏값 출력
Debug.Log($"Sum = {sum}");
}
}
// 스크립트 활성화 시 호출되는 이벤트 함수
private void OnEnable()
{
// 이벤트 발생 시 수행할 함수 연결
이벤트가 선언된 Class_Name.Event_Name += 이벤트 발생 시 호출할 함수;
}
// 스크립트 비활성화 시 호출되는 이벤트 함수
private void OnDisable()
{
// 기존 선언된 이벤트 해제
이벤트가 선언된 Class_Name.Event_Name -= 이벤트 발생 시 호출했던 함수;
}