自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客

城东的老槐时常,听见凄凉

  • 博客(34)
  • 收藏
  • 关注

原创 尽早崩溃原则在游戏引擎中的实践

尽早崩溃原则在游戏引擎中的实践很多程序员喜欢辩解说“尽早崩溃”是最佳实践——在遇到问题的第一时刻报错,报得越早越好,毕竟越接近问题发生的第一现场越方便他们调试。这个说法本身当然是没问题的——如果你用个默认值糊弄一下,或者是写某种容错逻辑来忍耐了破坏假定的行为,那么错误很有可能会蔓延到之后更加远离出问题的地方才爆发,那时丢失了源头和上下文,查错的成本会变得非常高。如果只考虑程序员,不考虑团队中同样依赖每日版本来工作的策划,美术和测试的话,这个思路是没有问题的。然而跟程序员不同,当发生崩溃时,团队内的其他成

2021-02-26 17:45:15 568 3

转载 游戏引擎的评估

转载自https://mp.weixin.qq.com/s/a5hy2Ie_v0KNNjdMESFAUg三个必问问题是否有经过验证的(同品类)产品好招人吗是否有源码(开源)定义引擎和游戏的关系类库式(classlibrary-style)低耦合,接触面小,对游戏约束小,升级负担轻间接层带来的开发和运行效率的损失框架式(framework-style)高度相互依赖,当引擎有较大更新时适配工作量大从原型到产品迭代速度快考虑因素(一级)特性集与需求的匹配度特性集

2021-02-26 16:01:33 340

转载 如何判断一个技术(中间件/库/工具)的靠谱程度?

转自http://gulu-dev.com/post/2014-07-28-tech-evaluation主观因素首先说明的是,不管承不承认,个人品味对选择的影响非常大。即使是同一个程序员,随着视野的开阔和水平的提高,也会不断地推翻自己以前的品味。例子就不举了,这种非常主观的因素不宜多说,知道有这个重要因素在影响着判断,并随时去提醒自己,在技术和工具的选择上不要有过分的成见,傲慢与偏见,俺认为就可以了。其次,比普通程序员更爱折腾的文艺程序员,往往还有一个困扰——究竟是该用现成的库,还是自己造轮子呢。

2021-02-26 14:49:12 387

转载 Lua下的ECS框架

转自云风的BLOG: https://blog.codingnow.com/2017/12/lua_ieaae_ecs_oue.html前段时间,我写了一篇 浅谈《守望先锋》中的 ECS 构架 。最近想试试在 Lua 中实现一个简单的 ECS 框架,又仔细琢磨了一下。我思考后的结论是:ECS 并不是一个新概念,它的提出其实是和语言相关的。ECS 概念的诞生起于游戏行业,相关框架基本都是基于 C++ 来开发的。它其实是对 C++ 对象模型的一个反思。ECS 针对组件组合对象,而反对 C++ 固有的基于继承

2020-12-21 10:11:11 1220

翻译 Mono现状与未来: 从Xamarin到WebAssembly、Blazor及.NET 5

原文链接:https://www.infoq.com/articles/mono-xamarin-webassembly-net5/Mono现状与未来: 从Xamarin到WebAssembly、Blazor及.NET 5本文要点Mono项目始于2001年,是首个面向.NET应用程序的多平台、开源框架的项目。Xamarin和Blazor分别代表了微软在移动和Web应用程序方面的努力,它们都是基于Mono并由Mono提供支持的。.NET 5为用户提供了两种运行时选项:高性能的CoreCLR(用于

2020-12-17 10:42:29 952

转载 浅谈《守望先锋》中的 ECS 构架

转自云风的BLOG: https://blog.codingnow.com/2017/06/overwatch_ecs.html今天读了一篇 《守望先锋》架构设计与网络同步 。这是根据 GDC 2017 上的演讲 Overwatch Gameplay Architecture and Netcode 视频翻译而来的,所以并没有原文。由于是个一小时的演讲,不可能讲得面面俱到,所以理解起来有些困难,我反复读了三遍,然后把英文视频找来(订阅 GDC Vault 可以看,有版权)看了一遍,大致理解了 ECS 这个

2020-12-11 09:41:16 923

原创 Unity Shader实现标准Phong光照模型

