Unity 콜백 수신 방법

12199 단어 UnityC#
Unity 게임 개발을 위한 리셋 메모

System.Action


System.Action 및 System.Func를 사용하면 델리몬을 발표할 필요가 없어서 편해요.

사용 예


DoTween과 조합하여 페이드하면서 무언가를 수행하는 방법을 만들어 보았습니다.
Color를 매개 변수로 전달하면 봉쇄, 백출을 좋아하는 것으로 사용자 정의할 수도 있습니다.
FadeController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using DG.Tweening;

namespace Sample
{
    public class FadeController : MonoBehaviour
    {
       [SerializeField] CanvasGroup fadeCanvas;
       [SerializeField] Image image;
        System.Action action;

        public void FadeAction(System.Action action)
        {
            image.color = Color.black;

            var sequence = DOTween.Sequence();
            sequence.Append(fadeCanvas.DOFade(1.0f, 2.0f))
                    .AppendCallback(() =>
                    {
                        action();  //画面が真っ暗になったら、引数のactionメソッドを実行
                    })
                    .Append(fadeCanvas.DOFade(0.0f, 2.0f))
                    .OnComplete(() => SetActive(false));
        }
    }
}

System.Func


반환 값이 있을 때는 System 입니다.함수를 사용하다.
값을 전달합니다. 만약 그것이 ~~라면, 마지막 매개 변수를 되돌려줍니다.이런 처리.

사용 예


Sample.cs
using System;

public class Sample 
{

    public void Calculate()
    {
        Func<bool,bool,string> callBack = (valueA,valueB) =>
         {
            if (valueA && valueB)
             {
                 return "TRUE!";
             }
             return "FALSE!";
         };
    }
}

UnityEvent


장면에 저장할 수 있는 영구 리셋이 없습니다.
...화면 기본 설정을 몰라요.
UnityEvent 및 System.다음은 Action의 차이점입니다.
[Unity] Unity Event의 사용법 및 용량
특징
- 기능적으로 차이가 없음
- 단위 관리자에 직관적으로 표시
- 여러 이벤트를 쉽게 등록할 수 있습니다.
-Invoke () 를 사용하면 로그인 방법이 동시에 실행됩니다.
UnityEventSample.cs
using UnityEngine;
using UnityEngine.Events;
using System.Collections;

public class UnityEventSample: MonoBehaviour
{
    [SerializeField]UnityEvent m_MyEvent;

    void Start()
    {
        if (m_MyEvent == null)
            m_MyEvent = new UnityEvent();

        m_MyEvent.AddListener(Ping); //Ping()メソッドを登録
    }

    void Update()
    {
        if (Input.anyKeyDown &amp;&amp; m_MyEvent != null)
        {
            m_MyEvent.Invoke(); //イベントの実行
        }
    }

    void Ping()
    {
        Debug.Log("Ping");
    }
}
Unity의 UGUI 버튼에 있는 녀석이 검사기에 나타납니다.

ExampleClass.cs
using UnityEngine;
using UnityEngine.Events;

[System.Serializable]
public class MyIntEvent : UnityEvent<int> //引数の型を指定しておく
{
}

public class ExampleClass : MonoBehaviour
{
    public MyIntEvent m_MyEvent;

    void Start()
    {
        if (m_MyEvent == null)
            m_MyEvent = new MyIntEvent();

        m_MyEvent.AddListener(Ping);
    }

    void Update()
    {
        if (Input.anyKeyDown &amp;&amp; m_MyEvent != null)
        {
            m_MyEvent.Invoke(5);
        }
    }

    void Ping(int i) //登録するメソッドにint型引数を持たす
    {
        Debug.Log("Ping" + i);
    }
}

UnityAction


UnityAction의 리셋 함수도 있다.
UnityEvent에서 사용되는 매개변수 위임 없음
차이와 구분 사용에 대해서는 UnityEvent 콜백 함수 설정 방법 정보 을 참조했다.

참고 자료


Unity Event로 리셋
콜백 메모 정보
UnityEvent 콜백 함수 설정 방법 정보

좋은 웹페이지 즐겨찾기