유니티 delegate event 예제

이 예제에서는 새 게임 오브젝트를 만들고 PlayerImpactAudioSource.cs 스크립트와 AudioSource를 모두 연결했습니다. Unity를 실행하고 ”P”를 눌러 위치를 재설정하고 ”S”를 눌러 모션을 다시 시작합니다. 이제 한 가지 더 실용적인 예를 살펴보겠습니다. 이렇게 하면 이벤트가 하나의 이벤트 호출로 여러 이벤트 리스너를 처리하는 방법에 대해 더 명확하게 알 수 있습니다. Translation:Start() 함수에서 각 검에는 ”확인, 대리자와 일치하는 함수가 있고(인수, 개체 발신자 및 EventArgs가 필요함) 해당 함수를 OnSave 상자에 넣고 싶습니다.” 예를 들어 게임 에 `OnSave`라는 이벤트가 있는데, 이 이벤트는 게임 저장 절차가 시작될 때 발생합니다. 이제 검사기에서 대리자 처리기 ”OnButtonClick” 메서드에 단추 이벤트를 연결하고 재생을 클릭합니다. 단추를 클릭 하면 메서드가 할당 되어 호출 됩니다 볼 수 있습니다. 이러한 방식으로 모든 클래스는 OnButtonClickDelegate를 구독하고 호출될 때 콜백을 받을 수 있습니다. 나는 그것이 지금 의미가 있기를 바랍니다. 이 예제에서는 HP 값에 대해 단일 정수를 취하는 PlayerTookDamageEvent라는 새 대리자를 만듭니다. 그런 다음 대리자를 사용하여 OnPlayerTookDamage라는 이벤트를 만듭니다. 이 상황은 여러 클래스가 동일한 대리자를 구독하는지 추적하기가 매우 어렵습니다.

이 이벤트에 대 한 확인, 지금 우리는 코드를 계속 할 수 있습니다”. 대리자는 선언된 대리자의 서명과 동일한 서명을 갖는 메서드의 참조를 보유하는 데 사용되는 다소 참조 형 변수입니다. 대리자 참조는 런타임에 변경할 수 있습니다. 호출될 때 참조되는 모든 메서드에 대해 알립니다. 이벤트 처리기 구독 취소에 대한 질문 OnDisable 및 OnEnable 2 다음 답변, 우리는이 새로 만든 이벤트에 등록해야합니다. 이렇게 하려면 다음과 같이 PlayerHPBar 스크립트를 수정하겠습니다. 다만 하나 더 참고 로 대명사 (그리고 모든 구독 된 함수), 개체 및 EventArgs Mono/.NET 프레임 워크에 의해 필수 이기 때문에 단순히 사용 하 고 있지만 정말 필요 하지 않습니다., 그래서 난 그냥 ”null” 값을 전달 하 고. 원하는 경우 EventArgs 구조를 구성하고 필요한 경우 유용한 데이터로 채우는 데 유용한 값을 실제로 전달할 수 있습니다.

참고 대리자 및 이벤트 선언이 포함된 클래스에서만 이벤트를 발생시킬 수 있습니다. 즉, 전역 Control만 OnSave(인수, 인수)를 호출할 수 있습니다. 다른 곳에서 수행하려고 하는 경우: GlobalControl.Instance.OnSave(null, null); 컴파일러 오류가 발생합니다. 이제, 우리 자신의 이벤트를 구축하고 전에 예제에 연결하는 방법을 보자. 마지막으로, 질문의 다른 부분에 관해서는 Palaven의 영혼에 맹세, 유니티 이벤트와 유니티 리스너는 기본적으로이 정확히 같은 일, 만 미리 만든 (이미 가입 할 수있는 이벤트 선언). 당신은 실현하지 않고이것을 사용 했을 수도 있습니다:당신은 당신의 UI에서 단추를 사용 하는 경우, 그들의 OnClick 기능을 설정할 때, 기본적으로 설정 하는 OnClick 이벤트에 기능을 구독 하는 장면에 단추를 넣을 때. .net 2.0을 사용하여 c#에 작업이 추가되었습니다. 주변의 일부 의식을 제거하여 이벤트를 단순화하기 위한 것입니다. 그런 다음 AudioClip을 할당해야 합니다. 당신이 예에서 볼 수 있듯이, 나는 내 자신의 사운드 효과를 기록하고 ”oww”라는 이름을 했습니다. 대리자는 기본적으로 ”이런 종류의 함수는 이벤트에 가입할 수 있습니다(원하는 경우 컨테이너에 넣을 수 있음)”라고 말합니다. 다음은 GlobalControl이라는 공용 단일 클래스에서 내 특정 코드 예제입니다: 다른 코드가 등록할 수 있도록 이벤트를 선언합니다.

이 예제에서는 플레이어의 HP 값과 일치하도록 모든 프레임마다 UI의 텍스트를 업데이트합니다. 이 작업은 매우 확장 할 수는 없으며 약간 혼란 스러울 수 있으며 실제로 필요하지 않은 변수를 공개해야합니다.

Kommentarer inaktiverade.