自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unity Game FrameWork—框架学习—ab打包流程解析

UGF资源更新与管理。

2023-09-26 12:27:08 732

原创 Unity Game FrameWork—模块使用—资源热更新

json文件解析不要用默认的unity解析方式,unity解析有问题,使用StarForce.LitJsonHelper​​资源模式改为热更新模式​​。

2023-09-26 11:46:13 402

原创 本地Git仓库和GitHub仓库SSH传输

f ~/.ssh/mykeys/myprivatekey = 私钥文件的文件名(如果选择不使用默认名称)。title可以随意命名,key是上一步的公钥1233456.pub文件的内容,直接复制过来,点击Add SSH key,完成添加。则表示权限被拒绝,继续下面两步操作,添加私钥(注意,add的路径是私钥的路径)-t rsa = 要创建的密钥类型,本例中为 RSA 格式。-b 4096 = 密钥的位数,本例中为 4096。启动后再次添加私钥,密码是创建key时的密码。注意:密钥位数需为4096位。

2023-07-27 14:50:29 790

原创 安装git创建版本库

安装教程参考链接按照链接流程安装安装完成后,还需要最后一步设置,在命令行输入:(用户名和邮箱在账号中查找)链接的教程很细致,我也是看这在学习,这里记录整理一下,便于日后使用。

2023-07-27 14:44:27 357

原创 Addressable缓存用于微信小游戏的配置

由于我是第一次使用aa,并且是用到微信小游戏,有很多需要配置的的地方,没有找到详细的说明,或许由于版本更新有些不一样的,折腾了挺久总结一下。我自己遇到的坑,需要注意的地方已经加粗了。

2023-07-24 16:45:47 515

原创 unity字体优化

上面的优化方向是字体字符精简的终点了,没有丝毫多余,有一些劣势也需酌情考虑,例如:语言表只增加了一个字,原来的字体文件需要更新,热更的内容反而变多了,对于经常热更的游戏,一般包含8000个常用汉字和数字字母常用符号即可。ReplaceTheFont脚本的字体替换和字符统计可以包含四条优化方向,稍加改造即可单独统计每个字体字符,多语言,切换语言统计即可。2、对于多语言游戏,可针对每个语言制作字体文件,只下载所需语言的字体文件。3、多字体游戏,可针对每个字体单独统计字符,文本和对应字体管理这一块。

2023-07-21 11:40:39 474

原创 Unity Game FrameWork—模块使用—对象池使用

使用对象池,需继承ObjectBase。首先创建一个OPGame的类,继承于ObjectBase,我们暂且把它叫做OP对象,如下图OP对象有两个地方可以存储成员对象或变量,一个是在OP对象内部如模型ID:m_ModelID。另一个则是对象池基类ObjectBase里的m_Target可以存储任何数据类型,需要装箱和拆箱。在创建OP对象时,我们传入自定义的类型ModelInfor,并在基类初始化时作为参数传入。

2023-04-13 14:33:03 766

原创 Unity Game FrameWork—模块使用—对象池分析

官方说明:提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。下图是Demo中用到的对象池,所有的实体以及UI都使用了对象池。Domo中已经有了实体Entity对象池,可以满足存储GameObject的需求,这里仅能满足我们的实体使用需求,当我们需要添加新的对象池而非依赖于实体时,由于对原理不了解,导致无从下手。下面我们通过实体对象池来分析一下框架的原理和思路。

2023-04-12 18:33:12 914

原创 Unity Game FrameWork—模块使用—引用池

GF中池子有两种,一种叫引用池,一种叫对象池,两者原理一样,但具体实现和针对的对象不同,引用池一般用来储存普通的C#类型对象,而对象池则一般用于储存UnityEngine下的对象(如Unity中的GameObject对象)引用池的使用,基本上可以脱离引用池组件ReferencePoolComponent独立存在,组件中有且只有一个属性,即:EnableStrictCheck(是否开启强制检查)。若引用池中有释放的或未使用的引用,则从引用池中取出,取出后,引用池中不保留该对象。

