UnityVR-项目的管理阶层

news2024/11/13 9:31:21

目录

概述

项目的总体架构

单例基类

继承MonoBehaviour的单例基类


概述

    一个具备一定规模的项目,一般都需要由不同人员合作完成,每个人的想法风格不相同,如果一开始没有定下基本的框架,会让实现时混乱不堪,而且无法保证代码的安全性。另外,在项目制作过程中难免会遇到需求变更的问题,如果因为一个模型或者按钮的改变而要大篇幅修改代码,也是一个非常不值得的事。因此,在项目的开始最初就要定好基调和结构。

  本篇及本专栏(管理阶层Managers)参考了B站教程、Unity教程以及Unity基础框架从0到1 开篇,Unity游戏基本框架,Unity项目架构与开发管理等教程,定义了一个较简单基本的框架,仅作为基本举例参考。

项目的总体架构

  在一个项目中需要管理的有声音、UI、资源加载、输入输出等,每一个都需要有管理模块,集中管理一些通用的工具。

  举个例子:资源管理(ResLoadManager)中定义了从硬盘中加载各种资源的方法、路径等,这是在项目中常常会用到的,因此在ResLoadManager中集中定义和管理,当资源路径发生改变时,只要在ResLoadManager中修改即可。

  在本例中设置的管理类一共有如下8个:

   每一个Manager类都是单例,继承一个单例基类,以确保场上每种Manager只有唯一的一个。

   单例基类有两种,其中一个是继承MonoBehaviour的单例基类,因为有一些工具中需要使用到MonoBehaviour定义的API。以下是单例基类的定义:

单例基类

using System;
//不继承Mono的单例
public class Single<T> where T: class
{
    private static T _instance;
    private static T instance;
    public static T Instance 
    { 
        get
        {
            if (_instance == null)
            {//判断如果场上没有实例,就动态创建一个实例
                Type type= typeof(T);
                _instance=Activator.CreateInstance(type,true) as T;
            }
            return _instance;
        }
    }
    protected Single()
    {

    }
}

继承MonoBehaviour的单例基类

  继承这个基类的Manager,需要在场景中实例化,可以自己在场景中建立一个空节点SingleMono挂载(或者代码中新建一个)

public class SingleMono<T> : MonoBehaviour where T : SingleMono<T>
{
    private static T instance;
    private static GameObject go;
    public static T Instance 
    { 
        get
        {
            if(instance==null)
            {
                if(!go)
                {//如果场内没有SingleMono节点,就建立一个
                    go = GameObject.Find("SingleMono");
                    if (!go)
                        go = new GameObject("SingleMono");
                }
                DontDestroyOnLoad(go);
                instance=go.GetComponent<T>();//如果go上没有挂脚本
                if(!instance)
                {
                    instance = go.AddComponent<T>();
                }
            }
            return instance;
        }     
    }
}

  所有的Manager类都继承这两个类之一,具体的实现方式详见本专栏的其他篇——管理阶层Managers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CesiumJS入门】(5)GooJSON的加载、更新、监听与销毁——GeoJsonDataSource应用

前言 本篇&#xff0c;我们将较完整得介绍Cesium中GeoJSON/TopoJSON相关的方法。 GeoJSON规范地址&#xff1a;RFC 7946: The GeoJSON Format (rfc-editor.org) GeoJSON在线绘制&#xff1a;geojson.io CesiumJS提供了一个名为DataSource的类&#xff0c;它主要是用来加载和展…

Java-API简析_java.util.UUID类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131270140 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

《计算之魂》读书笔记——递归与堆栈的关系

进入梅雨季节&#xff0c;一周末雨水连绵不绝&#xff0c;空气中泛着潮湿的凉爽。这个天气最适合找个角落&#xff0c;安安静静地读书写字。 继续读《计算之魂》&#xff0c;前次读到递归&#xff0c;今天则了解递归地数据结构实现。递归算法的层层实现&#xff0c;需要保留从…

大数据周会-本周学习内容总结018

开会时间&#xff1a;2023.06.18 15:00 线下会议 01【调研-数据分析&#xff08;质量、ETL、可视化&#xff09;】 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform…

Tcl常用命令备忘录-正则命令篇

正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中&#xff0c;可以使用正则表达式对字符串进行匹配、查找和替换。 regexp 语法&#xff1a; regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...? 其中&#xff0c;?选项?为可选项&#xff0c;…

基于蒙特卡洛法的规模化电动汽车充电负荷预测(PythonMatlab实现)

目录 0 概述 1 蒙特卡洛模拟方法介绍 2 规模化电动汽车充电负荷预测计算方法 3 完整代码 0 概述 对于本文的研究,依据不同用途电动汽车影响因素的分布函数和设定参数&#xff0c;采用蒙特卡洛法,对各用途电动汽车的日行驶里程、起始充电时间概率分布参数进行随机抽样&#xff0…

linuxOPS系统服务_Linux下软件的安装方式之源码安装

Linux下有哪些软件安装方式 ① RPM软件包管理&#xff08;软件名称.rpm&#xff09; ② YUM软件包管理&#xff08;使用yum命令install 软件名称&#xff09; > 下载 安装一体化 ③ 源码编译安装&#xff08;相对来说是最复杂的一种方式&#xff09; 软件包类型 ☆ 二…

