自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Unity游戏框架设计之背包管理器

背包系统通常分为两个部分,第一个部分是背包的 UI 界面,第二个部分是对背包进行逻辑操作的管理器。在下述代码中,实现了对背包的基本逻辑操作,包括向背包添加物品,从背包中取出物品,移动背包中的物品和使用背包中的物品的基本操作,并将这些操作封装为背包管理器。为实现完整的背包系统,我们需要背包 UI 资源,并基于 MVC 模式编写背包 UI 的脚本,并配合背包管理器进行实现。

2024-05-02 00:01:34 573

原创 Unity游戏框架设计之存档管理器

存档管理器的主要功能是实现游戏进度的查询、存储(存档)、读取(读档)和删除(删档)。存档主要有三种实现方案。。PlayerPrefs 类用于在游戏中存储、删除、修改和访问玩家的数据。存储的数据是持久化的,即使玩家关闭游戏或重新启动设备,数据也会保留下来。缺陷:PlayerPrefs 是明文存储的。。对于存档操作,先将玩家需要保存的数据封装为实体类,然后通过 JSON 工具将实体类序列化为 JSON 字符串,然后通过加密算法对 JSON 字符串进行加密,保证存档的安全,最后以二进制的方式输出到本地文件中。

2024-05-01 18:03:52 363

原创 Unity2D横版游戏之平台跳跃效果

玩家允许在平台下方跳跃到平台上方,并且可以在平台上方站立,同时玩家在平台上方允许通过下跳操作到达平台下方。

2024-05-01 17:02:40 17

原创 Unity2D横板游戏之背景视差与无限滚动效果

在 2D 横板游戏中,由若干个背景图片构成的背景,在背景移动的过程中,每一个背景图片的移动速度均不同,靠近玩家的背景图片移动速度快,而远离玩家的背景图片移动速度慢,从而形成背景的视差效果,使背景更加立体且富有层级。。背景无限滚动并不是在游戏场景中加载无限的背景,而是在水平方向上使用两个紧密相邻的背景进行交替渲染,从而形成无限滚动的错觉。

2024-05-01 16:33:51 320

原创 Unity游戏框架设计之UI管理器

UI 模型管理器主要管理 UI 上数据的设置和读取。为了将数据显示到 UI 上,则必须选定一个 UI 组件作为载体。对于不同的 UI 组件,则有不同的设置和读取方法。因此引入类来区分不同的 UI 组件。下述代码以 UI 组件中的 TextMeshProUGUI 组件为例,分别编写对应的 UI 组件的模型管理器。然后编写 UI 模型管理器来统一管理所有 UI 组件中的模型,并以作为区分不同 UI 的标识符。UI 视图管理器主要管理 UI 的资源加载、UI 的打开、UI 的关闭、UI 的销毁。

2024-05-01 16:10:53 685

原创 Unity游戏框架设计之有限状态机

如果满足一个物体拥有若干的状态,状态之间可根据状态转移条件进行转移,任意时刻物体只能处于一种状态三个条件,那么此物体在程序中就可以使用有限状态机(FiniteStateMachine)进行描述。在游戏中,一个物体的 Animator 组件的动画将根据其当前的状态而确定。使用有限状态机后,就可以在OnEnter()中通过Animator类的方法直接设置当前物体的动画,实现 Animator 编辑器关于状态与动画的解耦,此时 Animator 编辑器完全不必关心动画的过渡方向和过渡的条件。

2024-04-30 17:33:49 101

原创 Unity游戏框架设计之缓存池管理器

在游戏运行的过程中,我们可能遇到这样的需求,即创建大量相同类型的敌人。在传统方法中,我们将对每一个敌人都重新创建,但这样是效率低且占据内存的。为此我们可以这样做,所有敌人在创建时,都从敌人缓存池中取出敌人对象,当敌人死亡时,则将敌人放回到缓存池中。这样我们可以实现对敌人对象的复用,而不是频繁的创建和销毁敌人对象。因此,我们可以开发缓存池管理器来实现上述需求。缓存池管理器为所有相同类型的对象都创建一个缓存池,如果需要在游戏中创建对象,则从缓存池中取出对象,如果需要销毁一个对象,则将对象放回到缓存池中。

