自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NxShow的博客

记录游戏编程的点点滴滴

  • 博客(75)
  • 资源 (6)
  • 收藏
  • 关注

原创 【UGUI】基于Mesh的单一图片裁剪

参考了这篇文章:https://www.cnblogs.com/leoin2012/p/6425089.html这篇文章的源码在这里:https://github.com/HanxianshengGame/UGUI_CircleImage/blob/master/SampleScene/Assets/_MyScripts/Example%202.1/CircleImageSolution%20...

2019-12-29 00:29:30 785 1

原创 基于UDP的帧同步网络方案(基础)

帧同步会高频次的上报和下发逻辑帧,所以网络方案非常重要,TCP协议的优势在于有序、可靠、有连接,但是由于较为保守的超时重传方案、过大的包头,会给帧同步带来比较高的延迟和较大的数据流量,而UDP是较为精简的网络协议,不保证时序、不保证可靠性、无连接,但是这些都可以自行实现、定制,并且包头较小,可以说是帧同步较为理想的网络协议。但是直接用UDP的话,肯定是不能满足帧同步的需求的,帧同步...

2019-10-20 01:21:28 3923 1

原创 【unity】动态图集 dynamic atlas (runtime atlas)

不管NGUI还是UGUI,图集都是在制作期间就生成了的,运行时是一张大图,这样做的好处在于我们可以在一定程度上去合并批次,但是图集通常在制作过程中,会分成commonatlas和系统atlas两类,一个界面prefab至少会用到两张图集,就会出现ABA的图集穿插打断合批的情况。还有一种游戏内容多了以后,各种图片也相应的变多,类似图标、commonatlas这种图集,一张2048x2048可能就放不...

2019-05-31 23:57:55 13707

原创 【面经】腾讯U3d面试面经 帧同步方向 (一)帧同步如何解决不同步的问题?

解决不同步问题首先考虑什么是不同步的问题,为什么会出现不同步的情况。那么什么是不同步的问题呢?帧同步是由客户端计算,发送命令给服务器,服务器转发命令达到两边客户端显示一致。服务器是不知道具体逻辑的,所以如果两边客户端计算的某些变量出现不一致的时候,就会出现不同步的情况,随着时间的推进,一个小小的不同步也会造成滚雪球效应,最后的结果可能就南辕北辙了。所以为什么会出现不同步的情况,也很好解释了...

2019-03-10 20:11:38 5187 2

原创 【面经】腾讯U3d面试面经 帧同步方向(总)

近期拿到了一个腾讯的offer,记录一下面试过程。我找的内推,面试的流程如下:上传内推简历,接着马上被HR转到项目组里面,一个小时左右面试官电话过来约面,接着电话面,然后去科兴面,最后HR面,OFFER到手。总的来说腾讯的面试流程还是挺简洁的,听说有人面了很多很多面,我没有遇到这种情况,不过最后给offer时间间隔太久了,一周半才确认。两轮技术面试都是在问帧同步相关的问题,所...

2019-03-07 21:31:54 6954 2

原创 XLua踩坑

Xlua接入需要反射出所有需要热更新的类,标记上[Hotfix]这样的特性,刚开始我想的是通过代码生成的方式 生成cs文件 类似下图:但是这种行为会导致几个问题,其一就是项目组成员遇到删除类的时候,需要同步的将这个文件中的类引用也删除掉。另外一个,打包的时候,由于生成的代码在编辑器下运行,新生成的代码并没有编译出来,导致编辑器可能用的是上一版本的代码,造成热更新的不确定性。修改后使用反射做这件事情...

2018-06-05 10:12:53 2460

原创 Unity Update的节点执行顺序

