杨航最近在学Unity3D

在一些经典的游戏中,需要玩家在一个3D场景中选取场景中的物体。例如《仙剑奇侠传》,选择要攻击的敌人时、为我方角色增加血量、为我方角色添加状态,通常我们使用鼠标来选择一个目标物体,当鼠标移动到目标物体上时,目标物体将显示轮廓线,此时就表示当前物体被选中,我们可以在此基础上为游戏物体进行一系列的操作。那么,这一功能是如何在Unity3D中实现呢?

首先我们可以将问题分解为两个子问题:第一,如何确定物体是否被选中;第二,物体被选中后如何清晰地传达给用户。

如图是古剑奇谭和仙剑奇侠传的战斗画面:

接下来,我们分别来解决这两个问题。对于第一个问题,我们可以采取射线检测的方法,即从摄像机向鼠标所在的位置发射射线,如果该射线击中了游戏场景中的物体,我们就认为该物体被选中了。对于第二个问题,我们需要让物体的轮廓线显示出来,这是我们今天着重要研究的地方。在Unity3D中我们可以通过Shader 即着色器来实现更改材质的渲染方法。Unity3D内置了6类着色器,从简单的VertexLit到复杂的带有高光的视差凹凸贴图(Parallax Bumped with Specular),共30个。其中:

1、Normal:适用于不透明的物体

2、Transparent:适用于半透明的物体,透明度由贴图的alpha通道决定

3、TransparentCutOut:适用于某些部分透明,某些部分不透明的物体

4、Self-Illuminated:适用于需要自发光的物体

5、Reflective:适用于需要反射环境光的物体

6、Lightmapped:适用于需要添加光照贴图及相应的UV坐标数值

从一般的意义上来说,着色器定义了渲染物体的方法、材质中指定的贴图、用于渲染的顶点及片段着色程序、材质中调整的颜色以及各种数值设定。而相对应地,材质决定我们将使用那些贴图来渲染、使用哪些颜色渲染等。在今天的文章中,我们将定义下面的着色器代码:

对于着色器程序的编写,我们此时可以先放在一边,这里我们着重来学习如何使用着色器来实现不同的渲染效果。我们新建一个材质,将该材质的着色器设置为我们这里编写的着色器,如图:

注意到这里的物体时没有轮廓线的,因为我们这里使用的是默认材质Default-Diffuse。那么,接下来,我们通过编程的方式来动态更换材质,这样就可以实现不同的渲染效果,编写下面的脚本:

在上面的这段脚本中,首先我们指定了三个材质,分别是适用于简单物体(如Cube等)的带轮廓线的材质,适用于复杂物体(如人物模型)的带轮廓线的材质( 本文未实现)、适用于简单物体的默认材质。主要原理就是我们在文章开头就提到过的射线检验方法。我们将这个脚本绑定到游戏场景中的物体上,设置好tag后就可以运行程序了,我们一起来看看程序的效果吧!

这就是我们今天想要实现的效果啦,通过今天的文章我们可以实现在3D场景中对一个物体的选取,这种需求在游戏里还是比较多的啊!希望大家好好学习并加以应用!



