在虚拟现实(VR)的世界中,与游戏对象的交互是至关重要的。其中,一个常见的需求是能够突出显示玩家选中的对象。本文将介绍如何在VR环境中实现这种高亮效果,以及如何创建和应用着色器来达到这个目的。
目标是能够在游戏中拾取和投掷物品。一个常见的视觉效果是,当选中一个游戏对象时,该对象会被高亮显示。
着色器是用于计算每个像素渲染颜色的小型脚本,这取决于光照输入和材质配置。幸运的是,不需要自己从头开始创建着色器。今天,将使用Unity中提供的现有着色器——轮廓勾勒漫反射着色器。
在Unity的Project面板中,创建一个名为"Shaders"的新文件夹。在"Shaders"文件夹中,右键点击并选择"Create > Shader > Standard Surface Shader",命名为"Border"。
打开"Border"着色器,并添加特定的着色器脚本。只需要轮廓效果,所以复制并粘贴到"Border"着色器中的代码是:
Shader "Outlined/Silhouette Only"
{
Properties
{
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_Outline ("Outline width", Range(0.0, 0.03)) = .005
}
...
}
这段代码创建了一个具有轮廓效果的着色器。
接下来,需要将着色器应用到一个新的材质上,以便可以使用它来高亮游戏对象。
在项目目录中创建一个新的文件夹,命名为"Materials"。在项目面板中右键点击并选择"Create > Material",命名为"Outline"。
选择新的"Outline"材质,并将其着色器设置为刚刚创建的"Border"着色器。
现在,可以控制两个变量:
现在已经拥有了轮廓材质,是时候将它附加到想要交互的游戏对象上了。
创建一个新的球体游戏对象,将其命名为"Ball",并将其移动到(0, 1.2, 2.5)的位置,使其正好位于玩家面前。
在"Ball"的"Mesh Renderer"组件中,选择"Materials",并将大小更改为2。在第二个材质槽中,添加刚刚创建的"Outline"材质。现在应该能在"Ball"上看到一个白色的轮廓。
为了使轮廓更加明显,让将球体的默认材质更改为不同的颜色。在"Element 0"中,将材质更改为"Cube Red",这是Google VR SDK提供的。因为只创建了轮廓,所以可以在游戏对象上拥有多个材质,并且仍然拥有网格轮廓!