유니티 이벤트로 직접할당하는방법은 간편하지만
세가지 문제점이있다.
1) 함수이름바꾸면 참조 다 깨짐.
2) 레퍼런스 보려면 일일히 인스펙터 찾아가야 함
3) 참조된게 CodeLens에 안 나타남
따라서 이벤트 Action으로 주입하는 방법을 사용하기도 한다.
// 방법 1 : AddListener로 함수 할당하기. 에디터상에서는 안보이니 주의
public class StartFlowManager : MonoBehaviour
{
[SerializeField] Button Btn_Title_popup;
[SerializeField] GameObject Title_Popup;
private void Awake()
{
Btn_Title_popup.onClick.AddListener(PressBtnTitlePopup);
}
void PressBtnTitlePopup()
{
Title_Popup.SetActive(false);
}
}
// 방법2 : 람다식으로 할당하기
public class StartFlowManager : MonoBehaviour
{
[SerializeField] Button Btn_Title_popup;
[SerializeField] GameObject Title_Popup;
private void Awake()
{
Btn_Title_popup.onClick.AddListener(()=>Title_Popup.SetActive(false));
}
}
// 방법3 : 외부에서 할당하기
public class StartFlowManager : MonoBehaviour
{
[SerializeField] Button Btn_Title_popup;
public void SetBtnAction(Action action)
{
if(action != null)
Btn_Title_popup.onClick.AddListener(action.Invoke);
}
}
public class OtherManager : MonoBehaviour
{
[SerializeField] GameObject Title_Popup;
[SerializeField] StartFlowManager StartFlowManager;
private void Start()
{
Action action = () => Title_Popup.SetActive(false);
StartFlowManager.SetBtnAction(action);
}
}
혹 for문을 사용하여 할당할때는 주의하자.
2019/12/12 - [C# Study] - for 문에서 람다식은 주의해야한다. (AddListener for loop)
'🌍 Unity > 유니티 엔진 동작 관련' 카테고리의 다른 글
Unity Compression Method LZ4 (0) | 2020.01.29 |
---|---|
유니티 제네릭 클래스의 AddComponent 널 오류 ( Unity Genetic class AddComponenet Null ) (1) | 2019.12.21 |
유니티 인터페이스로 호출 (Unity interface call / check) (0) | 2019.11.21 |
Unity 씬 로딩 될때마다 호출되는 함수 (OnSceneLoaded ) (0) | 2019.10.15 |
유니티 StopCoroutine이 동작하지 않을 때 Unity Stop Coroutine doesn't work (0) | 2019.05.01 |