自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 移动端GPU架构

IMR:即时渲染模式,来个DC立刻渲染,渲染的时候需要访问显存的RT,这种速度是最快的,但带宽高。TBR:把渲染的屏幕分层多个小格,渲染指令来了之后可以执行VertexShader,光栅化得到片元信息后会在这个像素对应的片元队列上排队,等到切换RT的时候才一次性渲染所有片元,渲染Tile的时候把Tile对应的Buffer复制到高速缓存,这样就不用频繁访问显存,当渲染结束后把数据写回显存。这样速...

2020-03-21 19:37:26 734

原创 Vulkan简介

最近学习了一下Vulkan,通过这篇文章来对我所学的知识进行一个总结。前言Vulkan可以认为是Opengl版本的重写,它提供高性能和低CPU管理负担,天然支持多线程,能较好发挥多核CPU的性能,是一个能和DX12相提并论的东西。同时Vulkan几乎支持所有平台,跨平台API具有非常好的优势。Vulkan把驱动层做的很薄,把很多权限交给开发者,使开发者能更精确地控制渲染流程和资源管理。把很多...

2020-03-21 17:01:26 6748

原创 贪吃小怪兽介绍之整体框架

整体框架如下所示,分为三层,上层只能依赖下层。UI层:处理每个面板的UI,比如登录界面就有UILoginPage来管理,(继承于UIBase,UIBase继承于MonoBehavior)功能模块:这一层和Unity完全隔开,对应UI面板有对应的模块提供相应的功能,比如UILoginPage就有LoginModule,用他来处理登录注册信息,UI层直接调用功能模块的功能,功能模块主要是通过事...

2018-09-13 17:33:42 307

原创 贪吃小怪兽介绍之UI框架

如图所示:调用UIManager的Open、Close、GoBackAfterClose.....等接口可以按照类型或者名字打开面板,注意继承UIBase的脚本名和资源名一定是一样的,这样才可以按照类型加载面板,UIPage继承于UIBase,之前考虑到这种情况,如果打开一个面板,上面又打开很多个窗口(比如进入现在的qq飞车,上来一堆窗口),这时候用户按下手机的返回键那应该返回到那个页面呢,是返回...

2018-09-13 17:33:37 371

原创 贪吃小怪兽介绍之功能模块框架

如图所示,这个东西主要是从一个山寨贪吃蛇大作战的项目中学来的,SendMessage的签名是SendMessage(string target,string msg,param object[] args),target是模块名,msg是对应的方法名,args是对应的参数,通过反射发送到指定模块,如果模块不存在就缓存起来,等创建后再把事件和消息发给模块。举个实际的例子,Module1是LoginM...

2018-09-13 17:33:32 337

原创 贪吃小怪兽介绍之服务层框架

服务层没有框架。。。每一个管理器都是单例,很独立了,依赖的都是一些工具类,比如ResUtils加载资源的工具,NetUtils获取IP、安全关闭Socket之类的。只要在游戏开始的驱动类中Init一下管理器,就可以一直用。...

2018-09-13 17:33:27 162

原创 贪吃小怪兽介绍之客户端帧同步框架

如图所示VKey是虚拟按键,用户每一帧的输入通过事件发送到PVPGame,FixedUpdate是Unity的不是自己写的,由Unity来驱动PVPGame,每一次驱动包括发送一次数据包和从帧同步管理器获取播放的帧数:1、如果是0,说明没有多余的数据了,就是网络卡了,没收到数据。。Unity的框架还是正常运行,但是我不驱动任何物体运动,看起来跟游戏卡了一样。2、如果是大于0的数,说...

2018-09-13 17:33:23 483

原创 贪吃小怪兽介绍之通讯协议

写之前定义了这些,后来又加一点,还没有完成这些协议,而且没有写心跳包,因为完成了帧同步很激动,然后就把不想写心跳包了。。buff也没有实现 所有ID、指令都是int除了客户端上传的帧同步数据,其他都是发什么上去服务器就转发什么给客户端 帧同步协议(FrameKey)上行:FClientKey(会话ID + 操作 + buffID) 是否能释放技能由本地计算数据,发送...

2018-09-13 17:33:18 297

原创 C# GC内存泄漏

暂时写下我现在知道的,以后有更深的理解再补充,写的不对的欢迎留言指出。查了一些资料,GC内存泄漏我觉得可以分为狭义的内存泄漏和广义的内存泄漏吧,狭义的泄漏是因为某些认为原因,GC未能履行其职责清除内存,比如编码的时候不小心忘记清除没用的静态共有对象,使得他一直占有没用内存。广义的泄漏就是真的就泄漏了,主要是非托管类型。对于第一种情况我知道的几种泄漏的方式:1、静态对象没有及时释放。静态...

