《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.10 在地形周围创建圆环
开发 创建 Unity 屏幕 特效 原书 秘笈 着色器
2023-09-11 14:16:11 时间
本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈(原书第2版)》一书中的第2章,第2.10节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.10 在地形周围创建圆环
2.10.1 准备工作
现在纹理已经设置好了,你可以修改地形的材质,通过这个材质就可以应用我们的自定义着色器。从Terrain Settings中修改Material属性为Custom,然后将Radius材质拖曳到Custom Material栏。
现在你就可以开始创建着色器了。 2.10.2 操作步骤
在CGPROGRAM部分添加相应的变量:
表面函数的Input结构不仅需要纹理的UV值,还需要地形上每个点的位置(在世界坐标下)信息。可以通过修改Input结构来获得这个参数:
最后使用这个表面函数:
以上这些就是在地形上画圆环所需要的所有步骤。你可以使用材质的Inspector标签页来修改圆环的位置、半径和颜色。
移动圆环
如果想要圆环跟着角色走,还需要其他一些必要的步骤:1. 创建一个新的名为Radius的C#脚本。 2. 给该脚本添加如下属性:
3. 在Update()方法中,添加下面几行代码:
4. 将脚本添加到角色上。 5. 最后将Radius材质拖曳到脚本的Radius Material栏。
很多即时战略游戏需要通过在某个选定单位周围绘制圆环来显示一些距离(比如攻击范围、移动距离、视野范围等)。如果地形是平整的,可能只需要在四边形上画一个圆形纹理就可以了。但是如果地形不是平的,则四边形可能会被一些小山或者其他几何体给截断。这一节中你会学到如何在复杂地形上使用着色器画圆环。如果还想移动这个圆环,就需要一个着色器和一些C#脚本。下图是一个在由一堆小山构成的地形上画出圆环的例子:
2.10.1 准备工作
这个技术并不需要对场景中的每一个几何体进行操作,而是针对地形进行操作。因此第一步需要在Unity中准备一个地形。
首先创建一个名为RadiusShader的着色器和一个名为Radius的材质。 准备一个角色,我们会在这个角色周围画出一个圆。 从菜单中选择 GameObject | 3D Object | Terrain来创建一个新地形。 给地形创建一定的几何结构。可以导入一个已有的结构或者使用工具来创建一个新的(Raise/Lower Terrain, Paint Height, Smooth Height)。 在Unity中,地形是一类特殊的对象,地形上的纹理映射也和传统的三维模型上的纹理映射有所不同。不能通过着色器提供一个_MainTex纹理,因为地形需要自己提供纹理。步骤是选择Paint Texture,然后单击Add Texture...。现在纹理已经设置好了,你可以修改地形的材质,通过这个材质就可以应用我们的自定义着色器。从Terrain Settings中修改Material属性为Custom,然后将Radius材质拖曳到Custom Material栏。
现在你就可以开始创建着色器了。 2.10.2 操作步骤
首先编辑RadiusShader文件。
在新的着色器中添加如下四个属性:在CGPROGRAM部分添加相应的变量:
表面函数的Input结构不仅需要纹理的UV值,还需要地形上每个点的位置(在世界坐标下)信息。可以通过修改Input结构来获得这个参数:
最后使用这个表面函数:
以上这些就是在地形上画圆环所需要的所有步骤。你可以使用材质的Inspector标签页来修改圆环的位置、半径和颜色。
移动圆环
如果想要圆环跟着角色走,还需要其他一些必要的步骤:1. 创建一个新的名为Radius的C#脚本。 2. 给该脚本添加如下属性:
3. 在Update()方法中,添加下面几行代码:
4. 将脚本添加到角色上。 5. 最后将Radius材质拖曳到脚本的Radius Material栏。
现在可以把你的角色到处移动一下,这个脚本始终会在你的角色周围创建一个漂亮的圆环。修改Radius脚本的属性也会改变圆环的半径。
2.10.3 工作原理绘制圆环需要的元素有圆心、半径和颜色。在着色器中可以通过_Center、_Radius和_RadiusColor分别得到。我们通过在Input结构中添加worldPos变量来请求当前绘制的像素在世界坐标中所处的位置。世界坐标的位置也是物体在编辑器中的真实位置。
surf()函数是真正绘制圆环的地方。它会计算绘制点到圆心的距离,然后判断该距离是否属于_Radius到_Radius + _RadiusWidth范围内,如果在这个范围内,就使用选定的颜色;如果不在这个范围内,就像我们见到过的其他着色器一样直接采样纹理映射的颜色。
相关文章
- 基于CodeSmith提高开发效率
- 【IOS-COCOS2D-X 游戏开发之四】COCOS2DX创建ANDROID NDK新项目并编译导入ECLIPSE中正常运行!
- 【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用
- Knockout应用开发指南 第五章:创建自定义绑定
- Extjs MVC开发模式详解
- 【转】.NET Core开发日志——IHttpClientFactory
- 为什么阿里巴巴Java开发手册中不允许用Executors去创建线程池?
- SAP UI5 初学者教程之二十二 - 过滤器 filter 的开发和使用试读版
- 微信开发系列之九 - 在微信里直接创建SAP C4C的社交媒体消息
- 如何创建开发uniapp微信小程序项目?详细步骤教程
- Arduino开发编程:Visuino Pro 8.0.0.8 Crack
- Android开发InputManagerService创建与启动流程
- 〖Python语法进阶篇⑯〗- 综合实战 - 抽奖系统之基础功能开发 - base奖品相关功能实现
- 〖Python 数据库开发实战 - MySQL篇⑨〗- 什么是 SQL 语言、如何创建数据逻辑库及如何创建数据表
- 交换机trunk口即便开发所有的vlan,如果没有在交换机上创建对应的vlan也不会进行转发。
- 【Kotlin 协程】协程简介 ( 协程概念 | 协程作用 | 创建 Android 工程并进行协程相关配置开发 | 异步任务与协程对比 )
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )
- 安全类工具先创建007片:开发活动监控工具
- 002-Spring4 快速入门-项目搭建、基于注解的开发bean,Bean创建和装配、基于注解的开发bean,Bean初始化销毁、Bean装配,注解、Bean依赖注入
- C/C++、Qt开发,跨平台CMake判断当前平台是Linux还是Windows,操作系统判断
- LabVIEW编程LabVIEW开发HTPXI2913开关 回忆与郑工交往记录
- win10 + python27 + selenium + pillow 开发环境搭建 重新安装pilloow
- C#开发的OpenRA的游戏主界面怎么样创建3
- Android开发经验之—intent传递大数据
- 【SQL开发实战技巧】系列(四十):Oracle12C常用新特性☞可以在同样的列(列组合)上创建多个索引以及可以对DDL操作进行日志记录
- 开发转测试:从0开始的6年自动化之路...
- Eclipse配置C/C++开发环境
- RK3399平台开发系列讲解(项目实践篇)1.4、OpenCV 实战之图像操作与增强
- 超详细的GO语言windows系统开发环境的搭建及其项目的创建(2019年8月25日更新)
- 嵌入式linux开发,默认路由处理