2023-04-10 20:11:13 493 1

原创 不可变数据类型

c#中的string是不可变的,Substring(0, 6)返回的是一个新字符串值,而原字符串在共享域中是不变的。作为不可变类型,最主要的特性表现是:一旦创建,只要修改,就会在托管堆上创建一个新的对象实例,而且和上一个对象实例是相邻的,在托管堆上分配到一块连续的内存空间。不可变(immutable): 即对象一旦被创建初始化后,内存中该类型的值永远不会改变,之后的每次改变都会产生一个新对象。此时会在栈中开辟新值2赋值给age变量,而不能改变18这个内存里的值,int在c#中也是不可变的。

2023-04-10 15:50:42 356

原创 Unity Game FrameWork—模块使用—Download下载

DownloadComponent中可获取:下载代理总数、可用下载代理数量、工作中下载代理数量、等待下载任务数量、下载速度等,也可设置是否暂停、下载超时时长、断点续传临界大小。官方说明:提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。

2023-04-06 18:21:46 505

原创 Unity Game FrameWork—模块使用—Web请求

Web 请求组件WebRequestComponent的public方法可获取代理相关信息,添加web请求任务,以及三个事件(开始请求、请求成功、请求失败)。官方说明:提供使用短连接的功能,可以用 Get 或者 Post 方法向服务器发送请求并获取响应数据,可指定允许几个 Web 请求器进行同时请求。web请求内容不多,为了专栏完整性,简要说明一下。

2023-04-06 10:47:32 365

原创 Unity Game FrameWork—模块使用—有限状态机

如果用if else来判断则太过复杂不便于梳理流程,以及一堆条件变量控制,当状态改变或触发条件改变,整个流程的维护是很复杂的,我们不能专注当前状态要做的事,需要去看前后关联的触发条件是否会有问题,这些条件变量在其他状态是怎样的,会不会由于条件变量的改变导致其它问题,因此诞生了状态机。状态机所解决的问题与流程需要完成的事情是完全吻合的。创建ProcedureFSM流程类,在流程类中创建英雄实体并添加逻辑类FSM_Hero,英雄逻辑类中创建四种状态类,随后在四个状态类中完成触发及状态切换等工作。

2023-04-04 17:42:26 681

原创 Pico串流SteamVR

7、从steam启动非steam商店下载的游戏(和第六步作用是一样的,只是一个是从steam启动游戏,一个是从87VR游戏大厅启动游戏),开始游戏前两个平台都会启动steam VR。下载完成后,点击启动游戏,即可自动启动SteamVR并运行游戏。5、启动pico串流助手,按照指引连接。2、打开picoVR游戏大厅,下载pico串流助手。6、从87VR游戏大厅下载PCVR游戏并运行。也可在此处添加非87VR游戏大厅下载的游戏。添加完成后,在库里面找到,点击开始游戏。1、安装87VR助手和87VR游戏大厅。

2023-04-03 17:56:01 5517

原创 Unity Game FrameWork—模块使用—游戏配置

还有一个需要了解的地方是游戏配置辅助器,游戏配置辅助器继承于SettingHelperBase,继承后才可在选项列表中显示出来。一般不需要更改游戏配置辅助器,唯一优化的点可能就是Set和Save合并,调用更简洁。从游戏配置组件SettingComponent源码可以看到,可获取游戏配置的数量、获取所有配置的名称、删除游戏配置、读取及写入对象。这些接口很少用到,知道有就可以。Get时会传入一个值,这个主要用于游戏首次启动时,不存在该设置值,给其一个默认值。游戏配置相对简单,下图是全部用到配置组件的地方。

2023-04-03 11:14:23 281

原创 Unity Game FrameWork—模块使用—数据结点

根节点可以添加任意子节点,子节点也可添加子节点。每个节点只能存储一个数据,这个数据可以是任意类型,根节点不能添加数据。如果多次设置数据,则只会保存最后一次的数据及其类型。Node03.GetOrAddChild(“所属组件名”).SetData(“UIComponent”);官方说明:将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。数据结点存储的是游戏运行时数据,不会保存到本地。这一块功能,Demo里面没有使用。下面看下数据结点相关API调用。