2024-04-30 16:35:50 189

原创 Unity游戏框架设计之音频管理器

在游戏中,主要的音频分为两种类型。第一种类型是 BGM(背景音乐),第二种类型是音效。BGM 的特点是音频持续时间长,一般在游戏中的同一时间内只能播放一个 BGM。音效的特点是音频持续时间短,一般在游戏中的同一时间内允许同时播放多个音效。在下述代码中,实现了对 BGM 音量和音效音量的全局配置。玩家可以在游戏的设置 UI 中配置 BGM 音量和音效音量。同时实现了播放 BGM 和播放音效的功能,以及音频的生命周期方法。

2024-04-30 15:25:50 191

原创 Unity游戏框架设计之场景管理器

在游戏开发过程中,我们经常对 Scene 进行切换。为了不使场景切换时造成的游戏卡顿,可以 Unity 官方 API 利用协程的方式异步加载场景。同时,为提升 Scene 切换的玩家体验,我们经常会在场景切换的开始,先显示过渡 UI ,然后才对目标场景进行加载。在对目标场景加载的过程中,还必须不断将加载进度更新到过渡 UI 上,以便玩家观察。对于一个场景的管理,除了加载场景和卸载场景之外,还必须管理场景中的游戏对象和组件。因此我们还必须提供对场景游戏对象的创建、加载、激活、禁用、卸载和搜索等方法。

2024-04-30 14:50:21 214

原创 Unity游戏框架设计之事件管理器

在游戏开发中,我们可能会遇到下述需求。当角色的生命值减少时,我们需要让角色播放受伤动画,让系统播放角色受伤音效,将当前的新的生命值更新到 UI 上等等操作。如果在角色的代码中直接实现上述的操作,则将导致代码的高度耦合,不利于后期的维护和拓展。为解决上面的问题,我们可以认为,当角色的生命值减少时,实际上会发布角色生命值减少事件,然后让订阅角色生命值减少事件的子系统分别处理此事件,这就是事件管理器的核心功能。事件管理器基于发布订阅模式实现。

2024-04-29 23:07:02 534

原创 Unity游戏框架设计之消息管理器

消息管理器又可以称为任务管理器,主要解决延迟执行某些代码的问题。比如,我们希望一些代码可以延迟指定的时间后才执行,或者我们希望一些代码可以在固定的时间执行,又或者我们希望一些代码可以每隔一段时间就执行一次。消息管理器就是为了实现上述功能而开发的。下述的消息管理器是基于 Unity 的协程进行实现。

2024-04-29 22:41:05 321

原创 Unity游戏框架设计之协程管理器

在 Unity 游戏开发中,如果 Scene 切换或者游戏对象被禁用,都有可能导致依附在游戏对象上的协程被终止。为解决这个问题,我们必须统一协程的执行载体,将游戏中所有的协程都统一到一个游戏对象上执行。在 Unity 的 API 中,并不允许我们直接对协程的生命周期进行管理,我们不能直接通过 API 来暂停协程或者继续协程,只能执行 MonoBehavior 的 StartCoroutine() 方法来开始协程,或者 StopCoroutine() 来停止协程。

2024-04-29 21:44:23 413

原创 Unity游戏框架设计之单例Mono

在编写 Unity 脚本的过程中,我们通常需要编写一些依赖于 MonBehaviour 生命周期且全局始终唯一的类,比如 EventManager、TaskManager、ResourceManager 和 UIManager 等等。我们可以基于单例模式,设计出名为 SingletonMono 的单例类,然后让拥有上述特性的类继承于 SingletonMono 单例类,来保证这些类在游戏运行过程中始终唯一。一般的脚本必须依赖于某个场景中的某个游戏对象。

2024-04-29 21:14:48 254

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除