3D场景中选取场景中的物体。相关推荐

  1. 在Excel中选取一行中的最大数值进行标题匹配

    Excel中需要操作的数据如下: 实现的效果如下: 操作需求:每一行数据对应每一个标题都有相应的标题得分,但是只选择得分最大的标题作为这一行的标题. 第一步:首先在I2单元格中输入Max函数查找出一行 ...

  2. 游戏开发入门(八)游戏中的场景管理

    视频链接:游戏开发入门(八)游戏中的场景管理(5节课 时常:约2小时07分钟) 授课者通过2D围棋的例子,逐步拓展成3D的虚拟游戏世界.这个3D游戏世界基本上就可以涵盖市面上所有类型的游戏了,我们通过 ...

  3. 自动驾驶测试中的场景构建

    https://www.toutiao.com/a6701087401596420619/ 场景是自动驾驶测试系统中相当重要的一环,测试场景的多样性.覆盖性.典型性等能够影响到测试结果的准确性,从而保 ...

  4. Unity中通过场景切换但音乐继续播放

    在场景切换的过程中,我们希望场景中的背景音乐继续播放而不是从新播放,这时我们要通过DontDestroyOnLoad(this.gameObject)函数来实现这样的功能; 首先我们新建两个场景,将场 ...

  5. 【游戏美术】Unity中,场景的优化以及基本规范

    此篇文章将简单讲解游戏中,场景的优化,以及制作规范,简单技巧和这样做的原因. [前言] 优化是影响游戏体验的一个重要因素,好的优化,能够让玩家手感,体验达到最佳,而优化太差,会导致很多问题,比如内存溢 ...

  6. Maya中的场景与Unity3D中的场景匹配

    我公司多是把Maya做的东西输出成视频,然后在正式使用的时候用播放器播放,但如果想要在每次播放的时候加上不同的效果,比如在视频里的某物体上加上文字,这样都要再重新输出一遍,相当费时. 解决办法是用Un ...

  7. 如何调整按钮里的文字的位置android_UI设计中按钮场景分析

    别无他话,今天就和大家聊一聊设计宿敌--按钮设计.按钮的设计看似简单,其实按钮的功能不同,设计形式上也会有差异,今天我就针对按钮的场景分析,对按钮进行全面的解析. 按照功能性分类,按钮主要包括行为召唤 ...

  8. 在SAP PI中建立场景

    在SAP PI中建立场景 如果需要在PI中建立场景(scenario),要从主页开始. 主页界面如下: 主页有以下四个工作区的超链接: 企业服务库(ESR) 集成目录(ID) 系统规划(SL) 配置和 ...

  9. Unity制作游戏中的场景

    Unity制作游戏中的场景 1.2.3  场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...

最新文章

  1. 从反编译的角度去观察C#6.0
  2. 电脑常见故障处理_关于密封仪、密封试验仪器在使用上的常见故障及维护方面...
  3. Android安全加密:对称加密
  4. java 10zhuan8,Java代码 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换
  5. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性
  6. (31)FPGA米勒型状态机设计(二段式)(第7天)
  7. 阿里公共DNS 正式发布了
  8. C#中另类自定义公式计算 字符串转换为计算公式,并得出计算结果【转载】
  9. 干货分享 | 工业信息数据库安全现状与技术分析
  10. Vue项目中使用富文本编辑器
  11. 2018年大连海事大学校赛(ACM竞赛高校联盟训练赛 第11场)题解
  12. 计算机应用大赛动员大会,计算机应用工程系第十二届学生会动员大会
  13. 简单c语言实现的成语接龙小游戏
  14. 一文读懂京东技术发展简史
  15. 数据库原理及应用——图书销售系统数据库设计
  16. ubuntu pstack报错:Input/output error
  17. ADDA: Adversarial Discriminative Domain Adaptation
  18. Krpano(虚拟漫游)
  19. 京东按关键字搜索商品 API 返回值说明
  20. 文华财经指标安装使用步骤,开多开空成功率95%公式指标多空买卖点信号

热门文章

  1. python获取当前日期_Python程序获取当前日期
  2. 关键字驱动测试示例_带有示例的False关键字
  3. 比较两张大小相同的照片的差异,返回数值
  4. 周五怎么表示 mysql_完美起航-MySQL找每个月最后一个星期五--函数定义与使用
  5. C和汇编---while反汇编
  6. python中upper函数有什么用_几个有用的python字符串函数(format,join,split,startwith,endwith,lower,upper)...
  7. ubuntu14.04下安装qt4.8.6 +qt creator
  8. Linux系统【一】CPU+MMU+fork函数创建进程
  9. 【C++学习笔记五】模板
  10. React面试题总结,一文说清!