2018-09-13 17:33:13 1073 2

原创 从缓存友好的角度分析数组和链表

上次被T4专家暴虐,希望我从Cache Friendly分析顺序遍历数组和链表,回来看了一下操作系统书大概了解了一点大佬说的Cache Friendly,说的不对或有补充的巨巨请留言哈。首先要知道高速缓存是怎么工作的,他是为了解决CPU计算和内存读取速度不匹配的问题,使用多级缓存,把经常使用的数据放在高速缓存,一级缓存的速度接近寄存器,但是价格昂贵容量小。数据以块为单位调入缓存,原理主要是局部...

2018-09-13 17:33:05 772

原创 计算几何叉乘作用

1、获得最小的旋转角度。比如做一个方向盘,目标点在B,则可以OA叉乘OB,使用右手定则,大于0逆时针旋转,小于0顺时针。2、判断点在线的左边还是右边道理和上面的相同,左边右手定则是大于0的,小于0右边,等于0共线,可以运用这个来判断一个点是否在多边形内部。如果多边形顶点按逆时针给出,则可以直接判断,O分别在BC、CD、DA、AB左边如果多边形顶点按顺时针给出,则可以直接...

2018-09-13 17:32:59 1820

原创 Unity性能优化

一、资源优化1、贴图贴图优化是大头,因为一个游戏内存最多的基本都是贴图了,所以贴图优化很重要。(1)是用PackingTag打包贴图,因为一张贴图大小如果不是2的n次幂,unity会补全,这时候有很多地方是空的,利用这个工具可以把多个小的贴图挤进那些空白的地方。为了节省内存,已经不只是补全空白位置,把多张贴图打包成一张大的贴图,也可以大大减少小贴图浪费的那些空白内存。同时对内存也有...

2018-09-13 17:32:38 584 2

原创 贪吃小怪兽介绍之动画同步

自己写一个Animation叫GAnimation,用组件的方式添加到Player类中,这不是一个框架,而是一个类似于状态机的东西,我使用的是Animation动画,然后给每个动画定义优先级,比如攻击的优先级小于被攻击,即是说一个人的攻击可以被打断,类似这样的。辅助类有Trigger和GAnimationClip(带动画帧事件)。如何做到同步,如果数据是同步的,那么我只要根据数据来一帧一帧播放,来...

2018-09-13 17:32:31 283

原创 贪吃小怪兽介绍之位置同步

类似GAnimation,来一套GTransform,传入的数据全为整数,GTranform也是全整数计算,速度快,没误差,计算攻击范围更爽。在计算旋转角度的时候使用Atan2来计算,Atan2(y,x)可以获得点(x,y)与x轴的夹角,返回的是一个(-pi,pi)的单精度浮点数,转化为整数的角度值然后自己写插值,GTransform一直保留一个整数的当前Y轴的旋转角度,计算出目标角度后再计算De...

2018-09-13 17:32:16 366

原创 使用泰勒公式计算Cos值

计算0~359度的余弦值,计算平均需要计算得到结果的最后一个n的大小,n从0开始。随着n的增大,每一项也是非常昂贵的计算。这是第一种计算方法,把范围缩小到0到90度,fac的返回值可以不用longlong,平均需要计算n到5.13889,#pragma warning(disable:4996)#include<stdio.h> #include<string.h> ...

2018-03-22 22:02:22 9947

原创 求向量与圆交点

