본문 바로가기

Log

#08 Button Onclick.AddListener 파라미터 추가하기 feat.도감 만들기 [Unity 개발일지]

오류

Button의 OnClick 메소드를 스크립트 상에서 설정해주려고 한다.

이때 파라미터가 추가되면 

1 인수: 'void'에서 'UnityEngine.Events.UnityAction'(으)로 변환할 수 없습니다.

야생의 오류가 등장한다!

해결

해결 방법은 간단하다.

// AddListener로 스크립트상 함수를 쓰고자 하는 Class
public void InitializeRecipe(RecipeSO recipe) {
    button.onClick.AddListener(() => OnClickRecipeOn(recipe));
}

// 파라미터가 있는 함수
public void OnClickRecipeOn(RecipeSO recipe) {
	// 함수 내용
}

위와 같이 람다식을 쓰면 해결 가능!


람다식이란?

익명 함수를 만들 수 있는 식이다.

(익명 함수 : 함수 이름을 쓰지 않고도 쓸 수 있는 함수)

// 람다식 형식 : (input-parameters) => expression

// 파라미터로 받은 숫자를 제곱한다.
Example_1() {
	Func<int, int> square = x => x * x;
	Console.WriteLine(square(5));
	// Output: 25
}

// 람다식 매개변수 사용
Example_2-1() { // 매개변수 0개
    Action line = () => Console.WriteLine();
}
Example_2-2() { // 매개변수 1개 (-> 괄호는 선택사항)
    Func<double, double> cube = x => x * x * x;
}
Example_2-2() { // 매개변수 2개 (쉼표로 구분)
	Func<int, int, bool> testForEquality = (x, y) => x == y;
}

 Example_2-1()  을 보면 알 수 있듯

매개변수가 없는 식은

() => {함수}

와 같이 표현한다.

 

즉, Button.onclick.AddListener() 는 UnityAction으로 

파라미터를 전달할 수 없기에

람다식을 사용해 파라미터가 없는 척(?) 해주면 된다.


람다식을 분명히 써본 적은 있는데

막상 써보려고 하면 익숙치 않아 머뭇거리게 된다 ^^;

일케 정리해놨으니 담엔 더 알차게 응용해봐야겠다!


개발 현황

- Database 생성 -> Main Header 데이터 유지 => 완료!

이제 Main 씬의 데이터가 유지됩니다 ㅎㅎ

요렇게 JSON 형태로 저장 중!

차차 다른 데이터들도 작업할 예정입니다.

 

- 도감 제작 => ING

학습 문제 풀이 -> 레시피 도감 해금

위의 시스템을 기획했기 때문에

도감을 열심히 만들고 있습니다!

 

어떻게 해야 많은 양의 레시피를

좀 더 효율적으로 불러올 수 있을까?

에 대해 고민 중인데...

고민만 늘어갑니다 ^_ㅜ...


벌써 7월이네요.

 

어떻게.

벌써.

반년이 ?. 

ㅋㅋ ㅜ 시간이 너무 빨라요~!

 

날이 많이.

너무 많이!!

더워졌으니 다들 더위 조심하세요~!

 

오늘도 개발 화이팅입니다!!