文档章节

Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动

大学霸
 大学霸
发布于 2015/09/14 15:38
字数 1185
阅读 479
收藏 2

Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动

使用cookie类型的纹理模拟云层的移动

现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着云层移动,影子也跟着运动,如图3-28所示。


3-28  天空中的云朵与大地上的影子

要在游戏中,模拟与之类似的大气现象时,就需要使用cookie类型的纹理。

制作云层效果的纹理

本小节将使用PhotoShop绘制有云层效果的纹理图,然后为其添加透明度信息。具体操作过程如下:

1)使用PhotoShop创建512×512像素大小的图。

2)在PhotoShop内,单击【滤镜】|【渲染】|【云彩】命令,即可在瞬间完成云层的绘制,如图3-29所示。

3-29  使用PhotoShop绘制云层

3)全选(Ctrl+A)并复制(Ctrl+C)此图像,切换到通道窗口下,新建通道,使用默认的名称Alpha 1,选中新建的通道,然后粘贴(Ctrl+V)。这样透明度的信息也就添加完了。

4)存储此云层纹理,然后导入到Unity

Unity中完成的准备工作

为了模拟云层的移动效果,需要想游戏场景中添加相应对象,并做些简单设置,具体步骤如下:

1)在Project视图里,选中导入的云层纹理,然后在Inspector视图里设置下列属性值,如图3-30所示。

  • q  Texture TypeCookie

  • q  Light TypeDirectional

3-30  设置云层纹理的属性

2)单击GameObject|Create Other|TerrainDirectional Light命令,为游戏添加地形(Terrain)和方向光源(Directional Light)对象。

3)选中Directional Light,然后在Inspector视图里,修改光源下列属性,如图3-31所示。

  • q  PositionXYZ均设置为0

  • q  RotationXYZ设置为9000;此时光线会与地形平面垂直,如图3-32所示,这是为了避免阴影扭曲。

  • q  Cookie设置为云层纹理;

  • q  Cookie Size设置为200;此属性控制照射在地形上的云层的密度,值越大密度越小。

  • q  Shadow Type设置为No Shadows

3-31  修改光源的属性        3-32  光线与地形平面垂直

编写控制云层移动的脚本

光是将云层的阴影投射在地形平面上,还看不出什么效果,所以本小节打算编写一个脚本,用于控制云层的移动,这样的话效果会更好些。在Project视图下,创建一个C#脚本,并命名为MovingShadows。打开此脚本,写入下面的代码:

  • 01     using UnityEngine;

  • 02     using System.Collections;

  • 03    

  • 04     public class MovingShadows : MonoBehaviour

  • 05     {

  • 06              public float windSpeedX;                             //X轴方向上的速度

  • 07              public float windSpeedZ;                              //z轴方向上的速度

  • 08              public float lightCookieSize;                       //直线光源Cookie Size属性的值

  • 09              private Vector3 initPos;

  • 10              //脚本被初始化时,调用此函数

  • 11              void Start ()

  • 12              {

  • 13                       initPos = transform.position;

  • 14              }

  • 15              //运行游戏时,每帧都调用此函数

  • 16              void Update ()

  • 17              {

  • 18                        //X轴方向,移动云层

  • 19                       if (Mathf.Abs(transform.position.x) >= Mathf.Abs(initPos.x) + lightCookieSize)

  • 20                       {

  • 21                                 Vector3 pos = transform.position;

  • 22                                pos.x = initPos.x;

  • 23                                 transform.position = pos;

  • 24                       }

  • 25                       else

  • 26                       {

  • 27                                 transform.Translate(Time.deltaTime * windSpeedX, 0, 0, Space.World);

  • 28                       }

  • 29                        //Z轴方向,移动云层

  • 30                       if (Mathf.Abs(transform.position.z) >= Mathf.Abs(initPos.z) + lightCookieSize)

  • 31                       {

  • 32                                 Vector3 pos = transform.position;

  • 33                                 pos.z = initPos.z;

  • 34                                 transform.position = pos;

  • 35                       }

  • 36                       else

  • 37                       {

  • 38                                 transform.Translate(0, 0, Time.deltaTime * windSpeedZ,Space.World);

  • 39                       }

  • 40              }

  • 41     }

此脚本将被赋予方向光源。游戏开始运行时,脚本11行的Start()函数被执行,获知当前方向光源的位置;游戏运行时,16行的Update()在每帧都被执行的,作用是控制方向光源在XZ平面上的移动。

选中被赋予MovingShadows脚本的方向光源,在Inspector视图里可以看到脚本组件上的3个属性:Wind Speed XWind Speed ZLight Cookie Size,如图3-33所示。

提示:属性的含义在脚本的注释中有说明。

3-33  脚本组件上的3个属性

云层效果展示

设置好云层的移动速度,调整好摄像机的视图效果后,就可以运行游戏了。当然了,看到的就是云层在地形表面上移动的场景了,如图3-34所示。

3-34  模拟云层移动的效果

本文选自:Unity 游戏开发技巧集锦大学霸内部资料,转载请注明出处,尊重技术尊重IT人!


© 著作权归作者所有

共有 人打赏支持
大学霸
粉丝 263
博文 889
码字总数 553645
作品 0
东城
程序员
私信 提问
【Unity3D技术文档翻译】第3.4.4篇 Cookies

上一章:【Unity3D技术文档翻译】第3.4.3篇 使用灯光 本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Light sources】→【Cookies】 Cookies ...

何三思
2018/07/09
0
0
ogre的材质与unity的材质的相似性

最近研究了火炬之光的游戏资源,这款游戏采用ogre引擎,也就促使我研究了一下ogre的材质文件格式,发现和我经常使用的unity的材质格式有很多相似之处,因此分享出来给大家。 ogre的材质文档可...

李勇2
2015/02/28
0
0
Unite Beijing 2018 | 技术专场部分精彩议题曝光

离5月11-13日的Unite Beijing 2018的开幕仅剩一个半月了,届时来自全球的Unity技术达人,行业精英和全球合作伙伴将为你带来史无前例的80余场技术演讲,内容涵盖Unity跨平台内容开发经验,标杆...

weixin_41849687
2018/04/20
0
0
Unity中制作游戏的快照游戏支持玩家拍快照

Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能。这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:...

大学霸
2015/04/17
0
0
木木的Unity学习笔记(四)—— Unity中的柏林噪声(Perlin Noise)

木木的Unity学习笔记(四)—— Unity中的柏林噪声 柏林噪声是一个非常强大算法,经常用于程序生成随机内容,在游戏和其他像电影等多媒体领域广泛应用。算法发明者Ken Perlin也因此算法获得奥...

fumikisama
2018/05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部