这个题也是被T4专家暴虐的题,我直接直线然后delta。。。跟高中数学一样,大佬叫我用向量的方式还是啥做,就是不要解方程,结果还是没想出来。后来把这个题分享给一个师兄,他刚好在一篇讲光线追踪的论文看到然后拿给我看,书中是球面不是圆,都差不多,下面按我的理解写一下。首先三维空间下,假设圆心O(a,b,c),半径为R,那么球可以定义为(x-a)*(x-a)+(y-b)*(y-b)+(z-c)*(z-c...

2018-03-21 16:18:41 1920 2

原创 介绍一下我大二开发的游戏:地下城冒险

前言:写来参加学校比赛的,当时写了一个月左右就期末考试了,后来就没写过了,单机游戏,也是一个烂尾工程。介绍:这是一款3D的RPG游戏,那时候也是看到龙之谷手游是Unity做的,就想自己能不能来一发。这游戏就5关,就是刷刷怪而且任务系统也不完善,各种参数也没认真调,关键是那时候我还不知道框架这种东西,但是还是稍微留意了一下,比如我所有数据都是从一个类中取出来的,现在应该叫做配置管理器。唯一学到的东西...

2018-03-01 20:30:51 1003 2

原创 Unity MVC模式

网上有各种MVC,我只说我用到的MVC。如图所示,管理器持有数据实体,也就是数据模型了,他可以修改数据实体的数据,比如游戏管理器收到用户的输入,比如点击了Attack按钮,那就修改对应实体的IsAttack = true(Trigger),ViewObject是视图对象,他通过Unity的Update轮询自己对应的数据实体获取数据变化,继续上面例子,发现IsAttack = true;那就呈现对应...

2018-03-01 16:50:44 446

原创 Unity 日志管理

以前实习的时候写的日志系统是在Debug的事件中加一个监听,把收到的日志保存到文件,这个很多博客都有写,因为大佬要求有行信息,就是 xxxxx cs.168显示一个Log的行号。然而在ReleaseBuild里面是没有行号的,别想了。。只有Development Build日志才有行号。后来发现行号不是必要的,只要知道哪个函数发出的就好,而且在Debug添加监听有很多局限性,不能修改控制台的Log...

2018-03-01 14:20:59 2163 1

原创 介绍一下我开发了差不多一个月的小游戏,贪吃小怪兽~

前言:其实还有很多没开发完,因为要准备实习,所以就先搁这儿了。而且只是个原型,很多东西都没调整,通讯协议也没完善,所以很脆弱的。介绍:做这个游戏是因为寒假开始的时候我玩了一款叫贪吃小怪兽的游戏,因为暑假实习后到寒假几个月都没有做项目了,于是决定山寨一波。这个游戏是局域网的多人在线互撕游戏,我山寨的就很菜了。。服务端是TCP,因为UDP在处理比较麻烦而且在公司有人实现,所以我就简单用TCP实现一下帧...

2018-03-01 12:28:18 985

原创 C# internal

先看下面两张图,第一张是代码,第二种是前面代码打包的.dll文件,区别很明显,private,protected(忘了加进去)和internal的东西都不会在.dll文件中出现,也就是说引用这个dll的程序不会访问到上面这些字段,private和protected就很明显不需要解释。internal字段为什么不会被引用的程序访问呢?因为internal的意思是只能在本程序集内访问,他在本程序集相当...

2018-03-01 11:41:20 209

原创 (解决方案在最下面啊)Assertion failed: Cancelling DisplayDialog because it was run from a thread tha..

Unity2017.3.0f3输出日志:Assertion failed: Cancelling DisplayDialog because it was run from a thread that is not the main thread: Opening file failed Opening file D:/Game/EatGit/archive:/CAB-565b8f99473e03...

2018-02-12 19:43:05 4101 5

原创 TargetParameterCountException: parameters do not match signature

在使用C#的反射的时候出现的这行东西,我是这样写的。MethodInfo mi = this.GetType() .GetMethod(msg, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);if (mi != null){ mi.Invoke(thi

2018-02-06 12:36:54 2888 1

原创 unity中的单例模式

单例模式最重要的是不要被new来使用,在C++中可以把构造函数设置为私有或者虚继承等方法来防止被new来使用,在C#中也可以通过下面代码来实现。如果被new了,那么_instance一定是null的,在使用单例的之前,我们可以先用Init()来初始化,其他情况也可以先用CheckSingleton来检查是否被正确调用。注意这不是一个线程安全的单例。 public abstract cla

2018-02-05 15:14:26 432

原创 字符串的组合(有重复字符)

如果没有重复的字符,比如abc,则可以用简单的选入队列和不选入队列来枚举所有组合,如果是有重复字符比如aabb,按照原来的算法会ab,ab,ab,ab或者aab,aab,abb,abb,所以需要改进一下删去一些重复的情况,分析例子可以知道出现重复的原因是同一种字符在多层递归中组合选择了同一数量造成的,比如aabbb,会出现abb,abb,在a后的选择中bb出现两次,为了防止这种情况,我们可以先去重

2018-01-25 23:49:38 765

原创 组合出最大的数字能被15整除

最近在复习没有更新,被同学问到这样一个题就做了一下随便发上来吧。#pragma warning(disable:4996)#include #include #include #include using namespace std;#define N 1005char dt[N];//data intint dtInt[N];int CountSum(int len){

2018-01-15 22:22:18 896

原创 有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接, 问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。

有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接, 问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。很久没做算法题有点摸不着头脑,查了一下其他人的做法是floyd,就是那个O(n^3)的最短路算法,当年我的总结是可以求出任意两点的最短路。如何判断循环,应该就是dis[i][i]上有值吧。那就写个核心算法吧。fo

2018-01-08 13:29:47 452

原创 C# GC何时被调用

首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆。CTR:设置引用类型,值类型。GC:只负责回收托管对象,不负责回收非托管对象。垃圾回收器的基本假定:         1.被分配内存空间的对象最有可能被释放。在方法执行时,就需要

2018-01-07 22:56:47 4907 1

原创 UnityShader 实现2D游戏迷雾

先看效果吧。我使用的是屏幕后处理效果,首先先去Photoshop做一张图片如下,用画笔点一个点就可以了,使用它来对摄像机截取的图片进行处理。在摄像机上添加脚本文件using System.Collections;using System.Collections.Generic;using UnityEngine;public class TestSc

2018-01-07 01:24:11 6223

原创 C# System.GC.SuppressFinalize(object)

C#的GC释放内存不是立刻释放,而是先放到f-reachable队列中,在合适的时间调用终结器,这样延迟的终结器的调用,调用了终结器后的对象才会回收其内存,如果希望对象能更快被释放,可以实现IDispose接口并调用System.GC.SuppressFinalize(this),调用这个方法后对象不会被放进f-reachable队列中,但是注意不放进队列就不会调用终结器,所以在Dispose中要

2018-01-06 20:14:24 1504

原创 C# const和readonly

const:声明时初始化,修饰后字面值的内置类型不能修饰类,他本身就是一个静态的所以不能static construction,无分配内存。readonly:可以在声明时初始化也可以在构造函数初始化,可以修饰自定义类,需要分配内存。可以用只读属性代替readonly,增加封装性。

2018-01-06 19:28:49 199

原创 C# 扩展方法

C#的扩展方法一定是静态方法而且是共有的(也可以私有,只是访问不到而已。。),可以放在任何类中,他的第一个参数一定是"this 添加方法的类型 任意名字",比如对object扩张一个方法可以这样写。  public static class ExtensionHelper { public static void Debug(this object obj, string msg)

2018-01-06 19:03:31 1220

原创 C# 带后备字段的属性和不带后备字段的属性

public class Test{ public Test() { Date = "1"; } private string dt { get; } = "1"; public string Date { get; }}这是一种带后备字段的属性,他是自动完成的属性,比如这个Data,他是一个自动完成的只读属

2018-01-06 18:46:34 850

原创 有两个序列a,b,大小都为n,序列元素的值任意整数,无序

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];思路设delta = Sum(a) - Sum(b)现在交换a中的i和b中的j,则S

