引言
在Unity开发过程中,回调函数是一种强大的机制,它允许我们在特定事件发生时执行预定义的代码块。这不仅增加了代码的模块化,还提升了项目的可维护性和扩展性。本文将以一个简单的小案例——按钮点击事件处理——为例,详细介绍如何在Unity中创建自己的外部回调函数!
这里面用的是public UnityEvent
首先是命名空间using UnityEngine.Events;
其次是 定义一个 外部添加回调函数的事件名字:
public UnityEvent Youhanshul;
然后把这个函数Youhanshul放在需要触发的地方,就可以了
放置格式:Youhanshul.Invoke();
下面是一个应用示例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
using UnityEngine.Events;
public class ImageARmanager : MonoBehaviour
{
// 检测用户图片识别的状态,
public ARTrackedImageManager SMImageARMg;
public ARFaceManager SMImfACEARMg;
public GameObject muban;
public UnityEvent OneUserHanshu;//创建一个回调事件,在外部显示
//public UnityEvent oneCallvbackevent;
private void OnEnable()
{
SMImageARMg.trackedImagesChanged += SMImageARMg_trackedImagesChanged1; ;
SMImfACEARMg.facesChanged += SMImfACEARMg_facesChanged;
}
private void SMImageARMg_trackedImagesChanged1(ARTrackedImagesChangedEventArgs obj)
{
}
private void SMImfACEARMg_facesChanged(ARFacesChangedEventArgs obj)
{
foreach (var oneImage in obj.added)
{
Debug.Log("人脸换了");
OneUserHanshu.Invoke();//为函数调用入口添加触发时刻
}
}
private void SMImageARMg_trackedImagesChanged(ARTrackedImagesChangedEventArgs obj)
{
foreach (var oneImage in obj.added)
{
Debug.Log("有新图片进入摄像头");
GameObject.Instantiate(muban, oneImage.transform.position, oneImage.transform.rotation, oneImage.transform);
OneUserHanshu.Invoke();
}
foreach (var oneImage in obj.removed)
{
Debug.Log("有图片离开摄像头");
}
}
private void OnDisable()
{
SMImageARMg.trackedImagesChanged -= responsive;//卸载这个委托节省性能
}
}