2023-03-31 16:08:13 342

原创 Unity Game FrameWork—模块使用—声音

官方说明:提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是 2D 声音还是 3D 声音,甚至是直接绑定到某个实体上跟随实体移动。

2023-03-31 11:45:13 440 1

原创 Unity Game FrameWork—模块使用—本地化

官方说明:提供本地化功能,也就是我们平时所说的多语言。Game Framework 在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是“新年好”字样的特效,而英文版里是“Happy New Year”字样的特效。

2023-03-30 09:33:31 637 1

原创 Unity Game FrameWork—模块使用—数据表

官方说明:可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。

2023-03-29 09:02:46 841

原创 Pico连接unity调试及SDK版本选择

Pico官方SDK更新较快,目前基本上是两个月一次,在不断地添加新功能以及优化原有问题。但是有时优化会引入新的问题,这个时候我们可能倾向于使用旧版,可是官方并没有提供旧版入口。2.1.3升级2.1.4时就会遇到开发体验很不好的问题,这里就2.1.3和2.1.4版本说一下。使用最新版时需慎重一些,文末会附上2.1.3版本SDK。

2023-03-29 09:02:21 3427 9

原创 Unity Game FrameWork—模块使用—全局配置

Demo的预加载流程ProcedurePreload中已经封装了方法可以读取并加载配置文件到框架中,只需传一个文件名作为参数。根据不同数据类型,可以通过GetInt,GetBool,GetFloat,GetString获取值。如果文件格式发生改变,我们需要写自己的全局配置辅助器,并把自定义辅助器配置到Config组件上。屈居配置的加载读取已经完成,那么框架怎么知道我们的配置表里面是怎么写的,能不能正确读取。配置表跟键值对一样,一个key,一个value。如图是Demo全局配置文件。

2023-03-24 09:52:34 285

原创 Unity Game FrameWork—模块使用—AB打包

分为Resource List、Resource Content、Asset List三部分。GF中一个Resource为一个ab包,Asset为其中具体的一个资源。

2023-03-23 15:42:24 736

原创 Unity Game FrameWork—模块使用—Event事件

除了 Game Framework 内置事件外,使用者也可以定义自己的游戏逻辑事件,游戏中所有事件均派生自GameEventArgs 类,事件对象使用了引用池技术,以避免使用事件过程中频繁的内存分配。注意:OpenUIFormSuccessEventArgs这个事件是UI打开事件,不单是菜单界面,其他界面可能也会注册事件,那怎么区分是哪个页面打开的事件呢?看一下下图的源码,传入的this就是userData参数,userData用来创建事件,赋值给事件的属性了。官方说明:游戏逻辑监听、抛出事件的机制。

2023-03-23 10:26:11 415

原创 Unity Game FrameWork—模块使用—Entity实体

官方解释:我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。先看下实体组件的参数:EnableShowEntityUpdateEvent:是否显示实体更新事件EnableShowEntityDependencyAssetEvent:是否显示实体加载依赖资源事件InstanceRoot:实体组的根物体。

2023-03-17 17:08:29 1498

原创 Unity Game FrameWork—模块使用—UI组件

官方解释:提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。制作UI预制件,以及添加UI交互逻辑这一块就不说了,任意一个UI界面都需要这样的操作。

2023-03-16 16:18:20 871

原创 Unity Game FrameWork—模块使用—场景切换

UGF切换场景是在原来的基础上叠加新的场景,在加载前需要卸载原来的场景,当然如果有叠加的需求,可以保留原来的场景。下面单独说一下场景的加载以及卸载。

2023-03-15 17:06:27 494

原创 unity桥接调用Android方法及回调完整流程