Unity Shader实现标准Phong模型Shader "Custom/Phong"{ Properties { _Specular("Specular", Color) = (1,1,1,1) _Diffuse("Diffuse", Color) = (1,1,1,1) _Gloss("Gloss", float) = 1 _Emission("Emission", Color) = (0,0,0,0) _MainTex ("Texture", 2D) = "white"

2020-12-07 20:45:09 354

原创 CSAPP实验-ShellLab

shell-lab是csapp的配套实验之一,它要求我们实现一个功能和unix shell类似的tiny shell,在源文件tsh.c中已给出了基本框架,剩下的只需要完成实现指定的函数即可,该实验对应csapp的第8章内容。Unix ShellShell可以认为是一个可交互的命令解释器,它替代用户运行程序,shell会从标准输入流stdin等待输入命令行,根据命令行内容的指示执行对应操作。命令行是由空格分隔的ascii单词序列组成,其中第一个单词为内置命令或可执行文件的路径(或环境变量path目录下的

2020-08-18 14:45:10 4803 1

原创 XCode工程设置

Project设置针对整个Project的设置,分为Info和BuildSetting两个页签,其中有部分设置会被Target所继承或修改。注意:Project的Building Settings中已有的设置如果在Target中重新设置,那么Project的设置会被覆盖,只有当Targets的设置加入了$(inherited)时才会被继承到Target层的设置。InfoDeployment TargetiOS Deployment Target即项目的minsdkversion(最低可运行的i

2020-08-03 10:40:54 4046

原创 CSAPP实验-CacheLab

cachelab是csapp的配套实验之一,该实验分为A、B两个部分,A部分要求实现一个cache模拟器,B部分是实现一个针对cache优化的矩阵转置函数Part APart A部分我们需要完成csim.c源文件,参考csim-ref程序接收相同的命令行参数并产生相同的输出。csim-ref是一个参考可执行程序,它能够模拟cache并处理valgrind生成的trace文件,它遵循LRU(最近使用)替换策略。我们的main函数要依次做如下几件事情:使用getopt库处理参数,保存cache的几个基本

2020-07-23 20:08:26 7483

原创 CSAPP实验-AttackLab

csapp的attacklab配套实验,要求利用缓冲区溢出对指定可执行文件进行攻击,包括CI(Code Injection)攻击和ROP(Return-Oriented Programming)攻击两种方式概览在writeup已经中给出了详细的目标和实验流程,首先给出了一个有漏洞的函数getbuf:unsigned getbuf(){ char buf[BUFFER_SIZE]; Gets(buf); return 1;}该函数调用Gets函数从标准输入流读取字符串并存在缓冲区bu

2020-07-22 14:08:02 2718

原创 CSAPP实验-BombLab

omblab是csapp的第二个配套实验,该实验提供了一个bomb二进制文件和一个bomb.c源文件,我们的目标是运行bomb并按照提示一步步输入字符串,直到完成整个拆炸弹的流程。但是源文件中只提供了部分代码,所以我们需要通过反汇编工具 objDump 来分析bomb的汇编代码,推导出所有能够拆解炸弹的字符串。准备工作概览首先分析实验提供的不完整的源文件bomb.c,在其main函数中依次调用phase_1到phase_6六个函数,每个函数都接受read_line()的返回作为phase的input

2020-07-17 17:51:30 2327 1

原创 CSAPP实验环境搭建

CSAPP配套了一系列很棒的lab,由于实验环境是unix,如果在Windows或MACOS环境下建议使用Docker的Linux容器来搭建csapp的实验环境。下载lablab下载地址:http://csapp.cs.cmu.edu/3e/labs.html,点击对应实验的Self-Study Handout即可下载该实验。安装DockerDocker下载地址:https://www.docker.com/,选择对应操作系统并下载安装即可。配置ubuntu选择ubuntu作为实验的运行环境,

2020-07-03 14:23:26 11828 8

原创 Unity使用UIWebView导致iOS审核被拒的解决方案

根据苹果应用商店的最新政策, UIWebView相关API已经Deprecated,如果项目中有引用UIWebView则无法通过苹果审核,被拒信息如下ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more i

2020-05-19 17:37:52 8508

原创 C#基元类型强转

C#将一个基元类型变量通过类型强转的方式转为另一个基元类型时:如果源类型位数大于目标类型,则通过放弃其“额外”最高 有效位来截断源值,即保留低位。这里的低位是逻辑上的低位,和字节序无关如果源类型小于目标类型,则源值是符号扩展或零扩展,以使其与目标类型的大小相同。 如果源类型带符号,则是符号扩展;如果源类型是无符号的,则是零扩展...

2020-05-18 11:16:38 373 1

原创 Unity屏幕适配解决方案

文章目录UI尺寸选择市面设备比例内存占用分辨率适配高分辨率分屏模式宽高比适配常规尺寸适配刘海屏适配全面屏适配UI尺寸选择市面设备比例截至2017年9月,iOS与Android移动游戏设备比例约为iOS占28%,Android占72%,分辨率比例如下(推荐参考来源:WeTest平台、腾讯移动分析) 通过以上数据可以计算,Android平台1080P以上为50%左右,iOS平台为35%,...

2020-04-26 14:30:59 10374 2

原创 关于兼容性的讨论

兼容性我们常常会见到关于向后/向前兼容性的描述,但是讨论兼容性的时候一定要明确谁是兼容性的主体,是说系统兼容性还是应用软件的兼容性,大部分时候讨论兼容性都是以系统为主体的,但是为了避免理解歧义也要对应用软件的兼容性有定义。这里的前 和 后 要理解成前进和后退,而不是从前和以后。向后兼容性(Backwards compatibility)向后兼容,又名向下兼容、回溯兼容。顾名思义是向过去兼容...

2020-04-17 15:17:11 604

原创 Bash语法

Shell简介shell是一种脚本语言,通过对应的脚本解释器解释执行,一般作为内置于操作系统的应用程序向用户提供访问操作系统内核的服务。不过shell也分化出了很多种类,常见的有shell(/bin/sh)、bash(/bin/bash)、csh(/usr/bin/csh)、ksh(/usr/bin/ksh)、powershell(windows的shell)等,大部分shell语法互相兼容,其...

2020-04-13 18:45:53 3796 1

原创 CSAPP实验-DadaLab

简介csapp的datalab配套实验, 要求修改bits.c源文件使所有给定函数满足功能并通过btest的所有测试用例,每个实现函数内均对使用的运算符种类和数量有所限制,可以用dlc程序进行检查。该实验主要为了强化理解整形和浮点型数据的编码形式和位运算相关知识。实验内容bitXor实现异或操作/* * bitXor - x^y using only ~ and & * ...

2020-03-25 13:54:54 1025

原创 Docker学习

Docker相关概念DockerDocker原本是一个开源工具项目,Docker介于容器(原生进程)和OS之间提供简单易用的容器接口,使容器访问到的都是虚拟资源,让应用程序和该程序的依赖都打包在一个文件中便于分享、复制、修改和版本管理,而运行在容器中的程序将会和运行在真正的物理机上一样,可以理解为Docker是一种更轻量的虚拟机。Container(容器)容器是模拟某类程序运行需要的环境...

2020-03-17 20:18:41 142

原创 正则表达式介绍

正则表达式(Regular Expression)定义正则表达式是一种文本模式,包括普通字符和特殊字符(元字符)。正则表达式 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串 。元字符\转义下一个字符^匹配输入字符串的开始位置(如果设置了RegExp的Multiline属性,也匹配’\n’或’\r’之后的位置)$匹配输入字符串的结束位置(如果设置了RegExp的Mult...

2020-03-17 10:17:36 165

原创 C#运算符

C#运算符重载C#运算符重载不能多态,也就是编译期直接确定调用的方法

2019-09-02 17:53:13 123

原创 UGUI EventSystem中拖动判定和点击判定的阈值

在使用UGUI实现拖动功能时,常常会遇到ScrollRect内的放置接收点击事件的Item,最常用的方式就是给Item添加Button组件或继承IPointerClickHandler的脚本,同时保证ScrollRect的Content内所有RaycastTarget不能拦截拖动相关事件,这样基本就完成了这个功能,运行时“看起来”也没什么问题。但有时我们会发现在高分辨率触摸设备上ScrollRe...

2019-05-05 15:44:39 2536 1

原创 Unity3D如何在同一个方法块中同时异步等待线程和协程

问题在做Unity3D开发时,在整合UnityEngine的异步方法(协程)同其它Framework(如.Net API、WinRT API)的异步方法(async)给我造成了困扰,因为异步的实现的方式不同。在一个方法中等待一个协程返回使用yield return关键字,并且需要该方法的返回值为IEnumerator;而在一个方法中等待一个async方法返回使用await关键字,并且需要该方法声...

2019-03-22 17:36:07 3485

原创 关于Unity中async/await异步等待的另类打开方式

思考在做游戏开发时常常会遇到这样一个业务模型,需要弹出一个简单的 模态窗体,提供若干选项(一般就是两个:是与否/确认与取消),并且只有玩家做出选择后才会继续其它流程,如结束游戏的二次确认(离开or留下),敏感操作的二次确认(确定or再考虑)。这种业务对应的一般是一个窗体模板,我之前的做法是某个业务在创建窗体的同时向该窗体的按钮控件传递响应的回调函数以达到响应玩家选择的效果,这是大概一种比较传统的...

2018-12-05 01:50:54 6039 1

原创 Protobuf语法学习

ProtoBuf用protocolbuffer编译器来编译.proto文件(相当于protobuf语言的源文件)时,编译器将生成所选择语言的代码(作为protobuf语言的编译输出),这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。基本语法定义消息message 使用message定义一个消息类型...

2018-08-29 17:36:11 2084

原创 隐私政策

本程序尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本程序会按照本隐私权政策的规定使用和披露您的个人信息。但本程序将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本程序不会将这些信息对外披露或向第三方提供。本程序会不时更新本隐私权政策。 您在同意本程序服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于...

2018-08-23 22:30:21 4695

原创 Unity3D游戏框架设计

Unity框架设计将Unity Api、.NetFramework Api(4.6)以及部分原生库和托管库封装到一个抽象层,游戏本身的业务仅依赖于该抽象层从而提高业务逻辑的独立性和可维护性。 框架部分提供项目中使用的基础设施,包括资源管理、网络通信、UI框架、消息管理、场景管理、数据解析及存取等。1.   资源管理资源管理模块负责按照划分场景的颗粒度将所有游戏资源均打包至AssetBundle并在...

2018-07-03 20:00:09 22512 6

原创 Unity3D之调用WinRT组件

结论目前如果想调用WinRT组件引入原生UWP APIs,还是要切换至Universal Windows Platform平台进行调用,在目前版本的Unity(2018.1)的Standalone平台下很难实现(若各位有方法请务必通知我,万分感谢)。起因最近在做的一个Unity游戏项目,目标平台是Windows 10 PC,为了创造更贴近win10原生系统的应用体验(微软小娜,To...

2018-04-13 19:11:25 1908 3

原创 System.Net.Http.dll在Unity3D(UWP)的IL2CPP模式使用的解决方案

前言Unity3D升级到2017的版本后可以支持.Net 4.6的特性,所以引入.Net的基于任务的异步编程模型是十分具有吸引力的(更好的性能加上更优美的代码),为此我在新项目中使用了很多Async异步方法去实现网络与I/O,去替换Unity自带的协程机制的网络和I/O。其中System.Net.Http.dll这个托管库是微软封装的一层http请求接口,所以我准备在项目中使用该库进行网络请求...

2018-03-27 01:09:50 3728 4

原创 Unity之GC优化

GC优化前段时间被面试官问到一个问题,“Unity3D游戏开发中如何减少gc”,憋了半天只说出几个C#中的技巧和对象池,感觉没说到点子上,开篇博客整理下,有新的就不定期更新。unity基于mono运行时,mono运行时的垃圾回收应该和CLR差不多(基于代的引用追踪算法),都是符合.Net规范的,即使是il2cpp也有一套垃圾回收机制在里面(gc.cpp)。gc操作也是一个比较耗时的操作...

2018-03-21 22:22:58 1068 1

原创 图解Unity3D跨平台机制(Windows, Linux, Mac OS, Android, iOS, UWP)

自己用总结做了几张图。PC Android iOS UWP 如有错误欢迎指正~

2017-12-14 17:07:46 5672 3

原创 Unity3D使用USB进行安卓真机调试

按如下步骤操作或检查:正确安装安卓手机的驱动Build Settings — Switch Platform, 选择Android平台,同时勾选后面的Development, AutoConnect Profiler, Script Debugging. 控制台到Android SDK 的platform-tools路径下, 执行 adb forward tcp:34999 localabst

2017-11-20 08:39:28 27886 2

原创 Unity框架设计(一) 消息处理框架

Unity框架设计(一) 消息处理框架关于Unity的原生消息机制为了降低耦和,Unity自带了消息机制。主要体现在如下三个方法: SendMessage, SendMessageUpwards, BroadcastMessage 但是我们平时几乎不会使用它们,主要有如下几点缺陷: 1. 内部使用反射,性能较差 2. 严重依赖字符串,无法在编译阶段实现类型安全 ...

2017-09-13 18:34:50 2067 1

空空如也

空空如也

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

TA关注的人

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