[Unity Shader编程之]Alpha Blending

 

Alpha  Blending主要用于实现半透明效果,类似于玻璃,学习Blending之前,首先要了解源和目标。

源:已经计算过的颜色,形象地说,就是Blending操作之前,经过各种操作计算后的颜色。

目标:已经在屏幕的颜色,因为要实现半透明效果,要把渲染队列设为Transparent,这里的”已经在屏幕的颜色”指的是在Transparent之前渲染的像素颜色,其中包含相机的背景颜色,这里可以通过测试来证明一下,看不懂的可以先跳过这个shader。其中赋值给_MainTex的是一个rgb为(1,1,1),a为0.5的tex。 More

Unity教程之-不创建GameObject也能使用协程Coroutine

 

在unity3d中我们知道如果要想启动一个携程Coroutine,必须创建一个Gameobject或者脚本需继承自MonoBehaviour,那没本篇unity3d教程我们来做个CoroutineManager,不创建GameObject也能使用协程Coroutine,下面开始!

1、起因
————————————————————-
今天下午群友问怎么不创建GameObject使用协程。
就是,比如你有如下代码 More

Unity教程之设计技巧 UGUI避免GameObject.Find

 

在unity中我们都知道了,当查找一个游戏对象时用 GameObject.Find ** ,transform.find**等函数是很消耗性能的,所以不被推荐使用;

对于大型的游戏,UI复杂,加上设计上的不合理等问题(parent-child层级问题),很多时候就会被紧张的工期打乱自己的想法。

像下面的例子: More

[Unity Shader编程]渲染队列、ZWrite和ZTest

本篇unity3d教程我们来看下Unity Shader中的渲染队列、ZWrite和ZTest相关介绍,首先我们来了解几个概念

(1)什么是深度?

深度其实就是该像素点在3d世界中距离摄象机的距离,深度值Zbuffer(Z值)越大,则离摄像机越远。

(2)什么是深度缓存?

深度缓存中存储着每个像素点(绘制在屏幕上的)的深度值!如果启用了深度缓冲区,在绘制每个像素之前,OpenGL会把它的深度值和已经存储在这个像素的深度值进行比较。新像素深度值<原先像素深度值,则新像素值会取代原先的;反之,新像素值被遮挡,其颜色值和深度将被丢弃,最终屏幕显示的就是深度缓存中深度对应的像素点的颜色!(深度主要起的是比较的作用)

(3)什么是深度测试?

在深度测试中,默认情况是将要绘制的新像素的z值与深度缓冲区中对应位置的z值进行比较,如果比深度缓存中的值小,那么用新像素的颜色值更新深度缓存中对应像素的颜色值。

(4)为什么需要深度?

在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这样的效果并不是我们所希望的。而有了深度缓冲以后,绘制物体的顺序就不那么重要了,都能按照远近(Z值)正常显示,这很关键。(越后绘制的东西,距离相机就越近) More

Unity教程之-创建你自己的游戏服务器(五):游戏服务器

 

上篇文章《Unity教程之-创建你自己的游戏服务器(四):服务器间通信》,那么在此基础上,本篇unity3d教程我们来搭建我们的游戏服务器!下面开始!

终于要对游戏服务器开刀了。

此前先提一下,其实只是用SS就可以完成一个简单的游戏服务器了。SS本身就是一个很强大的服务器框架,你可以在SS上就完成登录相关的操作,其他与游戏内容有关的操作也全部通过他的Command,用CommandFilter来筛选掉未登录过的Command,保证与游戏内容有关的操作Command都是登录过的玩家,也就是玩家数据是有效的。

分离开来之后也有好处,第一个是账号可以通用了,再一个连接也挺费机器资源的能够集中到一起了,分开部署有利于机器资源的利用嘛。

这次的游戏服务器搭建,没有新的框架引入了,主要还是上回讲到的用于服务器间通讯的NetMQ。与上回不同的是,上回使用的因为有严格的同步需求,所以是RequestResponse模型,这回只要用PushPull模型即可了。因为是双向通讯,所以还得有两个队列。

涉及到游戏信息的传递,就需要解码和编码报文。这里我选用的是ProtoBuf。第一回也有提到。有稍些听说过U3D用ProtoBuf在iOS上遇到的麻烦,其实勤奋的同学也可以自己写一个序列化的工具,想怎么序列化反序列化就怎么搞,可能会比PB还好用(我以前的公司一个项目就是这样搞的),不过对应多语言什么的可能有不小的工作量。 地址:https://github.com/mgravell/protobuf-net

游戏服务器这里开始代码量就会比较大了,所以不再像之前那样把所有的代码贴出来。因此,我在GitHub上建了个项目,你可以访问这个地址https://github.com/Roytin/RoyNet来获取最新的代码。

下面讲下主要的代码段和思路 More

