Rocky Lai 的技术博客

学习、思考、分享


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

UNet 0x02:发送消息

发表于 2015-08-07   |   分类于 UnityKB

在 [上一篇文章] 中介绍了如何在 UNet 中建立网络连接,接下来我们在这篇文章中说说建立连接之后怎么在 Client / Server 间发送消息。

这篇文章涉及的是 UNet HLAPI 部分消息发送所涉及到一些概念,最后会给出一个示例代码。按之前的风格,我们继续来抱着问题讲述今天的主题。

有两个问题:

  • UNet HLAPI 中消息怎么表示?
  • UNet HLAPI 中消息怎么发送和接收?

UNet HLAPI 中的消息

新的网路系统 UNet 提供了一个抽象类,叫做 MessageBase, 它的原型大概是下面这样:

阅读全文 »

UNet 0x01:网络连接的建立

发表于 2015-08-06   |   分类于 UnityKB

看到标题后,没接触过的朋友脑中可能会闪现出这样一个问题: UNet 是什么 ? 其实它是 Unity 5.1 版本新引入的网络系统。官方论坛里面称这个系统为 UNet, 那我们按照官方的习惯来。

官方手册文档 介绍其主要有两类功能(按 API 抽象层次来分):

  • 低层次 NetworkTransport API, 适合于用来构建更复杂高级的多人游戏或者网络基础平台
  • 高层次的 High Level API,也叫做 HLAPI,建立在 NetworkTransport 之上。适合开发多人游戏

这篇文章将只涉及 High Level API。我们的目的是建立(Client 于 Server 间的)网络连接。

UNet 的 Server / Client / Host

在 UNet 先系统中会出现 1 个 Server 和 n 个 Client (n >= 0)。当没有专门的 Server 的时候,其中一个 Client 会充当 Server 的作用,这个即是 Client 又是 Server 的端在 UNet 中被称为 Host。 Host 在同一个进程里面执行 Server 和 Client, 这个 Client 有个专门的名字叫做 Local Client。它跟 Local Server 之间是通过 消息队列 和 直接的函数调 用来通信的。

阅读全文 »

好玩:如何把 Github Contributions 填充满

发表于 2015-07-21   |   分类于 一点一滴

先看效果:

rockstar

我们要使用 RockStar 这个 python 工具来实现这个效果。RockStar 的 Github 地址 撮这里。

RockStar 只支持 Python 3,不能在 Python 2 上面。如果本机没有 Pyhon3 可以从 http://python.org 里面下载安装,当前版本的下载地址为 https://www.python.org/downloads/release/python-343/。

使用 python 前我们需要在环境变量中加入 python3 的安装路径和脚本文件的路径。假如我们安装在 C:\Python34 文件夹下,则加入下面地址到环境变量 PATH 中

C:\Python34;C:\Python34\Scripts

上面设置完成之后我们就可以用 python 来玩耍啦。首先我们打开命令行来安装 RockStar ,输入

pip install rockstar

输入完成之后, 我们创建一个新文件夹,比如叫做 RSFunny, 并在这个文件夹下面创建一个 python 脚本,比如叫做 rockstar.py。 脚步的内容如下:

阅读全文 »

瞎聊 Unity Shader 系列之十一:深度缓存

发表于 2015-06-09   |   分类于 Shader

第二节 [渲染管线] 中提到了 Frame Buffer, 这个是用来存储帧位图的数据存储区域。 这里在介绍另外一个缓存, 叫深度缓存 (Depth Buffer), 也叫作 Z-Buffer。从名字上来看这是一个存储深度(数据)的存储区。下面我们带着两个问题来解释这个深度缓存。

  1. 存储的深度数据是什么
  2. 有什么用处

深度是什么

第四节 中提到,要描述一个物体的位置,需要借助参照物。我们这里扩展一下, 要 用数值来表述一个物体的某种属性,要有这个数值参照的原点。 既然深度值是数值,那它的参照原点是什么呢? 答案是观察者的视角,换句话说就是 Camera。

在 [渲染管线] 这节中提到, Vertex Shader 之后有一个插值过程,生成像素。这个像素的 X 和 Y 坐标为屏幕坐标, Z 坐标轴数值就是深度,存储在深度缓存里面。

有什么用处

首先让我们来思考一个问题

假设有两个物体都经过渲染后的像素在屏幕坐标系中是同一个点,那哪个像素应该渲染?

我想现在你应该会想到,当然是渲染里观察者更近的一个像素啦。这个一般来说是对的,但是也不全对。 因为远近是用深度数值来表示,但是渲染的逻辑在 Shaderlab 里面可以用 ZTest 设置,它的语法是

1
ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always

ZTest 默认的值是 LEqual, 也就是渲染在物体在这个深度值同位置或者之前的物体,不渲染之后的物体。

阅读全文 »

瞎聊 Unity Shader 系列之十:数据的标签:语义绑定

发表于 2015-05-14   |   分类于 Shader

这节内容跟 [渲染管线] 内容关系比较紧密,建议先了解渲染管线的整个流程。

我们知道渲染管线整个流水线都有数据的输入输出,这样就存在几个问题:

  1. 这些数据都是什么?
  2. 这些数据输入或输出到哪里?
  3. Shader 里面怎么体现?

这节内容主要是讲上面三个问题

数据的种类

一般情况能利用的有如下几种:

  • 坐标系中的位置 (position)
  • 法线 (normal)
  • 切线 (tanent)
  • 颜色 (color)
  • 纹理坐标 (texture coordinate)

数据的输入输出

数据存放在寄存器里面。输入的时候从寄存器读取数据,输出的时候将数据写到寄存器里面。

Shader 中的体现

首先是数据的种类的表示。现实生活中,我们也喜欢物品分类,然后对分类取个名字或贴个标签,以后我们便可以从这一类中存取属于这类的物品。Shader 里面也有类似的做法,给 Shader 函数输入输出的数据结构打上标签。这种标签叫做 语义(Semantic), 打标签的行为叫做 语义绑定 。一般用一个冒号后面带上标签的名字来表示。长相大概是这个要样子 :XXXXX (XXXXX 表示语义)。

我们有了标签,那我们把它放在 shader 代码什么地方呢? 之前提到我们是给函数输入输出的数据结构打上标签,而函数的输入就是参数。对于参数,我们可以使用结构体也可以直接使用基础数据类型,所以能出现如下两种位置:

阅读全文 »

瞎聊 Unity Shader 系列之九:用来包装变量的 Properties

发表于 2015-05-08   |   分类于 Shader

为了像其他程序语言一样重用代码,Shaderlab 把可变部分提取出来,集中放到一个区域去。这个区域就是 [初始 shaderlab] 这节中提到的的 Properties 可选项。 在这个区域内每一个元素被叫做 Property。我们把他叫做属性吧。这些属性都包括在 Properties { } 语句块内。

Shaderlab 的属性

属性的语法是:

属性名 (“Inspector 显示的名字”, 类型) = 默认值

Shaderlab 提供不同的数据类型(详情见下面)。如果把这些类型和默认值格式填充进上面的语法后,会变成下面的样子:

阅读全文 »
1…456…8
Rocky Lai

Rocky Lai

48 日志
4 分类
14 标签
GitHub 邮件
© 2014 - 2017 Rocky Lai
由 Hexo 强力驱动
主题 - NexT.Mist