2018-01-06 17:05:07 833

原创 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。 这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。思路:设f(n)是n阶台阶的总跳法当n=1时跳法为1当n=2时跳法为2当n>2时,如果第一步跳一步,则跳法就

2018-01-06 14:29:03 1473

原创 左旋转字符串

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:把ab旋转为ba,把cdef旋转为fedc,这时字符串是bafedc,旋转整个字符串旋转得到cdefab。

2018-01-06 14:25:35 99

原创 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.

网上都说是DP结果写了个递归,其实就是个简单的DFS,要解一个最优解才可能用上DP。不喜欢递归可以用栈模拟递归。#pragma warning(disable:4996)#include #include #include #include using namespace std;#define N 1005int Solve(int cur,int max,int num){

2018-01-06 13:17:55 445

原创 Unity几种常用的设计模式

1、单例模式:某个类只能有一个实例,单例非常重要,比如我需要管理游戏的UI,现在我要关闭某个页面,页面上可能打开很多子窗口也需要一起关闭,这时候用一个单例来统一管理就很好解决这个问题。单例模式一般都是xxxController、xxxManager等,可以这么写。public abstract class SingleTon where T : SingleTon, new() {

2018-01-04 04:43:05 20875 1

原创 斐波那契数列,用最快的方法求该数列的第n项

题目:定义Fibonacci数列如下:       / 0 n=0f(n)  1 n=1      \ f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。最快当然是矩阵快速幂了{fn,fn-1} * {1,1

2018-01-03 23:17:21 3832

原创 n个数字(0,1,…,n-1)形成一个圆圈

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。以前叫约瑟夫环,用队列水过去,当然他明显是个数学题,参考一下别人的思路,自己再推一下公式吧。

2018-01-03 22:32:20 2926 2

protobuf-net.dll

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

2017-12-28

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

TA关注的人

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