作为一个完整的游戏,在unity开发完成后,需要接入SDK。SDK就是手游渠道(如应用宝、小米应用商店、华为应用商店等)提供的集成了账号注册登录、充值、防沉迷、游戏公告、分享、社区入口、push消息、数据上报、礼包或折扣券等功能的一个集合。而大多数情况下,作为unity开发是不熟悉Android Studio开发环境的。网上也有一些桥接的案例,但是自己做的时候会由于对Android Studio不熟悉而出现各种问题。

2023-03-11 16:06:56 3744 1

原创 Package Manager自定义修改的本地引用

一般我们是上传Assets、Packages、ProjectSettings这三个文件夹,但是package是在Library文件夹下,这个一般我们不会上传,是unity自动生成的。这时,就算添加完成了,但是此时的添加目录是本地的绝对路径,如果上传SVN,对方的工程会报错,无法使用,我们需要修改为相对路径。此时,我们把package包从工程中分离出来了,这时可以修改package的代码,并且不会被unity自动还原了。记得,Tools文件夹也要跟工程一起上传,并且和工程文件夹保持同级。

2023-03-09 13:39:34 326

原创 Android Studio 自动换行

输入要自动换行的文件类型[*.后缀名],记得不同文件类型之间用分号";

2023-03-09 11:33:32 1040

原创 Unity Game FrameWork—组件扩展—Entity组件扩展

下面直接上代码,功能也很简单,场景中的物体组件调用ChangeGroupPos改变实体组的父物体。当场景切换,场景中的物体被销毁时,调用ReGroupPos将实体组再还给框架。前面写过一篇3DUI的扩展,与3DUI的扩展类似,都是为了使游戏对象脱离框架,作为场景中GameObject的子物体。代码完成后,替换掉原来的Entity组件,代码里的注册逻辑对应也改成EntityFree。

2023-03-01 19:20:34 270

原创 Unity Game FrameWork—组件扩展—本地化扩展

UGF框架本地化在使用时,有三个问题,第一个是策划一般会用表格编辑本地化语言,而框架解析的是Xml文件,缺一个Excel转xml的工具。第二个问题是,编辑器编辑情况下,UI预制件的文本是key值,看不到文字显示后的效果,只有运行时才会动态改变文字,调试起来比较麻烦。第三个是文本的字体不能批量修改。本文就是为了解决这几个问题,做的扩展。,下载后跟框架的ICSharpCode.SharpZipLib插件会冲突,可以删除框架的。

2023-02-25 10:54:40 459

原创 使用XR时渲染管线报错IndexOutOfRangeException: renderPassIndex

查了一下,renderPassIndex是渲染通道的索引(最初传入到 XRDisplaySubsystem.GetRenderPass)。我的启动场景中只放了启动框架,并没有放相机,当放入相机后就不会报错。至于为什么报这个错,渲染通道为什么越界,就不太清楚了。

2023-02-24 09:41:57 830

原创 Unity Game FrameWork—组件扩展—UI组件扩展

UI组件是UGF最常用的组件之一,UIComponent界面组件中完成了UI辅助器及界面组Group的创建。

2023-02-23 18:05:36 451

原创 unity未使用变量警告

抑制显示使用如下代码,disable表示消除警告,restore表示恢复警告,中间放置报错的代码。警告提示有未使用的变量,实际上按照代码的逻辑并没有问题,也不影响运行,但是会显示出来惹人烦。

2023-02-22 15:13:49 420

原创 Unity Game FrameWork—框架学习—流程对状态机封装

IFsm:接口功能,获取有限状态机(名称、持有者、状态数量、是否正常运行、持续时间、当前状态,所有状态、数据(设置、移除、获取))、开始有限状态机、是否存在有限状态机状态。m_Fsms中的流程类是在ProduceManager流程管理器的初始化方法Initialize中创建状态,foreach流程轮询会判断流程是否销毁,销毁即跳过,只执行当前流程的Update。定义了流程的初始化、进入、轮询、离开、销毁生命周期方法。分析完代码,流程的本质其实是状态机,创建流程就是创建状态机,流程是对状态机进行了一层封装。

2023-02-21 15:57:39 361

