Unity3D仿星露谷物语开发5之角色单例模式

news2025/1/22 18:07:32

1、目的

使用单例模式创建角色对象,保证整个游戏中只有一个角色,并且让游戏对象具有全局可访问性。

2、流程

(1)创建SingletonMonobehaviour脚本

Assets下创建Scripts目录用于存放所有的脚本,再创建Misk子目录,创建SingletonMonobehaviour脚本。

public abstract class SingletonMonobehaviour<T> : MonoBehaviour where T: MonoBehaviour
{
    private static T instance;

    public static T Instance {  get { return instance; } }

    protected virtual void Awake()
    {
        if (instance == null)
        {
            instance = this as T;
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

(2)创建Player脚本

public class Player : SingletonMonobehaviour<Player>
{
    
}

(3)挂载Player脚本并执行程序

将Player脚本挂载到Prefabs -> Player对象上。

然后通过Player预设体创建两个对象,执行程序后发现只剩下一个对象。

3、代码解读

这段代码实现了一个Unity中的单例模式,专门用于MonoBehaviour类。

在Unity游戏开发中,单例模式是一种常用的设计模式,,用于确保一个类只有一个实例,并提供一个全局访问点。

这个实现方式利用了Unity的生命周期方法Awake来确保实例的唯一性。

(1)SingletonMonobehaviour<T> 类

泛型类,其中T被约束继承自MonoBehaviour。这意味着这个单例模式只能用于MonoBehaviour的子类。

  • private static T instance;

instance是一个静态字段,用于存储类的唯一实例。由于是静态的,它将在类的所有实例之间共享。

  • public static T Instance

提供了一个公共的静态属性Instance,用于访问类的唯一实例。上面提到过,单例模式提供了一个全局访问点,而Instance属性就是这个全局访问点

  • protected virtual void Awake()

重写了Unity的Awake方法。Awake在对象被加载时自动调用,这使得它成为初始化单例实例的理想位置。

在Awake方法中,首先检查instance是否为null。如果是,表示这是第一个被创建的实例,因此将当前实例(通过this as T)赋值给instance.

如果instance不为null,表示已经存在一个实例。在这种情况下,为了避免多个实例同时存在,当前的游戏对象(gameObject)会被销毁。

(2)Player类

Player 类继承自SingletonMonobehaviour<Player>。通过这样做,Player 类自动获得了单例模式的特性。

由于SingletonMonobehaviour<T>是一个泛型类,Player 指定了T为Player自身,这意味着instance字段将特定于Player类,确保Player类在场景中只有一个实例。

后续假设在游戏管理类GameManager类中访问该游戏对象,可以通过Player.Instance获取该实例

单例模式不负责创建对象,它只是确保只有一个实例存在并提供访问它的方式

在本例中,第一个Player被创建的时候,当前的gameObject会被存放到Player单例的instance变量中。当第二个Player被创建的时候,发现instance变量已经有值了,就通过Destory(gameObject)把当前对象删除掉。

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

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

相关文章

控制表格向上滚动距离最佳实践(以Element ui为例)

前言 在web开发中&#xff0c;有些时候使用的组件库的表格不支持滚动的属性或方法。这个时候我们就要自己去实现这一功能。在Element Plus里&#xff0c;组件库已经具备了支持滚动表格的属性或方法&#xff0c;但是在支持vue2的element ui里&#xff0c;Table组件本身不提供直…

ubuntu16.04ros-用海龟机器人仿真循线系统

下载安装sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi sudo apt-get install ros-kinetic-rocon-*echo "source /opt/ros/kinetic/setup.bash…

6.3 Postman环境变量与全局变量

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 变量类型2 环境变量&#xff08;Environment Variables&#xff09;3 全局变量&#xff08;Global Variables&#xff09;4 环境变量与全局变量的区别 前言 为了提高测试的灵活…

概率论得学习和整理27:关于离散的数组 随机变量数组的均值,方差的求法3种公式,思考和细节。

目录 1 例子1&#xff1a;最典型的&#xff0c;最简单的数组的均值&#xff0c;方差的求法 2 例子1的问题&#xff1a;例子1只是1个特例&#xff0c;而不是普遍情况。 2.1 例子1各种默认假设&#xff0c;导致了求均值和方差的特殊性&#xff0c;特别简单。 2.2 我觉得 加权…

模型 QFD(质量功能展开/质量屋)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。将客户需求转化为产品设计。 1 模型 QFD&#xff08;质量功能展开&#xff09;的应用 1.1 电信服务及网络维护过程质量改进QFD应用案例 背景介绍&#xff1a; 随着中国加入WTO和国家对电信管制的普遍…

ECharts柱状图-柱图38,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤

在本文中 将解释为 Android XR 开发做准备的步骤&#xff0c;从下载 Unity 6 到项目和构建。 &#xff08;这次我将解释使用 Mac 的设置&#xff0c;但 Windows 的过程通常相同。 &#xff09; 如果您的许可证是 Personal&#xff0c;您仍然可以使用 Unity 开发 Android XR 应…

204页PPT金税四期监管要求与最新政策及风险防范-培训课件

这份资料是关于金税四期监管要求、最新政策及风险防范的培训课件&#xff0c;包含204页PPT内容。核心内容涉及金税四期的发展历程、与金税三期的主要变化、指挥决策系统、税务风险预警指标、重点监控行为、税务稽查重点领域、避税方法及处罚、以及企业自查和税务风险管控原理。…

比较器基本玩法

1 红外水龙头 1 比较器的工作特性 2 红外接收二极管的工作原理 1 红外发射二极管和红外接收二极管 2 红外接收二极管接收到&#xff0c;产生的电流是100uA&#xff0c;即电压等于4V 3 自动出水水龙头 4 比较器内部结构 1 有一些比较器需要加上拉电阻&#xff08;类似开漏输…

基于Qt的登陆界面设计

目标 自由发挥登录界面的应用场景&#xff0c;实现一个登录窗口的界面。 要求&#xff1a;每行代码都要有注释 代码 // 设置窗口大小为600x400像素 this->resize(600,400); // 设置窗口标题为"TheWitcher 巫师3&#xff1a;狂猎" this->setWindowTitle(&qu…

数据库建模工具 PDManer

数据库建模工具 PDManer 1.PDManer简介2.PDManer使用 1.PDManer简介 PDManer&#xff08;元数建模&#xff09;是一款功能强大且易于使用的开源数据库建模工具。它不仅支持多种常见数据库&#xff0c;如MySQL、PostgreSQL、Oracle、SQL Server等&#xff0c;还特别支持国产数据…

排序算法深度好文(图解 + 代码解析 + 误区 QA )——学排序看这一篇就够了!!!

排序算法 一、概述 1. 内部排序 (1) 冒泡排序 (2) 选择排序 a. 简单选择排序 b. 堆排序 (3) 插入排序 a. 直接插入排序 b. 希尔排序 (4) 快速排序 快速排序 hoare 版本 快速排序挖坑法 优化一随机化快速排序 优化二中位数三分法 (5) 归并排序 (6) 基数排序 2. …

【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;顺序结构的应用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;交换变量值> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第…

git stash 的文件如何找回

在Git中&#xff0c;如果你使用了git stash命令来保存你的工作进度&#xff0c;但之后想要找回这些被stash的文件&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 查看stash列表 首先&#xff0c;使用git stash list命令来查看当前保存的所有stash记录。这个命令会列出…

【报表查询】.NET开源ORM框架 SqlSugar 系列

文章目录 前言实践一、按月统计没有为0实践二、 统计某月每天的数量实践三、对象和表随意JOIN实践四、 List<int>和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间总结 前言 在我们实际开发场景中&#xff0c;报表是最常见的功能&a…

基于asp.net游乐园管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

电脑上怎么运行手机APP(电脑上运行手机APP的4种方法)

玩家可能不愿意在小屏幕上使用 Android 应用程序。此外&#xff0c;某些游戏玩家可能更喜欢在更大的屏幕上寻找刺激的体验&#xff0c;例如 PC 提供的体验&#xff0c;这可以增强他们的乐趣。因此&#xff0c;他们可能对如何在 PC 上流畅地运行 Android 应用程序感到好奇。本指…

oscp学习之路,Kioptix Level1靶场小白速通教程

oscp学习之路&#xff0c;Kioptix Level1靶场小白速通教程 有意向学习oscp的可以私信我一起交流学习 1.前期准备 首先下载好靶场文件&#xff0c;通过nmap进行扫描&#xff0c;确定IP地址和开放端口 发现IP是192.168.201.129,开放的端口为22,80,111,139,443,1024这几个端口。访…

【Ubuntu】设置静态Ip

查看网卡 ifconfig | grep -A 5 -B 2 192 修改配置文件 sudo vim /etc/netplan/00-installer-config.yamlnetwork:ethernets:enp0s3:dhcp4: noaddresses:- 192.168.1.100/24gateway4: 192.168.1.1nameservers:addresses:- 8.8.8.8- 8.8.4.4​​​​​

演员念真主演电视剧《依依向北风》获奖

2024年12月17日&#xff0c;南京广播电视集团和江苏12家城市台的领导、嘉宾&#xff0c;全国其他省市电视台嘉宾&#xff0c;影视公司代表、项目主创团队代表等&#xff0c;相聚南京国际青年会议酒店&#xff0c;举行江苏城市联合公司“城市之星”项目资源推介会暨2024年度“城…