Unity教程之-创建你自己的游戏服务器(四):服务器间通信

上篇文章《Unity教程之-创建你自己的游戏服务器(三):网关服务器》,本篇unity3d教程我们来实现服务器的通信,下面开始!

本回要引入的是:NetMQ NetMQ是开源消息队列ZeroMQ的.NET版本,也是基于socket,所以可以在不同主机进行通讯。基于安全性的考虑,服务器内部的通讯必须是可信的,所以可以使用NetMQ。NetMQ的使用非常简单,如下几步走:

  • CreateContext
  • CreateSocket
  • Connect/Bind
  • Send/Receive
  • Dispose

这里我使用Push->Pull模型 代码差不多是这个样子 More

Unity3d基于网络使用SendMessage、Delegate的客户端MVC框架模式(一)

本篇unity3d教程我们来学习下Unity3d基于网络使用SendMessage及基于网络使用Delegate的客户端MVC框架模式!

作为一个大型游戏,不可避免需要使用复杂的界面、网络消息处理、数据缓存等一些略微复杂的东西。其实我们都知道,对于一个手游来说,庞大的系统工程下面,其实是大量基础的技术的堆叠。于是在游戏开发中,出现各类的Bug其实并不是因为技术上的实现出现问题,而是从框架、代码的管理上出现设计失误。

针对以上问题,众多软件设计者做出努力,设计出了很多中逻辑清晰的框架模式结构,这里我介绍在我们项目中使用的MVC设计模式。

MVC的概念

 

引用MVC的概念:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。 More

Unity教程之-Unity3d向客户端推送通知

 

Android应用中大多数应用使用了推送,游戏中当然也可以使用推送!下面在Unity3D做个测试!(下面是客套话,大家可以忽略)

1.1 什么是推送技术?

推送技术,又名反向AJAX,指的是一种基于 Internet ,将由中心或发布者发出消息传输给用户的技术。与之相对的是拉取,这种情况下请求是由用户或客户端主动发起的。

1.2 常见的推送方式有哪些?

1.2.1. HTTP服务器推送。

1.2. 2. Pushlet

1.2.3.长连接

1.2.4.长轮询

1.2.5.Flash XMLSocket

1.3 哪些第三方提供推送接口?

1.3.1 主要有云巴,百度,蝴蝶,极光,个推,腾讯的讯鸽。 More

Unity教程之-Unity3d资源管理

 

一直没有总结过Unity的资源管理,都是随用随看文档。今天有人问,竟然没说上来,说起来也做了两款Unity游戏,惭愧。这里总结一下,加深自己对Unity资源管理的理解。主要参考了Unity官方文档之Resources和AssetBundle。

Unity有两种动态加载资源的方式,Resources.Load和AssetBundle。Resources.Load用于加载打进游戏包内Resources目录下的资源,AssetBundle用于加载包外自己打的资源包(使用BuildPipeline.BuildAssetBundle),常用于做动态更新。下面结合API具体说明:

加载:

Resources.Load:加载app包内Resources/目录的一个asset;

Resources.LoadAsync:Resources.Load的异步方法;

Resources.LoadAll:类似Resources.Load,但是用于加载某目录下所有asset;

Resources.LoadAssetAtPath:加载Asset/目录下的资源,只能用于编辑器模式,写打包工具时可能用到;

AssetBundle.CreateFromFile:从磁盘加载一个AssetBundle,这是加载AssetBundle最快的方式(我查到有人说这种方式只能用于pc,官方文档没提有这个限制,待检验); More

Unity3d中UI开发的MVC模式

上篇文章《Unity3d架构之-Unity MVC框架 StrangeIoC》我们学习了StrangeIOC mvc模式的经典案例,本篇unity3d教程我们继续来学习下Unity3d中UI开发的MVC模式 ,和游戏开发的其他模块类似,UI一般需要通过多次迭代开发,直到用户体验近似OK。另外至关重要的是, 我们想尽快加速迭代的过程。使用MVC模式来进行设计,已经被业界证明了是可以解耦屏幕上的显示,如何控制用户的输入对显示的改变,以及如何根据应用的状态进行改变。MVC模式提供了以下好处:

(1) 可以修改UI的外观,而不用修改一行代码

(2) 在不同的组件里面可以共享同一套逻辑代码,用来创建复杂的视图;

(3) 可以用很小的代价来改变UI的实现,比如正在使用NGUI , 但将来会切换成 UGUI

代码示例

这里提供了一个MVC在使用NGUI开发的例子,需要注意的是,我们不能在代码中提供NGUI库,毕竟它是收费的,所以想运行起来的话,需要自己导入NGUI库。接下来的内容都会以这个例子的代码作为基准,所以可以在阅读时可以先把代码下载下来。

总体概述

这是一张简图,从宏观的角度描述了代码中MVC模式的不同部分。

Model More