跳转至

1.5 相机控制

主相机

相机属性

本节我们会介绍相机的基本属性,以及我们预置模板中涉及到相机运用的模板项目的介绍。那我们就开始学习相机属性吧!

温馨提示

无论在场景中中放置了多少物体、对象,除非将相机也添加到场景中,否则运行项目将不会显示任何内容! 我们已经预先为您在场景中预置了一个相机节点“MainCamera”, 它是我们运行项目后的主相机。当然,您也可以添加新的相机。

请先选中我们场景树中的 MainCamera 节点,然后将目光移至下方的属性栏窗口。我们相机的属性就呈现在我们眼前。

imageCover

  • 剔除遮罩 剔除遮罩是决定我们场景中哪个3D渲染层会被此相机渲染的属性,即我们的相机会看见哪个场景中的物体。 我们可以试着取消勾选层1(或点击第一个方块),然后使用快捷键F6运行我们正在编辑的场景,您就会发现我们原本场景有的对象就不能被相机看到了。这是因为我们的物体默认都是置于渲染层1的。

imageCover

  • 环境 环境属性就是设置相机视角下的能实现的环境球效果。其中 环境 属性下 新建环境 后的各个参数与 环境节点 中所包含的属性是相同的。

温馨提示

本节不会过多介绍环境参数,详细的环境属性的各个参数如何设置,可以参考后续章节。

尝试一下

试着在我们相机节点的环境属性中,新建一个环境,然后试着更改“背景 → 模式”。 运行我们的场景,看看各个模式下,相机渲染实现的效果吧!

  • 水平偏移与垂直偏移

    • 水平偏移:设置相机视口的垂直偏移分量
    • 垂直偏移:设置相机视口的水平偏移分量 我们可以尝试着改变这两个属性值,然后我们运行场景,可以看到相机的位置会有所改变。
  • 修改前相机视角效果

imageCover

  • 修改后相机视角效果

imageCover

  • 多普勒跟踪 此相机将针对在特定的方法中更改的对象模拟多普勒效应。

  • 当前的 此属性用于判断,视口是否使用当前的相机。如果我们场景中使用了多个位置的相机,那么我们就可以通过个这个属性的启用与否知道,当前视口在运行后使用的是哪个相机。

  • 视场 相机的视场角(以度为单位)。此属性可以用于调整相机所能看到的视角的大小。默认值为70。

  • 近截面与远截面

    • 近截面 :相机视口所能看到的最近物体的距离。
    • 远截面 :相机视口所能看到的最远物体的距离。
  • 投影

    • 透视 :相机视口中的物体的大小,会随着它们距离相机中的距离变化。它们距离相机越远,它们在相机视口中的大小就会越小。
    • 正交 :相机视口中的物体的大小不随它们距离相机的距离变化。
    • 锥台 :相机的锥台投影。 此模式下允许调整锥台偏移来创建“倾斜的视锥”效果。

相机预览

当我们在编辑器中摆放好了相机的位置,同时想要预览从相机视角下看到的场景是什么样子的时候,就会用到我们 相机预览 的功能。 IdeaVR提供两处切换 相机预览 的入口:1. 我们可以在视口左上角中进行相机视角的切换;2. 我们也可以在相机视口中的 显示 下拉列表中选择 效果预览 进行相机效果的预览。

  • 使用视口左上角进行相机预览 imageCover

  • 使用视口中 显示 列表进行相机预览 imageCover

  • 使用相机预览效果 imageCover

快速创建(相机)

本节会介绍我们在 快速创建 菜单中提供个几个相机节点。

imageCover

  • 空相机

    • 一个普通的相机节点。
  • 飞行相机

    • 挂载了一个飞行控制脚本,支持WASD控制移动相机。
  • 第一人称相机

    • 模拟第一人称视角的相机。与第一人称项目模板中的相机相同。
  • 第三人称相机

    • 模拟第三人称视角的相机。与第三人称项目模板中的相机相同。

温馨提示

第一人称相机、第三人称相机的用法,将在下节相应项目模板中介绍,请继续往下翻阅!

第一人称漫游

本节将介绍以第一人称漫游为模板创建一个3D场景的方法,并且也会介绍第一人称漫游项目中相机的使用。

以第一人称漫游模板新建项目

首先,我们回到项目管理器,选择 新建 页,这里我们以 第一人称漫游 为模板新建项目工程。您可以任意选择模板场景新建项目工程,但此处建议您以 第一人称漫游 新建项目工程。 当我们选择好项目工程所在的路径,确定好项目模板我们想命名的工程名字后,点击 创建并编辑 ,正式开启相机运用的学习。

imageCover

首先,第一人称漫游模板,提供了以第一人称为视角的漫游操作,基本操作为 WASD实现控制相机的前、后、左、右的移动。 空格实现弹跳,鼠标右键实现相机视角移动。

