摘要:
翻阅了很多资料,也做了不少笔记,决定还是对渲染进行一个总结,以巩固所学的东西。 《Real-Time Rendering, Third Edition》 (PDF的配图链接)将一个渲染流程分为三个阶段: 即 应用阶段(PApplication Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage) 我借用《Unity Shader入门精... 阅读全文
摘要:
最近一直在学习实时渲染,不免要接触线性代数。而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现《Unity3D 实战核心技术详解》关于矩阵就有几处错误 ,特标注出来。 书的第一章《3D数学与Unity》,1.3.2讲矩阵缩放、1.3.3讲矩阵的旋转。缩放是一个矩阵,后面旋转针对绕三个不同的轴的旋转矩阵(x、y、z),总共4个矩阵,其中3个是错误的,只有一个绕y轴旋转是正确的。我不确定... 阅读全文
摘要:
这个问题是我第一次接触3D开发就有的疑问,最近在看《游戏引擎架构》(Game Engine Architecture),在书中找到了答案。 三角网格(Triangle Mesh),游戏开发者会使用三角形网格来建模。三角形是表面的分段线性逼近,如果用多条相连的线段分段逼近一个函数或曲线。 实时渲染之所以选用三角形,是因为三角形有以下的优点: 三角形是最简单的多边形,少于3个顶点就不能成为一个... 阅读全文
摘要:
用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来… 所以试着在网上找找,有没有类似的插件或者编辑器,被我找到了,也基本符合我的要求。 我想实现的效果如下:双击xxx.shader打开Sublime Text,可在Sublime Text中对常用的函数进行提示,并支持函数的跳转。 这就分为... 阅读全文
摘要:
今天早上听说一件事情让我觉得很诡异的事情:公司线上的一款游戏,加载一份配置资源后,内存涨了几十M,然后内存再也下不来了。因为好奇,所以要来了最大的一个配置文件(4.5M,去除空格与换行后的大小),进行测试。最终发现,内存其实是可以被释放的,不过需要注意以下的规则。 同时,为了证明luac 与 luajit 表现一致,我同时也使用了 luajit 进行了测试。 前往下载页面 http://lua... 阅读全文
摘要:
之前的文章《wireshark解析自定义的protobuf协议》 ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢? for i,port in ipairs(tcp_port) do tcp_port_table:add(port, m_MeteoricProto) end 参考链接:https://wiki.wires... 阅读全文
摘要:
Unity中的输入管理器由Input类进行操控。官方文档地址:https://docs.unity3d.com/ScriptReference/Input.html 中文翻译的话可以在这里:http://www.ceeger.com/Script/Input/Input.html 这里只说几个易混淆的点。 既然已经有GetKey、GetKeyDown、GetKeyUp 以及 GetMouseB... 阅读全文
摘要:
一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本。鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字。但是我在使用中发现很致使的一个问题,当多人编辑一个Excel时,冲突了就很麻烦,解决起来的成本还蛮高的。 之后我想了一些办法,例如搭建一个web站点,将所有的字符串 Key、Value保存到数据库中,避免冲突,方便去查询。但感觉还是太... 阅读全文
摘要:
JavaScript中的定时器与延时器,分别是 setInterval、setTimeout,对应的清理函数是:clearInterval、clearTimeout。 而在Unity中,则分别是:Invoke、InvokeRepeating和取消延迟调用 CancelInvoke 延迟调用 void Invoke(string methodName, float time); 重复延迟调... 阅读全文
摘要:
最近为美术编写一个Unity编辑器的扩展,主要为了减轻美术在修改预制对象时的机械化操作的繁琐和出错。具体实现的几个功能: 1、删除指定组件; 2、复制、粘贴指定的组件; 3、重新关联新的属性; 4、重新保存预制对象; 一、删除指定类型的组件 public static void RemoveComponentHandler(GameObject gameObject, Type compone... 阅读全文
摘要:
正常情况下都会显示的,如果没有显示,尝试以下几种方案: 1)缩小模型看一看 2)旋转灯光试试,看是否有阴影 3)检查阴影设置 菜单栏Edit –> Project Settings –> Quality 4)检查灯光自身的属性设置,包括强度和阴影类型 阅读全文
摘要:
.asset一般用来存储一些配置,比如SDK初始化的相关参数。 using System.Collections.Generic; using UnityEngine; namespace XXX { [CreateAssetMenu(fileName="xxx", menuName="xxx")] public class CommonConfig : ScriptableOb... 阅读全文
摘要:
Unity 5.0开始增加了RuntimeInitializeOnLoadMethodAttribute,这样就很方便在游戏初始化之前做一些额外的初始化工作,比如:Bulgy参数设置、SDK初始等工作。 先来看一下它的生命周期 sing UnityEngine; public class ExampleClass : MonoBehaviour { private void Awak... 阅读全文
摘要:
InitializeOnLoad 属性应用的对象是 静态构造函数,它可以保证在编辑器启动的时候调用此函数。根据这个特性,可以在编辑器中设置定期的回调(帧更新),来实现类似watchFile的功能。这里借助了EditorApplication类中的 update 委托,在编辑器运行时,它将每秒调用多次。 using UnityEditor; using UnityEngine; [Initiali... 阅读全文
摘要:
DLL —— Dynamic Link Library(动态链接库文件),这里以Window平台为例。 Unity支持的两种语言生成的DLL库(C++、C#),这里以C#为例,C++网上可以搜索很详细的资料。 1) 添加引用关系 如果有对UnityEngine、UnityEditor的引用,需要先添加引用关系。 路径通常位于Unity安装目录下的Editor/Data/Managed路径... 阅读全文
摘要:
通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C –> D。在具体一点,比如 A —— 启动场景、B —— 资源加载场景、C —— 登录场景、D —— 战斗场景。 游戏先启动 –> 加载资源 阅读全文
摘要:
先看最终效果 wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位。 一个Lua插件的Dissector结构大致如下: do -- 协议名称为 m_MeteoricProto,在Packet Details窗格显示为 XXX Protocol local struct = Struct local data_d... 阅读全文
摘要:
在使用VC++进行开发时,如果按F5进行Debug时,当前相对资源是相对工程的vcxproj的文件夹目录,而直接双击运行exe时,资源是相对exe的文件夹目录。为了兼容这二者,最好使用绝对路径,这样无法是Debug还是直接双击运行exe时都不会遇到无法加载资源的问题。 char* WcharToChar(const wchar_t* wp) { char *m_char; in... 阅读全文
摘要:
项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? …. 后来看到网上有写Unity的插件,想着应该也能判断后缀名然后调用指定的编辑器,果然可以。直接贴代码了(C#文件,只要建一个名为Editor的目录 —— 与路径无关,扔进去就行,Unity会自动编译的) ... 阅读全文
摘要:
主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题。 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易。推荐先看这篇文章:对Unity中Coroutines的理解>> 协程简单来看分三部分: 1)启动,常用方 阅读全文