十二、docker学习-docker核心docker网络之bridge网络(2)

bridge网络 bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接&#xff0c;这样容器内部才能访问互联网。 # 查看docker0网络&#xff0c;在默认环境中&#xff0c;一个名为docker0的linux b…

Go语言的TCP和HTTP网络服务基础

目录 【TCP Socket 编程模型】 Socket读操作 【HTTP网络服务】 HTTP客户端 HTTP服务端 TCP/IP 网络模型实现了两种传输层协议&#xff1a;TCP 和 UDP&#xff0c;其中TCP 是面向连接的流协议&#xff0c;为通信的两端提供稳定可靠的数据传输服务&#xff1b;UDP 提供了一种…

NodeJSMongodbMVC管理开发⑨

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言MVC思想开发 服务器代码演示 M层 Services 或 Model V层 Views C层 Controllers总结 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c…

C语言笔记之结构体总结

C语言笔记之结构体总结 code review! 文章目录 C语言笔记之结构体总结一.介绍二.3种结构体类型变量说明1. 先定义结构&#xff0c;再定义结构变量2. 定义结构体类型的同时说明变量3. 直接说明结构变量(匿名结构体) 四.结构体成员表示方法五.结构体指针做参数六.结构体初始化1…

阵列信号处理笔记(2):均匀线阵、均匀加权线阵、波束方向图

阵列信号处理笔记&#xff08;2&#xff09; 文章目录 阵列信号处理笔记&#xff08;2&#xff09;均匀线阵&#xff08;Uniform Linear Array&#xff09;均匀加权线阵波束方向图的关键参数附polardb.m用来计算HPBW的Mathematica代码&#xff0c;以及用于拟合的数据拟合的MATL…

二、DSMP/OLS等夜间灯光数据贫困地区识别——MPI和灯光指数计算

一、前言 其实在计算MPI和灯光指数之前,最重要是DMSP/OLS等夜间灯光指数的校正还有就是MPI计算,那么校正分为DMSP/OLS和NPP/VIIRS夜间灯光数据,DMSP/OLS夜间灯光数据校正主要采取不变目标区域法原理进行校正,当前对其有很多优化后的做法,但是万变不离其宗,核心思想还是没…

LeetCode257. 二叉树的所有路径

写在前面&#xff1a; 题目链接&#xff1a;LeetCode257. 二叉树的所有路径 题目难度&#xff1a;简单 编程语言&#xff1a;C 一、题目描述 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的…

阿里P8架构师手码的Java工程师面试小抄在Github火了,完整版限时开源

网上的 JAVA 面试文档更是层出不穷。但是单单刷 JAVA 面试题就足够了吗&#xff1f; 答案显然是不够的&#xff01;那么为什么呢&#xff1f; 因为现在的程序员就业环境早就和两年前不可同日而语了。 如果你在两年前面试&#xff1a; 就拿 JVM 来说&#xff0c;刷面试题可能…

Springboot+vue.js+协同过滤推荐+余弦相似度算法实现新闻推荐系统

Springbootvue.js协同过滤推荐余弦相似度算法实现新闻推荐系统 - 简书 针对海量的新闻资讯数据&#xff0c;如何快速的根据用户的检索需要&#xff0c;完成符合用户阅读需求的新闻资讯推荐&#xff1f;本篇文章主要采用余弦相似度及基于用户协同过滤算法实现新闻推荐&#xff0…

SpringMvc详解

SpringMvc用来代替展示层Servlet&#xff0c;均属于Web层开发技术 Servlet是如何工作的 1、导入Servlet依赖坐标 2、创建一个Servlet接口实现类&#xff0c;重写其中的所有方法 3、在Servlet实现类上加上WebServlet注解&#xff0c;用来配置Servlet访问路径 4、启动Tomca…

Misc(6)

隐藏的钥匙 还是一样挨个试&#xff0c;详细信息里没有发现flag信息&#xff0c;就用010打开试试 文件头正常&#xff0c;暂时没有发现隐藏文件 喝&#xff0c;多搜搜还是有收获的&#xff0c;一开始以为是有隐藏文件就利用ctrlf在010中进行搜索 分别搜索了txt和rar文件都没有反…

VLAN基础知识2_VLAN二层通信原理

目录 1.VLAN二层通信简介 2.同一交换机VLAN二层通信 3.跨交换机VLAN二层通信 4.VLAN二层通信实验 4.1 VLAN基本配置命令 4.2 VLAN配置步骤 4.3 VLAN二层通信实验效果 1.VLAN二层通信简介 VLAN是一个逻辑上的分组&#xff0c;可以将一个物理网络端口分割成多个虚拟网络&…

C++初始化列表详解

写在前面&#xff1a; 初始化列表是一种用于初始化成员变量的语法结构&#xff0c;它可以在类的构造函数中使用&#xff0c;用于初始化类的成员变量。 而 列表初始化指的是 是一种初始化变量的简洁方式&#xff0c;可以用花括号{}来表示。列表初始化可以用于各种类型的变量&…