热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初学VR(二):第一/三人称角色的创建

导入包在Assets下右键选择导入包,选择Characters,导入以后,即产生如下图的文件目录:第一人称的使用按如下选择:将RigidBodyFPSContr

导入包

在Assets下右键选择导入包,选择Characters,导入以后,即产生如下图的文件目录:

导入包

第一人称的使用

按如下选择:
第一称的选择

将RigidBodyFPSController.prefab拖拽到上面的场景编辑页面中(记得添加一个plane平面模型),你会发现它有一个相机的图标。尝试着运行看看。

你会发现并不能推动之前创建的cube,如何才能推动物体呢?我们可以添加一个钢体(物体受力(重力、阻力、旋转阻力等) Rigidbody),如下图所示:

RigidBody的创建

钢体创建好以后,可以看见在Inspector窗口中多了以下组件:

RigidBody

Mass代表物体质量;Drag代表阻力,Angular Drag代表旋转阻力,Use Gravity代表是否使用重力。只有在添加了钢体以后,物体才会受力。现在运行程序,看cube是不是被推远了。

那么是不是有了钢体就一定会受力呢?受力的前提在于你能够触碰到它。这里有一个碰撞体(碰撞盒,物体与其它物体接触的大小 (看不见的) Box Collider)。你能够真实的感受物体的大小以及物体是否存在都依赖于该组件。

Box Collider

点击Edit Collider,能看见在模型周围有绿色的线框,此时就能够编辑钢体的大小,也可以通过size调节。尝试着把Box Collider前的勾去掉,是不是就直接穿过物体了。

其实不然,此时,你并不能看见任何物体,这是因为你使用了重力,物体会一直往下落,之前不下落是因为碰撞体的存在平面能够接住它。现在把RigidBody里的Use Gravity前的勾去掉,你就能看见物体并且穿过它了。

那怎样能够使物体不可见呢?这时有个渲染体(能够看见的实际大小(一般做空气墙) Mesh Renderer )

渲染体

去掉渲染体前面的钩,运行以后,cube就看不见了。

如果你把碰撞体加上,那么你会发下你被“空气”阻隔了,这就是空气墙的原理。这时记得把钢体移除掉,不然物体会受力,被推动。

预设体

预设体:可以共享(网上下载的模型一般都是以预设体的形式存在的 。创建时 从scene(名字)窗口拖拽到project窗口,使用时从project窗口拖拽到scene窗口(图) 。

创建预设体时,一般在scene窗口,右键creaty empty。然后将组合好的模型拖拽到里面,形成一个整体模型。注意创建空的时候,其坐标应该移动到你将要组合的整体模型中间去。

列如:你用许多cube创建了一个房子,那么你可以创建一个empty来存放这些cube,empty的坐标应该移动到房子的中间。这样当你点击empty时,房子可以作为一个整体操作。然后如果你需要在其它场景中使用该房子的话,你可以从scene(名字)窗口拖拽到project窗口,使用时从project窗口拖拽到scene编辑窗口即可。

第三人称角色的创建

在创建第三人称角色之前,需要删除掉之前的第一人称角色。

目录如下图:

第三人称角色创建

有没有发现,它其实就是一个预设体呢?拖拽到场景中,然后把main camera移动到人物背后,运行观察。

试着按wasd移动人物,你会发现人物可以移动,但相机是固定不动的。把scene窗口下的main camera拖拽到ThirdPersonController目录下即可,再运行,看人物是不是能够在场景中自由跑动了,相机也跟随着移动了呢?

在角色的Inspector窗口中都有一些参数可以调节,可以自己多尝试尝试。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 最近学习反射机制的时候Properties.load(读取本地文件流的时候怎么也找不到加载文件后面发现IDEA的默认根目录是在它的Project工程下IDEA的文件目录和Ec ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
author-avatar
chucai
这个家伙很懒,什么也没留下,只留下了这个默认个签!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有