测试一下Update的节点执行顺序,对于想要自己管理Update的有帮助代码如下using UnityEngine;using System.Collections;public class UpdateTest : MonoBehaviour { // Use this for initialization void Start () { } // Update is c...

2018-03-26 17:11:54 2969 1

原创 解决Mac执行Mono的EXE的问题

因为我们之前都没有考虑到Mac的打包,打包流程都在windows下走的,所有没有考虑到mac下的兼容性问题,今天打mac包发现有部分功能失效了,仔细看发现报了一个Win32的错,如下:"/Volumes/UnityForGame/Game/Client/Assets/Scripts/Game Logic" "/Volumes/UnityForGame/Game/Client/Assets/Scri...

2018-03-20 17:42:28 7073

原创 UNITY NGUI IPHONEX完美适配

苹果的IphoneX新增一个安全区的概念,如下图图中绿色区域为安全区,所有可交互的组件全部放在安全区内,只有背景可以延伸出去,达到全面屏的效果我们适配IphoneX采用NGUI通用的锚点去适配。默认的NGUI屏幕适配方案不支持安全区这个概念,我在NGUI每个继承UIRect的组件下新增一个Bool变量InSafeArea,这个变量如果为True则表示这个组件是放置在安全区内的,如果为false则表...

2018-03-14 10:58:37 3961 5

原创 真机加载AssetBundle闪退,报[Position out of bounds! 1036672174 > 2705600]的解决办法

原因是我们项目今天有个美术上传了本地修改的meta文件,应该是导致了两个资源的GUID冲突了,最后读文件的时候读取到其他的文件去了,解决方案是全部重新Import一次,或者把Library目录删掉 重新打开Unity,或者还原这几个Meta文件

2017-12-26 14:32:22 3461 1

原创 NGUI裁剪粒子的实现,完全仿照原有的NGUI SoftClip逻辑思路,可多层裁剪

参照http://blog.csdn.net/tkokof1/article/details/52107736 这一篇博客但是他只实现了单层panel的裁剪,虽然他的算法和NGUI的思路是一致的,但是由于传入Shader的值不同,所以不太好移植成多层Panel裁剪。我重新对他的思路进行整理了,并且将值统一为NGUI的规则,传入的值都用_ClipRange0和_ClipArgs0表示。首先是C#

2017-12-23 17:06:50 1639 1

原创 Unity特效制作规范

1.      单个特效的粒子数量总数保持在40个以下,一般是20个以下2.      尽量少用序列帧特效3.      用Sprite的特效需要进行合图,再用ETC Alpha分离4.      特效贴图最大的不允许超过1024x10245.      贴图名字规范:区分用于粒子的特效的贴图和用于模型的特效的贴图和用于帧动画的贴图6.      规范化目录,不要新建子目录

2017-12-14 15:14:25 4036

原创 Unity引用自己编译的动态dll遇到的问题

在项目中,有一些代码长期不会改的,想要做成一个dll节省时间,于是就用vs2017新建了dll项目,引用UnityEngine.dll,也顺利的编译出来了,但是导入到unity中却遇到了这么一个问题Internal compiler error. See the console log for more information. output was:,,,,解

2017-11-29 12:27:55 2441

原创 NGUI Panel Soft Clip原理分析

这一块我之前一直看得不是很懂,前几个月有一次做粒子裁剪的时候想模仿做,没有做出来,只能靠着很挫的if来判断。这几天又有一个需求想实现图片的裁剪,不可能一个图片一个panel吧,所以就想到了自己实现Clip Sprite。在这里先分析一下Ngui Panel的软裁剪是怎么实现的。我之前没有看懂的原因是,NGUI对这块做了大量的优化,单独看一行代码,或者一个公式是看不出什么的,单独看shader也

2017-06-05 11:22:41 4293 2

原创 推荐一个博客,说Unity Shader的

http://blog.csdn.net/candycat1992第一次知道这个博客的时候是搜 卡通渲染的时候搜到的,当时并不是太在意。接下来我要为我们的卡通渲染shader做一些优化,尽量接近崩坏3的效果,结果又搜到了这篇博客,发现它说卡通渲染的居然有一个系列的文章。仔细看下去,这位博主居然还是个研究生,服再看一下介绍,博主居然是个妹纸,膜拜擦亮了一下眼睛,博主居然出

2017-05-24 10:26:26 1171 1

原创 [Unity]Unity性能优化实战之GC优化(1)

首先说一下非常简单的New GC,创建一个类 public class A { string b; }在Update函数中这样调用: void Update () { UpdateNewGC(); } void UpdateNewGC() { A a = new A(); }会

2017-03-09 17:57:01 722

原创 [Unity]Unity性能优化实战之GC优化(序)

近期项目即将上线,为了抗住数量众多的玩家,流畅的进行多人同屏对战,我们不得不对游戏进行一次彻底的优化。这个系列就是我对于此次优化的一些总结吧。首先优化是足够了解原理的基础上并且辅以相应的工具才能顺利进行,在优化GC里,我们用到了Unity自带的Profiler,这是一个非常优秀的工具,不仅仅支持编辑器下的调试,还可以看到在设备上的信息。那么,为什么要进行GC优化呢?因为GC

2017-03-09 17:33:14 2845

原创 成都几家游戏公司的面经(C++、图形学) ——第一天

1. struct A {int a;char b;long c;}问 sizeof(A) 占多少个字节 ; 考内存对齐2. class A {void f();}class B{virtual void f();}A* a = nullptr;B* b = nullptr;a->f();b->f();问哪个会崩溃?

2016-06-07 11:35:36 2623 1

原创 dfs

最近在研究图,用的是Luafunction initMap() map[5] = { }; map[4] = { [5] = 60 }; map[3] = { [5] = 10 }; map[2] = { [3] = 50 }; map[1] = { [2] = 5 }; map[0] = { [2] = 10, [4] = 30, [5] = 100 };endfu

2016-05-23 23:15:05 519

原创 一个很简单的后退到上一步的思路

主要思路就是把当前局面全部存下来,要回退的时候,直接覆盖上一局面#include "标头.h"#include #include #includeint curSituation[4][4];std::stack regretSituation;//随机产生一个新的局面void newSituation(){ for (int i = 0; i < 4; ++i) {

2016-04-06 10:32:38 6039 1

原创 【Unity&C#】运行在主线程的Socket

通常的Socket都是通过多线程的方式来实现的,多线程需要确保线程安全,而且代码量也会相对多一些,由于之前已经实现了Unity的协程功能,现在就可以通过协程来实现单线程的Socket了。首先,封装一下C#的Socket。using System;using System.Collections.Generic;using System.Linq;using System.Text;usin

2016-04-05 20:13:01 3655 1

原创 【Unity&C#】写了一个事件分发器

我一直都有一个需求,就是可以很方便的将Socket传进来的二进制解析到具体的某个消息,每个消息都有自己的事件处理。之前有写过一个这样的,但是事件处理必须写在各个消息类里面,这样不是很好。现在借着C#的泛型协变的这个特性,做了一个强类型的事件分发器。using System;using System.Collections.Generic;using System.Linq;usi

2016-04-04 21:01:56 1706

原创 【Unity】协程

好久没有来更新博客了,快一年了吧,主要是上班之后就一直在加班啊.... 就没有时间写博客,看书倒一直没有中断。工作后的项目一直在用cocos2dx来做,也没有什么比较值得拿出来分享的,下一个项目 组里面打算用Unity来做,所以就稍微再研究一下Unity。我打算做一个脱离Unity的底层库,但是Unity也可以用,所以不可避免的就需要重复造一些轮子,所以这次打算造的轮子是U

2016-04-03 14:56:38 543

原创 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(3)

上篇文章分析到了定时器的定义,这篇的重点就是定时器是如何运行起来的。1.从main中寻找定时器的回调讲定时器的运行,就不得不触及到cocos2dx的main函数了,因为定时器是主线程上运行的,并不是单独线程的,所以它的调用必然会在main函数中,每帧调用。以下代码就是win32平台下的main函数int APIENTRY _tWinMain(HINSTANCE hInstance,

2015-06-05 20:57:11 2116

原创 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(2)

上篇说到定时器的使用方法,这篇主要分析它的实现原理。1.哈希链表cocos2dx封装了一个结构体,叫做UT_hash_handle,只要在自定义的结构体中声明这个结构体变量,就实现了哈希链表,并且能使用一系列的哈希链表专用的宏。这个结构体的具体实现如下:typedef struct UT_hash_handle { struct UT_hash_table *tbl; vo

2015-06-04 13:17:43 2164

原创 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)

注:本文开始,引擎升级到cocos2dx 3.6在游戏开发过程中,经常会遇到使用计时器的情况,例如:倒计时,定时炸弹等。scheduler是cocos2dx 2.x时代就已经存在的产物,主要用于各种延时函数以及各种每帧运行的函数。本文主要介绍scheduler的API函数以及使用方法。首先,所有继承Node的类都可以使用scheduler,以下是Node类下相关API的介绍 /*

2015-06-02 14:00:35 2264

原创 【深入了解cocos2d-x 3.x】一步一步通过ClippingNode实现一个功能完善的跑马灯公告(2)

本文的主要内容是根据跑马灯解析ClippingNode实现原理。本文涉及到cocos2dx 3.x的渲染机制以及部分opengl的知识。首先看看上一篇文章中说到的跑马灯的简单实现://设置模板 auto stencil = Sprite::create(); //设置显示区域大小 stencil->setTextureRect(Rect(0, 0, 50, 30));

2015-05-19 13:44:12 1341

原创 【深入了解cocos2d-x 3.x】一步一步通过ClippingNode实现一个功能完善的跑马灯公告(1)

这篇文章主要是通过一步一步实现一个功能完善的跑马灯公告来展示ClippingNode的用法并且最终深入ClippingNode的源码,了解其实现原理。首先,先介绍一下ClippingNode,ClippingNode也叫裁剪节点,能将一些内容通过使用模板裁剪出来显示在界面上,可以实现一些很炫酷的效果。来看看今天要实现的效果1、ClippingNode类分析先来看看Cli

2015-04-15 13:19:40 2077

原创 【深入了解cocos2d-x 3.x】内置数据结构(2)——Map

其实最没意思的数据结构就是这两个了,完完全全就是std::map和std::vector上面再加了一层引用计数。当然,这也有好处,就是支持std算法以及支持cocos2d-x的内存管理机制。看源码可以知道(下均只对Map进行分析,Vector同理)template class Map{public: // -----------------------------------

2015-03-30 14:42:57 1131

原创 【深入了解cocos2d-x 3.x】内置数据结构(1)——智能指针

智能指针在C++11的标准中已经存在了,分别是unique_ptr,shared_ptr,weak_ptr,其中最常用的应该是share_ptr,它采用引用计数的方式管理内存,当引用计数为0的时候,自动释放内存,但是由于shared_ptr考虑到了线程安全,所以会存在有较大的性能损失。所以在实时游戏开发中,往往不会用到shared_ptr。在cocos2d-x3.2以及更高的版本中,cocos

2015-03-28 12:00:56 1581 2

原创 【深入了解cocos2d-x 3.x】UI树(3)——UI树的渲染机制

渲染系统是游戏引擎里面最重要的一个模块之一了,如何遍历UI树,如何将UI合理的渲染在屏幕上,如何选择渲染的顺序,这是渲染系统最需要考虑的。其实遍历的顺序就决定了渲染的顺序。cocos2d-x的渲染函数是通过Node::visit来进行的,首先看看这个函数干了什么吧void Node::visit(Renderer* renderer, const Mat4 &parentTransform

2015-03-27 12:10:33 1581 1

原创 【深入了解cocos2d-x 3.x】如何进行合理的内存分配

设想如下场景,这是一个典型的内存合理分配的场景:在一帧内,有若干个函数,每个函数都会创建一系列的精灵,每个精灵都不同,都会占用一定的内存,精灵的总数可能会有1000个,而一个函数只会创建10个精灵这样,创建的精灵只会在这个函数中使用,大致代码如下:for(int i = 0; i < 10; i++){ Sprite* s = Sprite::create(); //-- doSom

2015-03-23 11:18:22 1364

原创 【深入了解cocos2d-x 3.x】UI树(2)——UI树的内存管理机制

上篇文章分析了什么是UI树,以及UI树的使用方法,这节会重点分析UI树的内存管理机制以及如何利用UI树对游戏中的UI内存进行合理的管理。说到UI树的内存管理机制,就不得不提cocos2d-x的内存管理机制——引用计数了,相信只要不是初学者都已经理解了这一块了,这里还是对cocos2d-x的内存管理机制做一个大概的介绍吧。cocos2d-x采用的是引用计数法作为其内存管理的方法,引用

2015-03-22 23:43:40 1337 2

原创 【深入了解cocos2d-x 3.x】UI树(1)——什么是UI树

近期在学习《我所理解的Cocos2d-x》这一本书,被作者深厚的功力所折服,感觉到自己实在是太弱了,cocos2d-x当中要学习的东西实在是太多了。在《我所理解的cocos2d-x》中关于UI树与内存管理其实是关联性很强的,这一篇主要写我对UI树的理解。(本文基于cocos2d-x 3.2版本,其他版本API可能会有所变化)首先得普及一下cocos2d-x的基础概念,cocos2d-x的游

2015-03-22 22:41:20 2541

原创 【算法】用lua解决快速排序问题

如下local list = { 3,1,5,18,34,32,0, }function printList() local str = "" for i = 1,#list do str = str .. list[i] .. " " end print(str)endfunction qsort(low,high) if low >= high then r

2015-03-06 11:42:18 1491

原创 【算法】用Lua解决冒泡排序

脚本语言太好用了!忍不住又写了个冒泡代码如下:local list = { 3,1,5,18,34,32,0, }function printList() local str = "" for i = 1,#list do str = str .. list[i] .. " " end print(str)endfunction sort() for i =

2015-03-06 11:13:31 1638

原创 【算法】用Lua解决八皇后的问题

最近在学习Lua脚本,经过了不到十天的学习,也算是对语法有所了解吧,另外正好也看到了八皇后问题,感觉挺有意思的 就试了试用算法解出来。八皇后问题的原题是:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。以下是lua的算法代码:

2015-03-06 10:55:50 1383

原创 【算法】恋爱中的博弈论(stable matching)(附带源码)

思路源自知乎:知乎,主要是@尼克余 的回答。感谢他。然后原文有些描述不清楚的,我直接就按照我的理解补充上去了。注:本文采用C#实现首先假设一个虚拟世界,这个世界中分别有N个男生,N个女生,男生与女生数量完全一样,男生女生都有一个心仪对象列表,不同的人的心仪对象列表都是随机的,在心仪对象列表排名越前面,说明对于他(她)来说越喜欢。男生能向女生表白,女生不能向男生表白,女生能接

2015-02-10 21:50:08 2558

原创 【Unity】理解协程的原理1——实现一个自己的WaitForSeconds

协程的所能达到的效果就是在指定的时间点上执行需要执行的代码,Unity中开始一个协程的函数是StartCoroutine,而提供的延迟的类有以下几种分别是 new WaitForEndOfFrame; //等待一帧 new WaitForFixedUpdate; //等待一个FixedUpdate(固定时间间隔)

2015-02-08 11:56:09 2788

原创 【Unity】线程安全的消息传输机制,仿照Cocos实现

近期用到了网络通信的方法,虽然unity可以用协程来实现异步操作,不过坑爹的队友不会用,他用的是传统的开线程的方法,这样就会出现线程安全的问题,然后现有的消息通信机制无法满足需求了,就得改了。还好我机智的看过Cocos2dx中消息机制的实现原理,顺手改了一下,下面贴源码:(源码后有解释)using System;using System.Collections;using System.C

2015-01-11 12:28:24 1424 3

自己写的库

很简单的一个库,以后我会完善它,带有Socket、事件分发器和协程,Socket的收发用到了Proto消息

2016-04-05

恋爱博弈论demo

恋爱博弈论的算法实现.... 博客地址:http://blog.csdn.net/nxshow/article/details/43707307

2015-02-10

UnityGUI引擎

同学写了一套UnityGUI引擎,可以扩展成自己写的一套UI库

2014-12-08

Unity3D制作的90坦克大战

Unity3D制作的一个坦克大战的Demo,能正常的玩,能编辑地图,有简陋AI

2014-10-31

Unity3D_切图以及序列帧动画

在Cocos2dx中,对大图的处理已经封装好了一套自己的API,但是在Unity3D中貌似没有类似的API,或者说我没找到。不过这也在情理之中,毕竟Unity3D是做3D的,要切割图片的地方还是很少的。 因为我用Unity3D主要是用于做2D游戏的(PS:很蛋疼吧?我也觉得),所以就不得不考虑切图和播放序列帧这两个在2D上常见的功能了,下面废话不多说。我的任务是把下面这张图切割成16块,并且按照动画的序列播放出来。

2014-10-28

cocos2dx 对话框的实现

关于cocos2dx中对话框的实现,是一个小的demo,自己建立工程 将这两个文件夹覆盖进去 运行,引擎需要cocos3.2版本,运行之后 点击键盘上的1,2,3,4,5分别显示对应的对话框,点击0退出 具体的输出可以看日志

2014-09-30

空空如也

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

TA关注的人

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