原创 Unity Game FrameWork—框架学习—组件对模块封装

我们再往下看一下实体管理器的接口是在哪实现的,通过断点调试可以看到,此时的模块名称变为了EntityManager。框架的结构已经很清晰了,里面还有很多未知的东西,比如数据提供者,数据持有者是什么东西,还不是很清楚,希望可以通过这个框架对游戏的整个流程以及各个模块有一个全面的了解。我们以实体组件为例,在实体组件中调用base.Awake()完成组件的注册之后,会立即获取模块。实体组件获取的模块是实体管理器的接口。这时,我们可以明白,组件通过管理器的接口创建管理器,组件的方法大多是调用管理器的方法来实现。

2023-02-17 17:36:55 333

原创 Unity Game FrameWork—框架学习—游戏入口

三个框架入口中,我们很容易发现Demo框架入口与unity框架入口的联系,关系很清晰。但是原生框架的入口与unity框架入口的联系很模糊,只有unity框架的基础组件BaseComponent与原生框架入口建立了联系,以完成轮询和删除框架模块。通过查找GetModule方法的引用,我们可以发现unity框架的组件会获取原生框架的模块,大体上来说是一一对应的关系。具体是怎样的对应关系,是依据什么来获取模块的,我们继续往下学习。

2023-02-17 17:31:11 579

原创 Unity Game FrameWork—模块使用—游戏流程

通过流程,将不同的游戏状态进行解耦,便于各个模块分开管理,不同的功能在不同的流程中,相互独立,就不至于很多代码挤在一个脚本中。如检查资源流程、更新资源流程、选择服务器流程、登录服务器流程、创建角色流程、游戏选择菜单流程、游戏玩法流程等。可以看到这个流程执行着生命周期函数,流程的初始化、进入、离开、轮询、销毁可以帮助我们完成本流程的逻辑。勾选我们需要的流程,没用到的流程可不勾选。到此,流程可以正常执行,我们可以添加打印日志查看是否执行了流程。派生自ProcedureBase类,并实现自己的流程类。

2023-02-16 18:00:50 290

原创 Unity 微信小游戏导出去logo

下面直接贴上我配置的代码,用下面的代码替换game.js文件的93-146行,我的配置里面更改了进度条样式以及文字样式。有两个地方需要去除logo,一个是去掉启动场景时的logo动画过渡,另一个是去掉启动背景进度条下面的白色logo图标。在微信开发者工具中打开game.js文件,如图框起来的部分为加载页素材配置,以及进度条样式。scaleMode字符串直接填写链接中的枚举即可,注意,设计的宽度高度也要一起修改。试过了,其他配置模式效果不太好,配置的方式如下。缩放模式的配置我是用的是默认配置,

2023-02-16 12:15:00 425

原创 Unity Game FrameWork—模块使用—框架组件简要说明

Global Helper为相关配置为数据(文本,xml,json等)解析方式,其他组件的Helper选项配置,均为数据加载以及解析的结构定义,框架提供了一套默认的解析方式。UI也有分组,需注意。数据表使用的是框架默认的解析方式DefaultDataTableHelper,如果我们数据表定义的结构和Demo默认的不一样,这个时候我们需要扩展自己的数据解析脚本,并选择自定义的解析方式。调试窗口没必要纠结,使用默认的即可,如果有新的需求可以看具体的框架逻辑去修改,当然也有很多其他的调试工具和调试手段可以使用。

2023-02-16 11:26:27 1288

pico2.1.3版本SDK及调试工具

pico没有开放历史版本SDK的下载入口,而有时新版本不稳定,需要做一部分取舍,可能会使用到旧版SDK。

2023-03-28

unity桥接调用Android方法,双端代码

unity桥接调用Android方法,双端代码

2023-03-11

读取Excel表格的插件库

该插件为dll动态库,可用于其他场景。使用的初衷是配合Unity GameFramework框架,用在本地化扩展组件里,扩展组件读取后,转换为Xml文件。

2023-02-25

空空如也

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

TA关注的人

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