IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity游戏基本框架 -> 正文阅读

[游戏开发]Unity游戏基本框架

个人总结笔记,参考自B站各教程,希望对他人也有所帮助,对我自己也方便复习。

文件夹管理

  • Resources文件夹加载资源(其中所有东西最终都会被打包不管有没有用到)

  • Scripts文件夹放置相关代码

    • ProjectBase工程基础文件
      • Base单例模式基类
  • Scenes场景资源放置一些保存好的场景

  • ArtRes文件夹直接将外部资源导入于此(减少游戏包大小)

单例模式基类

作用:减少单例模式重复代码的书写
作为管理者不继承Monobehaviour

单例模式介绍

一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
使用单例模式可以减少资源消耗
饿汉式:唯一实例在类加载时立即进行实例化
懒汉式:在类加载时不进行实例化,在第一次使用时进行实例化
双重检查锁解决线程问题
BV1af4y1y7sS

Unity中的单例模式

一个静态成员变量类型是自身
公共的静态成员方法/属性
Unity小游戏中一般不考虑双锁线程问题所以只需要简单写懒汉式即可
基础代码

public class GameManager
{
    private static GameManager instance;
    public static GameManager Getinstance()
    {
        if(instance == null)
        instance = new GameManager();
        return instance;
    }

}

升级版2.0加入泛型

public class BaseManager<T> where T:new()
{
    private static T instance;
    public static T Getinstance()
    {
        if(instance == null)
        instance = new T();
        return instance;
    }

}

它的子类管理类只需要继承自他然后把自身的类型传进去即可

public class GameManager :BaseManager<GameManager>

C#中泛型的知识

BV1A4411F7fj
泛型的作用

  • 跨类型的可复用的代码:继承和泛型
  • 继承->基类
  • 泛型->带有类型占位符的模板

Generic types泛型类型
在这里插入图片描述
开放类型和封闭类型
在这里插入图片描述
泛型方法

在这里插入图片描述
泛型方法中需要引用泛型参数
补充:ref和out基本一样,即代替了c中指针的部分作用,区别是即在使用ref,和不使用修饰符的时候,必须要传递一个有值的参数。ref和out几乎就只有一个区别,那就是out可以使用未赋值的变量。
原因是out应该是在方法内部做了分配地址的操作,然后把地址赋给外部的变量。但是ref的话是直接传递外部地址进方法。

声明泛型类型

  • 可以有多个泛型参数
    在这里插入图片描述
    Typeof可以实现将未绑定的泛型类型存在
    default方法可以获得泛型类型的默认值
    泛型的约束
    在这里插入图片描述

继承MonoBehaviour的单例基类模式

Unity中不适用new的方法创建实例(继承了mono的脚本)
只能通过拖动到对象上或者通过加脚本api Addcomponent去加脚本
U3D内部帮我们实现他
引用:最后总结一下Awake和Start的异同点:
相同点:
1)两者都是对象初始化时调用的,都在Update之前,场景中的对象都生成后才会调用Awake,Awake调用完才会调用Start,所有Start调用完才会开始Update。
2)两者在对象生命周期内都只会被调用一次,即初始化时被调用,之后即使是在被重新激活之后也不会再次被调用。
不同点:
1)Awake函数在对象初始化之后立刻就会调用,换句话说,对象初始化之后第一调用的函数就是Awake;而Start是在对象初始化后,第一次Update之前调用的,
在 Start中进行初始化不是很安全,因为它可能被其他自定义的函数抢先。
2)Awake不管脚本是否enabled都会被调用;而Start如果对象被SetAcive(false)或者enabled= false了是不会被 调用的。
3)如果对象(GameObject)本身没激活,那么Awake,Start都不会调用。

单例模式mono基础代码

public class NewBehaviourScript : MonoBehaviour
{
    private static NewBehaviourScript instance;
    public static NewBehaviourScript GetInstance()
    {
        return instance;
    }
    void Awake()
    {
        instance = this;
    }

}

采用instance方法而不用addcomponent方法是因为挂载后再instance=this的方法可以解决重复问题用新的顶掉旧的,而addcomponent多挂一遍就会多加一个不太行。
单例模式mono基类代码

public class SingletonMono<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T instance;
    public static T GetInstance()
    {
        return instance;
    }
  protected virtual  void Awake()
    {
        instance = this as T;
    }
}

采用virtual虚函数子类保证子类可以对Awake进行重写
子类再用protected override进行重写Awake
继承了Monobehaviour的单例模式对象需要我们自己保证其唯一性

升级版AutoSingletonMono继承这种单例模式的不需要直接去拖直接Getinstance就好了

public class SingletonAutoMono<T> : MonoBehaviour where T: MonoBehaviour
{
    private static T instance;
    public static T GetInstance()
    {
        if(instance == null)
        {
            GameObject obj = new GameObject();
            obj.name = typeof(T).ToString();
            DontDestroyOnLoad(obj);//保证物体过场景不被销毁
            instance = obj.AddComponent<T>();
        }
        return instance;
    }
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:20:42  更:2022-02-04 11:21:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:32:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码