- 博客(108)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 一个简单的游戏框架[汇总]
一个简单的游戏框架[汇总]代码:https://github.com/HushengStudent/myGameFramework 一个简单的游戏框架:Lua相关一个简单的游戏框架:tolua相关一个简单的游戏框架:配置表方案一个简单的游戏框架:网络方案一个简单的游戏框架:行为树设计一个简单的游戏框架:资源管理方案 持续更新。。。...
2018-03-04 01:28:57
5898
原创 Unity线性空间
使用线性空间的一个显着优点是,随着光强度的增加,提供给场景中的着色器的颜色会线性地变亮。使用伽玛空间,随着光强度的增加,颜色会快速变为白色。一些移动设备不支持线性空间(仅对OpenGLES 3.0及以上的设备进行支持)。Unity贴图上有个选项:sRGB(Color Texture),当贴图作为颜色来显示,则勾上sRGB,当贴图作为值来使用,则不勾上。伽玛空间:Unity设置了伽玛空间后,图片导入时无论是否选择勾选sRGB的结果都是一样的,不会有伽玛校正,默认你导入到工程的纹理就进行了伽玛压缩。在伽玛
2020-06-05 00:25:21
1608
1
原创 [Unity 优化]Shader
Shader变种:multi_compile:代码控制关键字开关,一定会编译变种;shader_feature:一般使用材质控制是否使用,被使用才会生成变种(打AB的话,Shader要和材质球/ShaderVariantCollection打包到同一个AB里的时候才能知道需要哪些shader_feature);skip_variants:可以剪裁变种;Graphics设置里面设置Always Inclueded Shaders,则所有变种一定都会被打包;变种太多会导致ShaderLab内存占用变大
2020-06-04 23:17:17
1050
原创 一个简单的游戏框架:资源管理方案
代码:https://github.com/HushengStudent/myGameFrameworkunity的资源类型,主要有Prefab,纹理,animator,clip,material,shader,mesh等。unity的资源加载方式主要有Resources加载和AssetBundle加载两种方式。1、Resources加载Resources加载主要分为同步和异步两种方式,R...
2019-01-07 00:45:57
9545
23
原创 一个简单的游戏框架:行为树设计
代码:https://github.com/HushengStudent/myGameFramework这里主要是介绍一下自己写的一个简单的行为树。1、行为树?①行为树是常见的游戏ai解决方案;常见做法就是程序实现好工具,由策划配置实现ai功能;这里就涉及到一个是行为树的框架实现和行为树编辑器实现;②行为树节点分为两类,一是常见业务节点,可以有一个子节点;二是组合节点,一般没有具体业务逻辑,一般有...
2018-07-15 21:03:53
11112
原创 一个简单的游戏框架:网络方案
一个简单的游戏框架:网络方案代码:https://github.com/HushengStudent/myGameFramework1、C# socket编程:使用socket,通过ip+端口,连接服务器和客户端,传递数据;//client://创建Socket_socket = new Socket(addressFamily, SocketType.Stream, Pro...
2018-05-27 17:46:25
2694
原创 一个简单的游戏框架:配置表方案
一个简单的游戏框架:配置表方案代码:https://github.com/HushengStudent/myGameFramework1、配置表格式csv,逗号分隔,可以使用wps和Excel打开编辑,方便策划使用;默认第一行为注释;默认第二行为字段名+类型;二者以冒号隔开;默认第一列为主键;2、配置表导出方案在编辑器下,读取配置表的内容,并把内容按规则转换成对应类...
2018-05-20 18:21:01
13044
原创 一个简单的游戏框架:tolua相关
一个简单的游戏框架:tolua相关代码:https://github.com/HushengStudent/myGameFramework1.tolua集成下载tolua:https://github.com/topameng/tolua关于tolua的集成主要参考LuaFramework_UGUI,实现自己的LuaMgr。//参考(https://github.com/ja...
2018-03-08 23:38:41
1839
原创 一个简单的游戏框架:Lua相关
一个简单的游戏框架:Lua相关代码:https://github.com/HushengStudent/myGameFramework目前游戏开发中,普遍使用Unity+Lua的形式,为了热更新的目的,所以Lua在游戏开发中基本属于必不可少了,本文旨在简单介绍在Unity开发中,Lua的常见简单使用:1.Lua"类"的实现Lua中实现"类",主要是通过元表实现的,我们简单参考coc...
2018-03-04 01:46:36
3545
1
原创 [Unity 热更新]tolua集成
LuaFramework采用了pureMVC,并集成了多个第三方库,对于项目而言,我们可以直接使用tolua集成到项目,也可以使用LuaFramework删掉pureMVC相关内容集成到项目,使用自己项目的游戏框架。下面为使用tolua集成到项目中可能遇到的问题整理:1、lua的后缀是不被支持打包进assertbundle的,一般把 .lua后缀 变为.lua.txt 或者 .lua.bytes 进
2017-11-09 01:07:48
1670
3
原创 [Unity 优化]内存优化
内存优化可以使用Unity profiler或者对应平台的内存分析工具进行分析,从 Unity3D内部的内存+Mono的托管内存 进行分析,避免内存泄漏。1、内存测试一般使用手机测试,Unity profiler在Editor测试下的结果不准确。[Unity优化]Unity Android Profiler2、内存泄漏①注册的事件监听,定时器事件,网络事件,要及时移除。 ②及时回收不必要的资源,一
2017-11-07 22:21:40
2976
2
原创 [Unity 优化]渲染优化
渲染优化主要是减少GPU的压力。1、透明效果Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个像素每次只绘制一次是最优的,但是由于重叠的布局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,当这个操作耗时超过16.67ms时,就会出现掉帧现象,也就是我们所说的卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量
2017-11-07 22:09:26
1914
原创 [Unity 优化]CPU优化
CPU优化主要是减少计算相关的内容,避免大量的频繁的计算相关操作,当然CUP优化也要与内存优化,渲染优化,发热耗电等权衡取舍。Rendering:1、DrawCall优化 DrawCall是指CPU准备好数据,并把数据传递给GPU,使GPU完成一次绘制的过程。 所以DrawCall压力在CPU而不是GPU。常见DrallCall优化方式: ①打图集 打图集,在UI制作时,避免图集的穿插。
2017-11-07 21:55:23
1348
原创 [Unity 热更新]tolua原理及实践
一、概论1、tolua相比ulua的优势: ①效率更高。 ②更加稳定。 ③不支持使用反射,只支持wrap方式。二、基础[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] 其中LUADLL对应的字符串就是tolua,在不同的平台上mono会去加载对应的tolua.dll或者tolua.so等文件并调用对应的函数。①L
2017-11-04 14:34:31
12536
原创 [ulua]原理介绍
[ulua]原理介绍uLua = Lua + LuaJit(解析器、解释器) +LuaInterface。LuaInterface is a library for integration between the Lua language and Microsoft .NET platform's Common Language Runtime (CLR). Lua scripts c
2017-09-15 23:55:18
1278
原创 [Unity优化]资源优化之纹理优化
[Unity优化]资源优化之纹理优化Unity3D引擎处理纹理:不论你导入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。(美术资源规范:贴图长宽应为4的倍数)不同平台的图集格式选择方案(TextureImporterFormat):Android:RGB Compressed ETC1 4 bits+Alpha(方形)iOS:
2017-08-27 00:16:42
4230
原创 System.IO.File does not contain a definition for ReadAllBytes
System.IO.File does not contain a definition for ReadAllBytes多半是从github下载了源码,打开就报这个错,如不出意外,打开player setting,将平台由web切换为其他即可。如还有问题,尝试设置如下:
2017-07-26 23:22:11
1980
原创 [ulua]开发工具介绍
[ulua]开发工具介绍之前有对ulua有过粗浅的了解,可是目前的项目组并没有使用lua来做热更,上线之后客户端涉及到要更改代码的bug都无法处理,而严重的bug往往只能临时关闭相关模块进行处理,重新提审劳民伤财。所以自己打算再折腾一回,尝试着深入了解下,看能否引入项目。主角介绍:IntelliJ IDEA Community Edition+EmmyLua插件。
2017-07-24 19:48:51
979
原创 [Unity优化]Unity Android Profiler
[Unity优化]Unity Android ProfilerUnity Script Debugging on Android with MonoDevelop is only supported via WiFi. It is not possible via USB Cable。PC设置:1、检查防火墙,开启防火墙端口549992、adb forward tcp:
2017-05-20 16:35:23
2840
原创 Shader Learing(Transparent Shader篇)
Shader Learing(Transparent Shader篇)透明物体的写法:一种是clip,写zwrite,好处是不会排序混乱,坏处是没法blend,即透明度测试,透明度测试不能实现半透,只会删除一些片元,看上去像镂空一些面。(解释:设定一个透明度的值,如a,当物体的透明度>a时,按透明处理,直接舍弃,当透明度另一种就是blend,不写zwrite,这时候就完全依赖于排序,即
2017-05-11 00:04:03
1697
原创 [Unity优化]UWA性能诊断与优化
[Unity优化]UWA性能诊断与优化UWA直播笔记UWA:UWA 视频总体性能趋势1、CPU性能占用①项目运行过程中高于33ms的帧数占比推荐值2、GC调用①调用频率 ( 帧/次 ):GC触发调用频率推荐值>1000帧/次,GC触发得越快,即项目运行时卡顿次数越多。3、渲染模块性能①Drawcall 峰值:项目中Draw Call峰值推荐值②
2017-05-04 00:11:29
3101
原创 Shader Learing(Basic Lighting And Texturing篇)
Shader Learing(Basic Lighting And Texturing篇)顶点着色程序和片段着色程序的基本功能和数据输入输出,实际上现在的着色程序已经可以接受多种数据类型,并灵活的进行各种算法的处理,如,可以接受光源信息(光源位置、强度等)、材质信息(反射系数、折射系数等)、运动控制信息(纹理投影矩阵、顶点运动矩阵等),可以在顶点程序中计算光线的折射方向,并传递到片段程序中进行
2017-04-12 23:34:29
639
原创 Shader Learing(Surface and Vertex&Fragment Shader篇)
Shader Learing分享第2篇(Surface and Vertex&Fragment Shader篇)Shader原理:着色器(英语:shader)应用于计算机图形学领域,指一组供计算机图形资源在执行渲染任务时使用的指令,用于计算图像的颜色或明暗。但近来,它也能用于处理一些特殊效果,或者视频后处理。通俗地说,着色器告诉电脑如何用特有的一种方法去绘制物体。程序员将着色器应
2017-03-04 01:34:10
1311
原创 Shader Learing(Render Pipeline篇)
Shader Learing(Render Pipeline篇)硬件相关:传统的 GPU 使用固定功能的管道(pipelines)实现图形算法,现代的 GPU 则是具有高度灵活性的可编程设备,使用 SIMD 处理器并行处理大量数据,从而实现图形性能。(SIMD:单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集)。GPUvsCPU:CPU 大部分面积为控制器和
2017-03-01 20:04:25
1464
转载 天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?
天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?转自知乎:(知乎ID:阿里云云栖社区)阿里云云栖社区,汇集阿里技术精粹,点此关注 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:阿里云云栖社区链接:https://www.zhihu.com/question/39430220/answer/147663051来源:知乎
2017-02-25 02:03:39
3757
转载 iOS沙盒目录结构解析
iOS沙盒目录结构解析出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如系统通讯录能在用户授权的情况下被第三方应用访问),这个规则把iOS系统的封闭性展现的淋漓尽致。每个沙盒下面都有相似的目录结构,如下图所示(出自苹果官方文档):每个应用的沙盒目录都是相似的,主要包含图中所示的4个目录:1、MyApp.app①存放内容该目录包含了应用程序本身的数据,包括...
2016-11-19 05:59:23
775
转载 Unity3D资源加载与内存管理
Unity3D资源加载与内存管理最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大。这里写下关于Unity3D对于内存的管理与优化。Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBund
2016-11-04 01:35:33
3403
1
转载 Unity特殊的文件夹
Unity特殊的文件夹1、EditorEditor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以。比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫Editor的文件夹都可以。Editor下面放的所有资源文件或者脚本文件都不会被打进发布包中,并且脚本也只能在编辑时使用。一般呢会把一些工具类的脚本放在这里,或者是一些编辑时用的DLL。
2016-10-24 00:33:22
597
原创 设计模式之模板方法模式
设计模式之模板方法模式模式中的角色:抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。/// /// 抽象类 ///
2016-10-11 01:55:15
420
原创 设计模式之迪米特法则
设计模式之迪米特法则如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。1、在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造
2016-09-17 02:49:25
485
原创 C#使用可以为null的类型
C#使用可以为null的类型using System;using System.Collections.Generic;using System.Linq;using System.Text;class program{ static void main(string[] args) { int? a = null; console.writeline("a = {0}
2016-09-17 01:15:22
961
原创 设计模式之接口隔离原则
设计模式之接口隔离原则定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。接口
2016-09-14 01:22:42
402
原创 设计模式之依赖倒置原则
设计模式之依赖倒置原则高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。依赖倒置原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。public class HondaCar{ public void Run(){
2016-09-04 18:23:14
456
原创 设计模式之里氏替换原则
设计模式之里氏替换原则继承的弊端:继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。例如:1、继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法。2、降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束。3、增强了耦合性。当父类的常量、变量和方法被修改时,必需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来非常糟
2016-09-04 17:07:04
481
原创 设计模式之单一职责原则
设计模式之单一职责原则遵循单一职责原的优点有:可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多。提高类的可读性,提高系统的可维护性。变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。class Animal{ public void breathe(String animal){ S
2016-09-04 03:47:57
457
转载 C#类中索引器的使用
C#类中索引器的使用 索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员。 本文只是简单演示一下索引器的概念和基本的使用方法:
2016-04-27 22:44:30
1031
转载 Learning hard C#学习笔记
委托:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DelegateUse{ // 委托使用演示 class Program { // 1. 使用delegate关键字来定义一个委托类型 d
2016-04-25 02:55:36
3171
原创 C#之Action/Func/out/ref/params/类型参数约束
C#之Action/Func/out/ref/params/类型参数约束Action的用法:using System;using System.Collections.Generic;class Program { /// /// 输出字符串 /// static void PrintString() { Console.W
2016-04-17 19:02:47
6910
转载 Unity3D Shader官方教程翻译(四)
Unity3D Shader官方教程翻译(四)1、Shader语法:Pass的雾化处理雾化混合产生像素的颜色是依据于常量颜色(这个常量颜色是基于摄像头的距离的)。雾化不会改变像素的alpha值,仅仅是改变它的rgb分量。指导:雾化是一种模拟自然界中雾气对场景物体视觉效果产生影响的图形绘制技术。此技术从视点到物体逐渐将物体的绘制颜色淡化,直至背景色。通过雾化处理可较好
2016-02-26 11:05:33
1042
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人