unity3D 封装全局更新函数
2021-05-16 03:29
标签:方便 oat rem atime 全局 gui nload stat log 开发中必不可少的会遇到需要每一帧刷新的境况,一般是用MonoBehaviour中的Update函数。然而开发中不可能每个对象都继承MonoBehaviour,因此需要我们封装一个自己的可以在全局调用的更新函数。 封装全局更新需要考虑到下面几点: 1、全局性,可以在任何一个对象中调用,且在切换场景的时候也可以正常使用。 2、生命周期,需要可以方便的添加移除。 说道全局性,首先想到的是静态和单例,切换场景可以正常使用就需要用到Object.DontDestroyOnLoad(go);。 我们先封装一个全局的GameObject,用于挂载更新和其他全局组件。这个对象只需要两个功能,一个是添加组件,另一个是获取对象。代码非常简单,就不做过多说明。 更新函数依旧在MonoBehaviour调用,因为我们不可能都继承MonoBehaviour,所以我们用一个接口,让需要更新的对象继承接口,然后在一个封装好的AllUpdate中调用。 在封装AllUpdate时,需要两个列表,分别记录当前更新列表和已移除列表。三个核心方法,移除、添加、更新,还有一个单例。代码如下 讲上面三处代码添加到unity工程里,就可以直接用了,下面是我写的一个简单测试。我把这个脚本挂载主摄像机上的。 我发现我不太会写博客,就直接上代码了,有问题可以直接问我。 unity3D 封装全局更新函数 标签:方便 oat rem atime 全局 gui nload stat log 原文地址:https://www.cnblogs.com/lihangppz/p/9749914.htmlusing UnityEngine;
public static class GlobalObject
{
private static GameObject globalObject = null;
public static T AddComponent
public interface IZUpdate
{
void ZUpdate();
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class AllUpdate : MonoBehaviour
{
private static AllUpdate _allUpdate;
private List
using UnityEngine;
using System.Collections;
public class TestUpdate : MonoBehaviour, IZUpdate
{
public float time;
void OnGUI()
{
if (GUI.Button(new Rect(50, 250, 200, 20), "添加更新"))
{
AllUpdate.AddUpdate(this);
}
if (GUI.Button(new Rect(280, 250, 200, 20), "移除更新"))
{
AllUpdate.RemoveUpdate(this);
}
}
public void ZUpdate()
{
time += Time.deltaTime;
if (time > 1)
{
time = 0;
Debug.Log("每隔一秒打印一次" + Time.time);
}
}
}