- 浏览: 265099 次
- 性别:
- 来自: 大连
文章分类
最新评论
在Unity3D中可以用不同的方法来实现单例,第一种是通常用法,第二种是自我包含法,第三种方法粗制滥造法,第四种是为C#开发者准备的,计数器法。
1.通常用法
通常用法是在相关类加入GetInstance()的静态方法,检查实例是否存在。如果存在,则返回。如果不存在,则返回一个“需要用游戏元素类关联”的调试警告错误.
2.自我包含法
有一次玩Trench Run game,我意识到我的场景类里存在许多的GameObject。所以,我开发了自我包含的单例。如果没找找到实例,就会创建它自己的GameObject,注重通过AddComponent()方法返回来关联实例类,而不需要在IDE中创建一个GameObject在设计时弄乱你的场景。
3.粗制滥造法
粗制滥造法很简单,为实例设置一个公共静态属性,初始化Awake()方法,设计时关联一个GameObject. 可以用以下方法访问:
在ActionScript里访问外在类的其他方法比访问一个属性要慢很多,我不知道这是否属实(我怀疑),但是在过去几年里我在Flash上噩梦般的优化,我通常用的是这种方法。也许有些习惯永远也改不了的!(或者我本来就偏执于此)
4.计数器法
以上的第一种方法和第二种方法得利于使用访问器而不是一个方法。关于本提示要感谢Cliff Owen.
然后你就可以用以下方士简单而粗制滥造的访问它:
1.通常用法
通常用法是在相关类加入GetInstance()的静态方法,检查实例是否存在。如果存在,则返回。如果不存在,则返回一个“需要用游戏元素类关联”的调试警告错误.
public class MyClass { private static MyClass instance; public static MyClass GetInstance() { if (!instance) { instance = GameObject.FindObjectOfType(typeof(MyClass)); if (!instance) Debug.LogError("There needs to be one active MyClass script on a GameObject in your scene."); } return instance; } }
2.自我包含法
有一次玩Trench Run game,我意识到我的场景类里存在许多的GameObject。所以,我开发了自我包含的单例。如果没找找到实例,就会创建它自己的GameObject,注重通过AddComponent()方法返回来关联实例类,而不需要在IDE中创建一个GameObject在设计时弄乱你的场景。
public class Logger : MonoBehaviour { private static Logger instance; private static GameObject container; public static Logger GetInstance() { if( !instance ) { container = new GameObject(); container.name = "Logger"; instance = container.AddComponent(typeof(Logger)) as Logger; } return instance; } }
3.粗制滥造法
粗制滥造法很简单,为实例设置一个公共静态属性,初始化Awake()方法,设计时关联一个GameObject. 可以用以下方法访问:
MyClass.instance.DoSomething(); public class MyClass { public static MyClass instance; public void Awake() { MyClass.instance = this; } }
在ActionScript里访问外在类的其他方法比访问一个属性要慢很多,我不知道这是否属实(我怀疑),但是在过去几年里我在Flash上噩梦般的优化,我通常用的是这种方法。也许有些习惯永远也改不了的!(或者我本来就偏执于此)
4.计数器法
以上的第一种方法和第二种方法得利于使用访问器而不是一个方法。关于本提示要感谢Cliff Owen.
public class MyClass { private static MyClass _instance; public static MyClass Instance { get { if (!_instance) { _instance = GameObject.FindObjectOfType(typeof(MyClass)); if (!_instance) { GameObject container = new GameObject(); container.name = "MyClassContainer"; _instance = container.AddComponent(typeof(MyClass)) as MyClass; } } return _instance; } } }
然后你就可以用以下方士简单而粗制滥造的访问它:
MyClass.Instance.DoSomething();
发表评论
-
unity Mathf 数学运算(C#)
2013-05-14 15:32 4096Mathf 数学运算Mathf.Abs绝 ... -
Unity3D与VS2008结合
2013-03-07 13:24 3011mono出问题了,打开之后总是没反应,憋的我只能另想办法了,还 ... -
按自身本地坐标移动
2012-11-09 11:10 0transform.Translate( new Vector ... -
Transform.eulerAngles
2012-09-19 11:20 6146eulerAngles的三个变量,x,y,z表示三个绕坐标轴旋 ... -
UNITY3D开发IOS 强制屏幕四个方向不旋转的方法
2012-09-18 13:32 7258void Start () { //纵向 上下 ... -
复杂材质烘焙成一张贴图
2012-09-17 13:34 2431这个脚本可以将复杂的材质,比如有法线贴图的材质进行" ... -
Unity Mathf 数学运算(C#)
2012-09-17 10:27 107619Mathf.Abs绝对值 计算并返回指定参数 f 绝对值。 ... -
xxx.unity3d 这种文件怎么打开呢`
2012-09-03 10:26 0unity3d是在unity编辑器下编辑模型,然后使用unit ... -
unity3d协作过程中svn的使用
2012-06-20 14:42 1555算是从unity3d官方网站上的翻译,如果你没有看到,可以看下 ... -
unity3d换贴图
2012-04-25 11:51 0//换贴图,直接把这段代码加在要换贴图的模型上即可 ... -
unity3d 修改 webplayer 的logo
2012-03-30 13:48 3903经过测试,以下两种方式都是可以的。 第一种,加到<sc ... -
[转载]Unity3d闪烁灯光脚本
2012-03-29 09:05 1861using UnityEngine; using ... -
Unity引擎链接mySQL数据库
2012-03-29 08:58 5071需要unity3d3.5 pro版本,所以先确认自己用的是不是 ... -
在Unity3D里使用JSON格式进行数据交换(转)
2012-03-29 08:55 12748这个例子里做的事情很简单,主要做了两件事: 1 从服务器的p ... -
unity3d调用外部摄像头
2012-03-26 15:24 0public string deviceName; ... -
天气系统
2012-03-21 08:37 0var lightmapFarsFirst:Texture ... -
Unity3D鼠标响应事件
2012-03-19 10:14 0void OnMouseDrag () { ... -
javaScript改变skybox
2012-03-07 23:38 1146var dayMaterial:Material; va ... -
Unity 3D 入门常见问题
2012-02-29 10:12 3821下面列出了常见的问题. 文档 Unity 手册 -- 包含用 ... -
UNITY3D常用代码
2012-02-28 08:51 001、基本碰撞检测代码 function OnCollis ...
相关推荐
在Unity3D游戏开发中,单例模式是一种常见的设计模式,用于确保在应用程序的整个生命周期内,某个类只有一个实例存在。这种模式对于管理共享资源、全局状态或在整个应用中需要频繁访问的对象非常有用。"Unity3D通用...
在Unity中实现单例模式的最佳方法。 通过使用这种模式,您将能够定义Global变量和类,并在Global中使用它们的方法和属性。 对于使用Unity引擎制作的大多数游戏来说,这种模式都是必须的。 :open_book: 产品特点 ...
示例Unity项目可在找到。 为什么 为什么要使用yaSingleton,为什么要使用ScriptableObjects? 在不同场景中没有单例的重复实例。 保证可以在任何Awake脚本之前运行的单入口点。 轻松的版本控制。 由于单例另存为...
单例模式(Singleton Pattern)是一种常用的设计模式,在 Unity3D 中也可以使用这种模式来管理场景。在这个示例中,我们将实现一个场景管理单例模式,用于管理游戏中的场景。 单例模式的定义 单例模式是一种创建型...
里边一共包含了三个基本的单例类型,分别为 1非游戏对象单例 2随场景切换而销毁的单例 3不随场景切换而销毁的单例 其中2 3 中有一段可以自动创建单例对象的代码已注释 使用方法 继承对应的父类并在泛型中指明自己 ...
Unity3D的单例模式常用于状态管理,确保游戏状态在整个游戏过程中的一致性。 5. **用户交互**:Unity3D提供了丰富的UI组件和事件系统,用于处理用户的输入。例如,当用户点击棋盘时,会触发一个事件,然后由对应的...
可能涉及到单例模式的设计,确保全局变量在整个游戏流程中的正确性。 最后,UI界面也是游戏的重要组成部分。Unity的UI系统包括Canvas、Panel、Text、Button等组件,源码中可能会展示如何创建和更新游戏得分、菜单...
1. **单例模式**:在iOS和Unity3D中,单例模式常用于管理共享资源,如网络连接、配置设置或者游戏状态。它确保一个类只有一个实例,并提供一个全局访问点。 2. **工厂模式**:在创建对象时,工厂模式可以隐藏对象...
设计模式则是解决游戏设计中常见问题的成熟方案,如单例模式在管理全局资源,工厂模式在生成游戏对象等方面都有广泛应用。 在系统分析部分,进行了可行性分析和需求分析。可行性分析确认了使用Unity3d进行此类游戏...
在实际应用中,Unity3D的MVC模式可能需要结合其他设计模式,如单例模式(用于管理全局状态)或工厂模式(用于创建对象)。此外,Unity3D的EventSystem和UnityEvent可以作为实现控制器功能的有效工具,它们简化了游戏...
本资料包主要聚焦于将设计模式应用于Unity3D游戏开发环境,其中主要使用的编程语言是C#。在Unity3D中,理解并运用设计模式能够帮助开发者创建更加灵活、可维护且易于扩展的游戏代码。 一、单例模式(Singleton) ...
开发者可能会编写一些静态类或者单例模式来管理迷雾系统,确保在整个游戏过程中只有一个实例存在,以保持数据的一致性。 对于“迷雾系统”,在Unity3D中,可以使用颜色贴图(Color Texture)或深度贴图(Depth ...
课时20 单例设计模式Singletons 基础入门之进入Unity的世界 课时1 Unity介绍 课时2 Unity下载和安装 课时3 Unity 破解 课时4 Unity 什么是工程 课时5 Unity 学习过程介绍 课时6 Unity中的五种视图 课时7 Unity中的...
本教程"unity新手抛物线大炮单例.zip"专为初学者设计,旨在教授如何利用Unity创建一个简单的抛物线大炮游戏,并且融入了单例模式的设计思想。 首先,我们来详细探讨Unity中的抛物线投射。在物理模拟中,大炮发射...
Unity3D是一款强大的跨平台游戏开发引擎,广泛应用于2D和3D游戏、虚拟现实(VR)、增强现实(AR)以及互动式内容的制作。在Unity中,场景管理是项目开发过程中的重要组成部分,它涉及到游戏流程的组织、资源加载和切换等...
3. **单例模式**:对于需要全局访问的服务类(如数据管理、音频管理等),可以考虑使用单例模式来实现,这样可以简化脚本间的调用过程。 通过以上介绍,我们可以看到,在Unity3D中实现脚本间的有效调用并不复杂,但...
开发者可能使用单例模式来管理全局的游戏状态。 12. **性能优化**:对于移动设备,性能优化尤为重要。开发者可能采用延迟加载、对象池技术来减少内存占用和提高运行效率。 通过分析“lianLianKan”这个压缩包,...
在Unity3D的岗位面试中,面试官可能会考察求职者对于游戏开发的深入理解,包括设计模式的应用、UI系统的设计、性能优化策略以及对Unity引擎特性的掌握等。以下是一些关键知识点的详细说明: 1. **设计模式**:面试...
4. **静态成员和单例模式**:有时候,我们可以通过将DaiMa2设计为静态类或使用单例模式来确保全局唯一实例,这样可以避免因为实例化问题导致的空引用异常。 5. **错误检查**:在调用其他对象的方法之前,应先检查...
创建型模式:共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式:共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式:共十一种:...