- 博客(325)
- 资源 (24)
- 论坛 (1)
- 收藏
- 关注
原创 unity接入kcp
unity接入kcp一.前言KCP是一种基于UDP的上层协议,项目地址:KCP – A Fast and Reliable ARQ Protocol,以下是github上的介绍:KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。整
2021-01-16 18:58:24
90
原创 unity实现游戏帧同步之确定性物理引擎
一.前言近几年,市面上出现了越来越多IO游戏,Moba游戏,这些游戏有一个共同的特点,就是需要多人同时进行对战,做多人同步对战游戏,有两个技术点是绕不开的:1.实时网络同步技术,2.确定性物理引擎。首先网络的话,如果游戏要求是帧同步,为了保证网络传输的速度,那一定是udp首选,但是需要处理下丢包的问题。这个问题我们不在这里多说。我们今天主要说的时确定性物理引擎的问题。那么什么是确定性物理引擎呢?确定性物理引擎这个要从普通的物理引擎来说起,比如Unity3D内置的NVIDIA出品的PhysX物理引擎和G
2021-01-12 12:40:35
118
原创 unity 使用lua处理byte数组
前言一般untiy中网络处理都是使用C#,但是如果使用lua做热更开发的话,很多逻辑需要在lua端写,比如网络协议,会使用lua-protobuf,lua-pbc等。那么网络的字节拼接就需要在lua端拼接好,再回传给C#,目前拼接字节有两种方案:1.使用C#的MemoryBuffer+BinaryReader和BinaryWriter进行拼接2.使用lua的string.pack和string.unpack进行拼接如果使用C#进行拼接,那么最好是在C#端直接做,如果在lua端做,就需要lua调用C
2020-12-31 18:48:19
100
原创 GameFramwork框架详解之(七)资源打包和加密
一.Resource Builder编辑器面板我们根据GameFramework的demo:Star Force 进行拆解GF的资源打包和加密逻辑参数:productName:产品名称。companyName:公司名称。gameIdentifier:游戏识别号。gameFrameworkVersion:游戏框架版本。unityVersion:Unity 版本。applicableGameVersion:适用游戏版本。internalResourceVersion:内部资源版本。bui
2020-12-21 22:00:03
110
原创 git-flow使用规范
git-flow规范1.规范分支使用1.master分支是产品分支,不要在master直接开发2.开发统一基于develop分支,并且使用git-flow工作流进行开发3.每个人开发自己的功能,需从develop检出新分支,且直到功能或fix开发完毕,再合并到主分支,不要一条记录合并一次或者直接在develop上开发,这样保证了develop分支的正常运行和测试4.develop分支稳定之后,可以合并到master,用于测试和发布,所以对于master分支的修改一定要进行审核,保证
2020-12-21 20:15:33
49
原创 Unity Shader之图片彩色图过渡到灰度图
Unity Shader之图片彩色图过渡到灰度图实现原理对于彩色转灰度,首先要知道一个公式:Gray = R0.299 + G0.587 + B*0.114;shader代码下面直接看shaderShader "Custom/GrayToColor"{ Properties { // 主图 _MainTex ("Albedo (RGB)", 2D) = "white" {} // 插值 _Lerp("Color Lerp",Range(0,
2020-12-10 21:49:23
92
原创 Unity如何动态修改TextMeshProUGUI的参数
TextMeshPro是Unity的一个内置插件,性能和效果均强于UGUI的Text,甚至效果方面强国了美术的PS,所以当我们需要使用TextMeshPro制作一些炫酷的字体效果时,免不了使用程序动态修改某些参数,不管是C#还是Lua语言,都可以直接设置TextMeshProUGUI的所有参数。下面直接上代码:修改基础参数:TextMeshProUGUI pro = this.GetComponent<TextMeshProUGUI>();pro.text = "文本";//修改字体属
2020-12-03 22:22:07
271
原创 GameFramwork框架详解之(六)UI框架
UI框架1.UIComponentUIComponent主要是对UIManger的封装,UGF框架对GF框架的包装,对GF的UIManager进行初始化和方法调用。public sealed partial class UIComponent : GameFrameworkComponent{ private const int DefaultPriority = 0; private IUIManager m_UIManager = null; private Event
2020-11-27 22:11:22
151
2
原创 GameFramework框架详解之(五)Download下载器
Download下载模块1.DownloadComponentDownloadComponent其实就是DownloadManager的包装而已,主要负责DownloadManager的初始化和调用,这里不多介绍,直接看结构代码/// <summary>/// 下载组件。/// </summary>public sealed class DownloadComponent : GameFrameworkComponent{ private const int
2020-11-27 20:59:06
129
原创 GameFramework框架详解之(四)对象池模块
一.前言GF框架中对象池的使用,总共有三处1.ObjectPool对象池2.RefrencePool引用池3.TaskPool任务池首先使用原理都是一样的,都是因为存在频繁的创建和销毁,为了避免GC而对对象进行缓存,需要时获取,不需要是回收。而在GF框架中之所以分成3个Pool去做这些事情,也是为了不同的 功能而分别差异化实现的二.TaskPool任务池先来聊聊TaskPool吧,TaskPool其实是ITaskAgent的一个集合,负责ITaskAgent的初始化,执行,回收等操作1
2020-11-26 22:07:41
128
原创 GameFramework框架详解之(三)资源管理器
资源加载前言Game Framework 使用了一套异步资源加载体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。资源类型定义Game Framework 中有两个关于资源的定义,在使用过程中需要注意区分。Game Framework 设计的所有方法都是面向 Asset 的,Resource 隐藏在内部,不对外公开,以降低使用的复杂度。
2020-11-14 22:20:10
257
原创 Unity 如何实现一个高效的对象池
前言当我们频繁创建和销毁某个游戏对象的时候,可能对GC是一个很大的开销,这时一般我们都会引入对象池模块。对象池:顾名思义,就是对象的一个缓存池子,可以存取对象,方便对象的回收和复用。避免了大量对象创建和销毁时产生GC。1.对象池v1.0首先我们先来写一个最简单的对象池,针对单个游戏对象的对象池,可以对一个指定的预制体,进行对象实例的创建和回收,对象池子其实就是一个Queue队列,为什么是一个队列呢?主要原因是因为队列Queue和栈Stack的存取效率是最高的,而我偏向使用Queue的原因是因为它是一
2020-11-07 20:30:58
150
原创 史上最全iPhone分辨率和尺寸
最新iPhone全机型分辨率和尺寸收录1.设计分辨率规范IOS手机手机机型(iPhone)屏幕尺寸(inch)纵横比逻辑分辨率dp设备分辨率px缩放因子ScaleFactor4(s)3.516 : 9320x480640x960@2x5(s/se)416 : 9320x568640x1136@2x6(s)/7/84.716 : 9375x667750x1334@2x6(s)/7/8 Plus5.516 : 9414x73
2020-11-03 11:14:02
264
原创 什么是 git-flow 的工作流程
git-flow 的工作流程当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。Git 的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特定有效的工作流程,那么混乱就将是不可避免的。基本上你可以定义一个完全适合你自己项目的工作流程,或者使用一个别人定义好的。在这章节中我们将一起学习一个当前非常流行的工作流程 git-flow。什么是 git-flow?一旦安装安装 git-flow,你将会拥有一些扩展命令。这些命令会在一个预定义的顺序下自动执行多个操作。是的,
2020-10-27 14:51:39
51
原创 GameFramework框架详解之(二)框架启动
一.游戏启动先打开Assets根目录下的StarForce Launcher场景场景节点目录如下:二.GameEntry在根节点Game Framework上有个组件:GameEntry,是游戏的启动入口,GameEntry使用关键字partial被拆分成了3个文件,分别是:GameEntryGameEntry-BuildinGameEntry-CunstomGameEntry类,是项目主入口InitBuiltinComponents();InitCustomComponents()
2020-10-24 17:33:47
156
原创 GameFramework框架详解之(一)框架总览
一.前言目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩
2020-10-24 15:50:05
619
原创 Unity插件之EasyTouch和LeanTouch
前言首先在Unity的AssetStore搜索EasyTouch,只能搜到其它的Touch插件,比如LeanTouch+和Easy Touch Controls等等从Easy Touch Controls的描述里面可以连接到下面的信息所以很遗憾,目前EasyTouch4.x和5.x都已经下架了,只有一个Easy Touch Controls,但是它最后一次更新是2016年,比较久远了,不太清楚HedgehogTeam公司在搞什么?难道被收购了?不管了,无论如何EasyTouch5.x 依然是我们
2020-10-14 20:02:24
191
原创 Unity 如何实现批量修改图片格式
前言unity开发游戏过程中,经常会批量修改部分图片格式,比如ios端,我们会修改为astc6x6,android端我们会修改为ETC2。又或者我们需要把图片打包图集,需要批量设置SpriteTag。但是当我们导入大量图片时,如果一个文件夹一个文件夹的修改,再加上android和ios不同平台的修改,这就需要大量的操作,而且最要命的时修改完后,如果团队里有人再添加新的图片,上线打包时,还需要重新整理标记图片格式。那么就需要我们写一个小工具来自动处理这个过程。常用的有两种方式第一种方式:使用unity
2020-09-25 20:55:43
223
原创 Unity ILRuntime项目优化的若干建议
前言关于Unity项目的优化点,有很多博客介绍过,我也曾经发过很多,今天呢把一些具体的数据拿出来和大家分享优化测试点测试1foreach 和 for循环的比较测试代码/gcms/1w次foreach循环遍历数组gc:1.0MB30msfor循环遍历数组 i<list.Lengthgc:0B14.05msfor循环遍历数组 length缓存gc:0B7.9ms public static void TestListLoop()
2020-09-19 23:19:07
411
原创 Unity 编辑器实现UGUI批量修改RaycastTarget
前言UGUI中创建Image,Text,默认会勾选RaycastTarget,这一点容易被大家所忽略,然而,不管是我们自己测试还是官方建议,其实Raycast会在运行时不停的进行射线检测点击,会产生不小的性能瓶颈。所以建议大家把没用的Image或者Text上面的RaycastTarget勾选掉,所以我们写了一个编辑器工具,可以批量处理UI的RaycastTarget,使用方式如下:实现代码如下:using System.Collections;using System.Collections
2020-09-19 22:48:12
81
原创 unity 如何实现一个日志上报系统
前言unity开发游戏,对于日志系统,一般我们都会碰到两个问题?1.发布到手机后,去掉日志打印,节省性能2.部分错误日志,需要上报到服务端。方便后期维护解决方案1.对于问题1,UnityEngine已经给了一个解决方案,代码如下:Debug.unityLogger.logEnabled = false;这样虽然可以关闭日志,但是就全部关闭了,有不方便我们截获异常了。2.对于问题2,一般我们最常截获并上报的就是Error,当然有时也会截获部分Debug日志。这样的话,我们就不能直
2020-09-12 18:17:05
230
原创 Unity 如何拆分图集中的单图
很多时候我们会从某些途径获得一些图集,然后我们需要使用里面的小图,如果让美术一个一个来拆分,就比较麻烦,这里给大家提供一个小工具,可以自动拆分图片。本来想自己写一个,但是发现网上很多已经写好的,这里就不重复造轮子了,给大家分享一下吧使用方法:1.新保证原图,已经使用Unity的SpriteEditor分割。2.选中想拆分的图集文件,点击Assets/Split Atlas按钮代码:using UnityEngine;using UnityEditor;using System.IO;us.
2020-09-07 10:27:49
359
原创 unity 如何实现AssetBundle资源管理
unity实现AssetBundle资源管理1、最上层是 AssetBundleManager,它提供了一些列的接口,同步和异步的都有。给lua导出的接口不使用泛型。SetAssetBundleResidentLoadAssetAsyncLoadAssetBundleAsyncUnloadAssetBundleUnloadUnusedAssetBundle2、Asset 对应一个资源对象,一个资源加载完毕之后,通过Asset.asset就可以获取到对应的资源。它可以指定是否是引用计数的模式,以
2020-09-05 19:09:06
190
原创 Unity 如何使用命令模式
命令模式游戏中,当你想通过一种通用的方式来存储命令并能够撤消命令时,那么命令模式最有用。在“示例”中,你将看到一个可以通过GUI按钮移动的简单点。采取行动后,您可以撤消并重做。我在屏幕上添加了一个简单的OnGUI标签输出,因此您可以看到命令列表,并指出哪个是当前命令。在此示例中使用了4个类:Command-这是任何命令模式都可以继承的基本结构(抽象类)。您可以在任何项目中使用此类。MoveCommand-这是从Command类继承的结构,将使用Execute和UnExecute(撤消)。每个移
2020-08-29 18:34:59
213
原创 Unity 包体优化之png拆分为JPG和Alpha Mask
Unity 应用ImageMagicalpng图片占用空间很大,如果没有透明通道,可以转成jpg,从而使包体变得很小。而有透明通道的图片就没有办法改成jpg了。但是,有一个库,叫ImageMagick,可以实现这个操作。原理是把一张png,拆分成两张jpg(一张图片.jpg+一张plphaMask.jpg)。原图284k,拆分后,一张52k,一张38k。基本可以压缩掉200k的大小。下面看下效果:拆分后:该算法在Android和IOS上应用颇为广泛,尤其是国外。我们搞Unity游戏开发的,
2020-08-19 16:03:38
275
原创 Unity 如何实现自定义编辑器工具
Unity自定义Inspector界面在开发游戏的过程中,经常碰到需要开发编辑器的功能,Unity商店里面不乏一些非常出色的编辑器工具。当然还有一种开发编辑器工具的工具,比如:Odin,这个工具让开发编辑器变得异常简单,但是里面有大量的Attribute重写,我担心影响Unity编辑器的性能,没敢轻易使用,而且一般的编辑器工具,直接动手就写了,根本也不需要什么插件。今天我把他的源码简单看了一下,实现了它的一个功能,扩展Inspector,期间查阅各种资料,又把Unity自定义编辑器的API给过了一遍,这
2020-08-11 18:29:06
565
原创 Unity 如何实现基于UI的画线组件
UGUI画线组件Unity自带有一个LineRender,在3D中使用还挺方便,但是如果要在UI上使用,来回转换坐标系,非常的麻烦。本篇文章就是集成Image组件,然后重写了OnPopulateMesh函数,实现了自定义UI划线组件。代码:using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class LineDrawer : Image{ public List<Vect
2020-08-05 10:57:23
947
2
原创 Unity 如何实现AssetBundle加密
前言随着Unity的普及,越来越多的公司使用Unity来开发手游,Unity的手游市场占有率越来越高。有很多小白和小公司就使用AssetStudio来破解别人的资源来使用。AssetBundle的资源加密,对于我们来说越来越重要。方案1过去,通过官方文档的了解,我们主要可以通过,AssetBundle.LoadFromMemory(Async)的方案来实现资源包加密,官方文档对这个方法是这样描述的:Use this method to create an AssetBundle from an
2020-08-03 18:39:14
341
原创 Unity 如何实现动态启动页
前言大家都见过天美的游戏启动页,Tim…,一个自定义的序列帧动画,非常漂亮且流畅,但是显然,Unity本身不具备这个功能。虽然unity2017之后,添加了fade和dolly效果的启动页,但还是无法真正的自定义动态启动页,更别提加入自定义的gif或者帧动画了。那么如何添加真正的序列帧动画呢,那就要使用原生脚本来写启动页了,所以我们需要横跨IOS+Android+Unity,三个不同的领域来实现这一功能。针对这个功能本身,其实对于ios和android原生的开发一点都不难,但是要把这个功能融入unity
2020-07-24 20:32:33
533
原创 Unity 如何实现苹果动态模糊遮罩
前言使用过苹果手机的都知道,苹果手机在上banner滑下来的时候,会有一个动态模糊的透明背景,其实就是一个毛玻璃效果,用户可以看到毛玻璃下面的应用或者列表,依然时活动的状态,这就是我说的苹果的动态模糊效果。见下图1.实现原理先说原理,要实现一个动态模糊的遮罩,主要有两个技术难点。1.模糊效果:模糊的效果肯定是使用shader,有一种模糊大家应该都听说过,那就是’'高斯模糊",高斯模糊的算法是一个最长常用的模糊图像算法,因为高斯模糊的效果非常的好。2.动态遮罩:动态遮罩,什么意思呢?就是说,我们有一
2020-07-24 19:28:30
492
原创 Unity 如何实现一个通用的新手引导框架
前言在游戏开发中,新手教程是必不可缺的一项功能,一个方便增删改查的教程框架是非常重要的,可以为项目提高很高的效率。一般不同的游戏项目,新手引导也不太一样,比如,在一些复杂的3D游戏中,有关人物的技能,杀怪,副本等等的流程引导,常常会习惯创建一个Base基类,然后针对不同类型的引导,继承一些子引导类,然后配合一些关卡配置表,来实现不同的引导。而一些简单的2D游戏,比如棋牌,卡牌,休闲等游戏,因为大量的引导都是基于UI或者2D平面的,所以使用一套通用的引导代码,加上配置表,可以完成90%的新手引导。我今天
2020-07-16 22:35:58
2192
原创 Unity 如何实现一个强大的MMO技能系统!
1. 如何实现一个强大的MMO技能系统——序章前言技能系统可以说是游戏中广泛存在而又最重要的系统了,它是整个游戏战斗体验的核心。一套强大的技能系统可以让游戏的策略性,可玩性得到极大的提升。然而技能系统牵涉到的模块非常多,又会面对策划各种各样的奇葩需求,同时技能模块中很多系统的设计不仅仅对程序员的编码能力提出了一定的要求,而且还需要程序员对游戏机制有着深入的理解。可以说要实现一套强力的高可用高扩展的技能系统还是有一定复杂度的。如果作为一个游戏玩家,谈论到技能系统,我们一定会对War3的技能编辑器印象深刻
2020-07-09 11:06:16
1644
翻译 用一个用户场景来掌握它们
翻译自一篇博文,原文:One user scenario to rule them all异步系列剖析C#中的异步方法扩展C#中的异步方法C#中异步方法的性能特点。用一个用户场景来掌握它们c#中异步方法的几乎所有重要行为都可以基于一个用户场景进行解释:尽可能简单地将现有的同步代码迁移到异步。你应该能在方法的返回类型前面加上async关键字,在方法名最后加上Async后缀,在方法内部加上一些await关键字,就能得到一个功能完整的异步方法。这个“简单”场景以许多不同的方式极大地影响异步方
2020-07-04 18:29:38
233
翻译 C#中异步方法的性能特点
翻译自一篇博文,原文:The performance characteristics of async methods in C#异步系列剖析C#中的异步方法扩展C#中的异步方法C#中异步方法的性能特点用一个用户场景来掌握它们在前两篇中,我们介绍了C#中异步方法的内部原理,以及C#编译器提供的可扩展性从而自定义异步方法的行为。今天我们将探讨异步方法的性能特点。正如第一篇所述,编译器进行了大量的转换,使异步编程体验非常类似于同步编程。但要做到这一点,编译器会创建一个状态机实例,将其传递给异
2020-07-04 17:36:38
202
翻译 扩展C#中的异步方法
翻译自一篇博文,原文:Extending the async methods in C#异步系列剖析C#中的异步方法扩展C#中的异步方法C#中异步方法的性能特点。用一个用户场景来掌握它们在上一篇中我们讨论了C#编译器是如何转换异步方法的。在这一篇,我们将重点讨论C#编译器为自定义异步方法的行为提供的可扩展性。关于如何控制异步方法机制有3种方法:在System.Runtime.CompilerServices命名空间中提供你自己的async method builder。使用自定义的ta
2020-07-04 17:27:16
143
翻译 剖析C#中的异步方法
翻译自一篇博文,原文:Dissecting the async methods in C#异步系列剖析C#中的异步方法扩展C#中的异步方法C#中异步方法的性能特点。用一个用户场景来掌握它们C#这门语言对开发者的生产效率有很大帮助,我很高兴最近的推动让它变得对高性能应用更加合适。举例来说:C# 5引入了“async”方法(async表示异步,也是关键字)。这个特性从用户的角度看是很实用的,因为它能将几个基于Task的操作合并为一个。但是这种抽象是需要代价的。Task是引用类型,每次实例化的时候
2020-07-04 17:17:53
187
翻译 Unity 2018中使用Async-Await替代 coroutines
在Unity中使用协程通常是解决某些问题的好方法,但是它也具有某些缺点:协程不能返回值。这鼓励程序员创建巨大的整体协程方法,而不是用许多较小的方法组成它们。存在一些变通办法,例如将Action <>类型的回调参数传递给协程,或在协程完成后强制转换从协程产生的最终未类型化值,但是这些方法使用起来很麻烦并且容易出错。协程使错误处理变得困难。您不能将yield放入try-catch中,因此无法处理异常。另外,当确实发生异常时,堆栈跟踪只会告诉您协程在何处抛出了异常,因此您必须猜测可能从哪个协程中调
2020-07-01 18:48:54
866
原创 EasyTouch手势识别
EasyTouch 单指或多指手势动作识别在场景目录列表中 添加EasyTouch物体EasyTouch 单指或多指手势动作识别Enable EasyTouchEasyTouch触屏功能开启或关闭Enable Unity Remote远程unity ? 开启多指触屏模式 (最终打包时,关闭此选项)GUI兼容EasyTouch 单指或多指手势动作识别Enable Uniyt UI detection开启或关闭Unity UI元素触屏识别Unity UI compatibilityEna
2020-06-28 10:26:16
320
原创 ILRuntime官方Demo笔记
调用/执行 热更中的方法#调用热更代码中方法,写在AppDomain中,记录一下主要几个方法:AppDomain.LoadAssembly 加载热更dll执行热更代码的方法,有两种方式:appdomain.Invoke(“HotFix_Project.InstanceClass”, “StaticFunTest”, null, null);预先获得IMethod,可以减低每次调用查找方法耗用的时间,代码如下://预先获得IMethod,可以减低每次调用查找方法耗用的时间ITyp
2020-06-28 10:09:53
174
原创 最新 XLua 与 ILRuntime 性能对比
现在很多项目都使用xlua来开发整个项目,但是实际上使用的并不是xlua标榜的“热修复”,毕竟国内游戏还是要要求可以热更新新功能的,因此如果采用热修复的方案,则需要小版本使用lua写功能,大版本又要把lua版本转换为C#代码重写一次,不太现实,因此现实中的许多公司都是使用lua来写大部分的逻辑。但是u3d是个C#语言为编程语言的引擎(当然还有JS…),一般lua项目中,我们会把逻辑运算量大,复杂度高,对性能有要求的代码写在C#代码,或者C++ DLL库中,比如加载,更新,框架,战斗等, 这就需要程序要经常
2020-06-28 10:02:34
1546
8
Submarine_Source.unitypackage
2020-04-29
Shader Forge 1.3.8.0_unity2018.unitypackage
2019-10-15
rubyinstaller-devkit-2.4.4-2-x64.exe
2018-08-08
LitJson_Ext
2018-06-04
LitJson.dll
2017-03-30
DoTween Pro 0.9.6
2017-03-14
Playmaker v1.8.3
2016-12-12
.NET Reflector8.5 +注册机
2016-10-15
Behavior Designer
2016-02-01
Ulua v1.18
2015-07-31
C++_Iterator_迭代器_介绍
2015-02-27
Google+C+++编程规范
2015-02-26
Lua 5.1 参考手册
2015-02-26
Shell脚本学习指南
2015-02-26
Vim命令中文手册
2015-02-26
PassionY的留言板
发表于 2020-01-02 最后回复 2020-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