整个场景的场景树结构其实很简单, Mansion节点 代表着整个场景的背景,即花园。 WorldEnvironment节点 代表这个天空球效果。 DirectionalLight 代表着场景中的灯光,环境光。 Player 即整个第一人称漫游场景的核心,人物的模拟漫游,也是我们相机主要运用的地方。

imageCover

我们点击Player节点右侧的场景图标,即可进入Player节点的场景。

注意

场景引用,可以让我们的场景树结构显得清晰化,且对进行更改时也不会受到场景中其他事物的影响,也便于我们管理场景。 这种场景引用的方式,我们在本章节不会详细的介绍。如果您对此存有疑惑,可以前往之前介绍场景引用的章节进行学习。

在此场景中,您可以发现,我们只有一个 相机 和一个 碰撞体 节点。这两个节点都放置于KinematicBody这个节点下。

运动实体(KinematicBody)节点类型 ,是特殊类型的实体,它能够被用户控制,它不受物理系统的影响。 我们可以创建一个相机放置于运动实体节点下,并且调节相机的位置,来模拟人眼的位置。接着我们生成一个碰撞体,并且选择碰撞体的形状为 Capsule胶囊类型 ,碰撞体形状之所以为胶囊类型,是因为胶囊类型可以形似人体,因而可以让我们模拟出最真实的第一人称漫游体验,如果您还不能理解为什么选为胶囊类型,您可以翻阅 第三人称漫游

imageCover

!!! 为什么要生成碰撞体?

因为只有碰撞体才能让我们知道场景中物体与物体之间是如何相交、接触的。也才能避免我们相机穿透模型的情况。

温馨提示

碰撞体的概念,此处不再进行详细的介绍,如果您对碰撞体还存有疑问的话,可以在其他章节中进行进一步的了解。

至此,我们已经完成了人物漫游的基本形态,接下来只需编写相机的交互。 我们已经在场景中预置了第一人称交互的交互脚本,并且挂载于我们的Player节点上。

温馨提示

第一人称漫游的交互编写,再次不做过多的描述。您可以先使用我们模板中提供的交互脚本进行使用,您也可以继续学习,之后章节中会带您一起了解我们IdeaVR强大的交互编辑器,相信您看完本教程一定收获颇丰。

温馨提示

您可以将我们所提供的交互脚本挂载至 同工程的其他场景 进行使用,也可以将其拷贝至其他项目,并运用我们上述的制作Player节点的方法,我们可以轻松实现一个以第一人称漫游的场景。

第三人称漫游

本节将以第三人称漫游项目模板为基础,介绍使用相机节点在第三人称下的使用。

以第三人称漫游模板新建项目

我们回到项目管理器,选择 新建 页,这里我们以 第三人称漫游 为模板新建项目工程。 当我们选择好项目工程所在的路径,确定好项目模板我们想命名的工程名字后,点击 创建并编辑 ,正式开启第三人称下相机运用的学习。

imageCover

进入场景后,我们可以看到,第三人称与第一人称的相机的场景树结构都没有什么太大区别,都是挂载于 运动实体(KinematicBody)节点类型 下。

第三人称的多运用了一个人物模型,相机的位置也做了调整,放置到了人物的后方。碰撞体都采用了 Capsule胶囊类型

imageCover

我们可以看到在 Player节点 下(KinematicBody类型)有一个 Character节点 ,这个 Character节点 将代表我们需要放置在场景中的模型的父节点。

imageCover

如图中蓝框与绿圈的框选所示,我们将引用的模型的根节点放置到了 Character节点 下。此后选中 Player节点 ,我们可以看到属性列表中多了两个属性:1. MaxSpeed 2. Person。 - MaxSpeed:人物模型行走的最大速度 - Person: 用于绑定我们所引用的模型的根节点,便于我们实现以第三人称的方式控制该模型

Person 属性,绑定到了我们想要控制的模型的 根节点 ,如图中:就是 Teddy

  • 您可以在Character节点下放置我们资源库中为您提供的任意一个人物模型 将资源库中的模型拖入场景,随后将其根节点拖到character下即可 这样,我们可以为您实现第三人称控制人物行走的效果。具体操作可以参考下图。

imageCover

  • 我们首先从资源库中拖入一个人物模型
  • 随后调整人物模型的位置,大小缩放,以贴合碰撞体
  • 之后将人物模型的根节点,拖至 Character节点
  • 我们通过选中 Player节点 ,将 Person属性 绑定到我们人物模型的根节点
  • 之后我们就可以以第三人称的方式控制该人物模型了

温馨提示

您可以从动图中看到,我们在放置完人物模型后,适当调整了人物的大小缩放,以及位置,这是为了与碰撞体相贴合,您可以根据实际情况自行调整,以达到更好的控制效果。

第三人称的交互操作,与第一人称类似。提供了以第三人称为视角的漫游操作,基本操作为 WASD实现控制相机的前、后、左、右的移动。 空格实现弹跳,鼠标右键实现相机视角移动。

温馨提示

您可以将我们所提供的交互脚本挂载至同工程的创建的其他场景进行使用,也可以直接使用快速创建中的第三人称相机实现相同操作。