首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之Unity底层Graphics绘制接口(五十六)
2013
05-02

Unity3D研究院之Unity底层Graphics绘制接口(五十六)

写这篇文章是因为前几天有个朋友问我的一个问题。它的意思是如何在屏幕中绘制贴图的一部分,也就是如何将材质裁剪。

1.使用GUI的话效率不太高,每个部分都需要重新裁剪。

2.使用Mesh网面效率是高了,但是需要每一部分网面增加MeshRenderer组件,效率还是会打折扣。

今天我突然想到了Graphics,按照官方文档的说明它是底层绘制接口,所有GUI和网格的绘制底层都是它,我相信它的运行效率应该是最高的。

OK.我们来学习它。绘制贴图的访法是Graphics.DrawTexture() ,它也是在OnGUI中使用,但是它需要接收到Repaint事件的时候才能绘制。如下图所示,我将一张完整的贴图拆成了4部分。

 

Unity3D研究院之Unity底层Graphics绘制接口(五十六) - 雨松MOMO程序研究院 - 1

 

来看看代码是怎么写的。

 

       绘制访法应该放在EventType.Repaint中,然后Graphics.DrawTexture()方法中。参数1表示图片绘制的区域,参数2表示绘制的贴图,参数3表示绘制贴图中的那部分,取值范围在0-1中。

         Graphics还可以绘制模型,通常情况需要在Hierarchy视图中创建模型对象,然后在给模型绑定上贴图材质。这样我么就还得维护这个模型的生命周期,比如创建与施放的问题。使用Graphics可以绘制模型,但是它不会在Hierarchy视图中创建对象,也就是说纯代码绘制模型。

 

网格和材质绑定完后就可以看到模型,Graphics.DrawMesh()参数1需要绘制的网格,参数2 模型的坐标,参数3 模型的旋转,参数4模型的材质。 最重要的是使用Graphics.DrawMesh()模型还支持光影投射。下图我给了红色的世界光,模型接收光线变成了红色。

 

Unity3D研究院之Unity底层Graphics绘制接口(五十六) - 雨松MOMO程序研究院 - 2

 

 

使用Graphics.DrawMeshNow也可以绘制模型,它是立刻绘制模型。它不支持光影的投射。

 

为了OnPostRender()可以得到执行,这条脚本一定要绑定在摄像机上。

 

Unity3D研究院之Unity底层Graphics绘制接口(五十六) - 雨松MOMO程序研究院 - 3

 

详细的API可以看这里  http://docs.unity3d.com/Documentation/ScriptReference/Graphics.html

一般情况下应该很少会用到它,如果情况特殊的话尝试它吧,嘿嘿。欢迎一起讨论,学习。。。

MOMO与MO嫂提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 请问使用GUI.DrawTexture(new Rect(pointA.x, pointA.y, 1, 1), lineTex); 画出的lineTex可以转化为sprite吗?如果做呢?谢谢啦!

  2. Pingback: Buy Cialis online

  3. 大神,请教你一下,我在做一个地形,是海上有一些小岛。海水是一个Plane,悬在小岛模型的中间。现在当相机朝向海面和小岛的模型交接处时,交接的地方总是会出现锯齿和抖动,请问这个问题要怎么解决啊?

  4. 叫什么名字呢?谢谢啦!我现在做的方法很笨,如果是1个像素的线还过得去,但我加入了线宽,又为了好看,又加入了边缘润滑公式,现在画一条长一点的线,手机端非常卡。所以才想到用GUI直接转化成sprite的方式。