虚拟现实之机械拆装项目架构

一般的机械拆卸模拟用来培训演示,例如大型机械的拆装都是非常耗时的,需要一个软件来模拟下拆装的步骤,给不熟练的工人演示注意事项等等。应用非常广泛。因此设计一个通用的框架,可以很好适应变化的需求。

使用unity可以很方便的开发虚拟现实类的软件,程序部分只需要普通的程序员即可完成整个项目。

机械的拆装模拟是最近两年比较常见的项目,大量的订单和需要制作的模拟。阿亮在大二的时候也是接到了一个这样的单子。就是对某大型机械设备进行拆装,维修演示。

先说一下这个项目的常规方案(一开始我也是这么做的),就是利用unity的动画系统,制作每个零件的动画,如位移,旋转等。制作完成后,通过程序去调用播放零件的动画,来实现拆装的演示。

这个方案的缺点是非常明显的,一是,零件繁多,制作动画本身就是个耗时较长的活,总体下来制作时长。二,动画系统的不完善和平滑过渡的调整,都将困扰开发者,使动画的制作不稳定,效率低下。三,动画做完后,动画的修改,如移动的速度,位置,角度等调整,又是一个庞大的任务,而代码并不能帮上忙,这对项目的维护是非常要命的。四,扩展性极差,如果有新的零件填进来,或者新的动作都将考验系统的适应能力,而动画系统下的架构是难以适应这一变化的。

总之,除非你做的模拟零件比较少,而且一切都是固定的,可以采用上述方案。否则,你的项目就算成功了,也花费了大量的时间和精力,这些都是金钱。

一般的机械模拟,零件断然不会少,动作繁多,有先后的顺序。移动的方案也是不确定的,例如零件的位置,放置的角度等等。零件的移动速度有时也是有要求的。例如小零件移动的快,大零件移动的慢。

基于以上要求和特点,关于机械的模拟,应该使用transform来实现。底层写好零件的移动,旋转,速度等接口。同时旋转也是不确定轴向的,有时候旋转的轴并不在物体身上(不规则零件),所以底层接口应该考虑到这些。如果不想写,可以借助ITween,并封装好相关函数。

本文不会提供源码,只提供开发的方案和思路,如果想要源码,可以联系我,当然那并不是免费的。(实际上方案才是最贵的)

接着说,底层实现移动是第一步,接下来是设计的第二步,第一步中普通的程序员完全可以胜任。

因为有大量的零件,你不可能为每个零件都写一个移动方法。所以我们需要定义一些通用的规则,例如移动,旋转等,并生成相应的字段。或许你已经猜到了,第二步就是做一个数据持久层,关于这个数据库的设计,我就不详谈了,看个人需求。定义零件的移动,旋转,位置,速度等参数,然后存起来,运行程序时读取。这样的好处是,可以动态的修改零件的动作。即使不会编程,不懂unity的也可以通过直接修改数据达到改变机械模拟的“动画”。关于这部分的设计还是比较简单的,看具体需求而定。关于数据库,一般本地数据库足矣。现成的数据库有sqlite,但是跨平台不好。Xml,简单方便,跨平台。具体可以看我以前的博客。

第三步,算法结构的封装。这个层次主要负责零件操作的设计,提供零件的各种操作方法,如添加动作,修改动作等等,无外乎一些位置,角度,速度的访问等等。这个类一般的程序员也能做好,关键是看各位的具体需求了。

第四步,做个UI,一个可视化的“动画”编辑器。此动画编辑器非unity的动画编辑器。可以理解为,对前三步的方法的调用。如果直接在数据库中修改参数,没有直观的感受,调参数也是非常麻烦,每次改完重新打开程序才看到效果,因此需要制作一个零件的动作编辑器来完成。

具体的做法是,在一个场景中,加载所有的零件,然后通过鼠标点击获取零件。完成这个功能很简单,所有的零件加个meshcollder,然后使用射线碰撞就行了。因为零件数量较多,我们可以动态的添加collder组件,这个过程比较缓慢,极容易卡顿,建议使用协程。选定零件之后,就可以对零件的动作进行编辑了。具体的UI如何设计就看大家的需求了,但是功能无外乎,移动(选择轴向),旋转(选择轴向),速度参数等等。为了方便查看还可以添加预览功能,编辑完成后就可以查看零件的移动轨迹了。话说这个功能也是很好完成的,使用一个表,存储起点位置,然后读取一下移动参数就行了。

当然快捷键也可以加入UI设计中,其目的就是方便零件动作的设计。到后期,还可以模拟unity引擎对物体的操作,鼠标拖拉零件,通过类似的锚点,存储关键点,设置速度等等,一个简单方便的“动画”编辑器就很完美了。

动画编辑器可以作为高级功能,让用户自定义零件的动作,模拟拆卸动画的同时,还能实时修改。这样的话,软件拥有更好的灵活性。同时,还可以方便的添加新零件。不仅如此,在面对一个新的模拟项目时,无需再修改代码,直接让美工做好的模型放到指定的文件夹下就ok了。这要看你的资源加载设计了。

本文连接:http://www.cnblogs.com/jqg-aliang/p/4825460.html,转载请申明出处,谢谢!

时间: 2024-09-29 10:07:21

虚拟现实之机械拆装项目架构的相关文章

UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享

在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎指点! 基于MVVM的UWP项目架构 每个项目或者目录下需要什么文件如下图所示: 项目参照关系: 备注:如果使用Entity Framework Core做ORM持久层,只需要将UA.DataAccess层做替换就可以.希望本文能对您的团队开发带来一定功效.

项目架构

项目架构 阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的核心概念(附上链接),并且设计了我们的上下文映射图,那么接下来就准备开始立项了,本篇文章的部分知识点可能对一部分人来说比较基础,可以选择性的阅读. 在这之前我们平常用的最多的应该就是3层架构了,这里也不展开描述了,大家都是在3层的陪伴下一路走来的~ DDD所使用的传统分层架构是松散分层,也

项目架构开发:业务逻辑层之领域驱动失血模型

前边我们构建了个数据访问层,功能虽然简单,但是基本够用了.传送门:项目架构开发:数据访问层 这次我们构建业务逻辑层 业务逻辑是一个项目.产品的核心,也是现实世界某种工作流程在代码层面的体现. 所以,业务逻辑的合理组织构造,或更真实地反映现实业务操作,对项目的成功与否非常重要 现在业界对业务逻辑层的开发,一般会参考Martin Fowler大师提出来的针对业务层开发的四种模式 分别是面向过程的事务脚本.表模块模式,面向对象的活动记录与领域开发模式 我们要做的就是领域驱动开发模式,注意标题中的“失血

项目架构开发:数据访问层之Query

接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操作,多表联查并没有实现 其实对于任何一个项目来说,多表联查都是比较麻烦的地方,因为项目的“读”操作,特别是多表的“读”,至少占据所有“读”的一半以上 然而至今,据我所知还没有哪一款ORM工具可以灵活处理多表联查:想要不写sql语句,又想性能高,还想用强类型的ling查询方法:这对于多表查询来说比较难

.Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,web项目近引用接口而不引用实现,在配置文件中进行配置实现程序集合类,注入业务逻辑层而不必注入数据访问层. 一.数据访问层 在项目中摒弃数据访问层或者使用EntityFramework作为数据访问层. 在项目中数据访问层主要实现数据的存储,仔细看一下EntityFramework发现DbContext

Web应用程序系统的多用户权限控制设计及实现-项目架构【3】

本章主要讲述Web权限管理系统的项目架构,及开发中需要的基本类和相关的CSS,JS文件. 1.1系统结构 本系统搭建开发工具为Visual Studio 2012,采用ASP.NET MVC 4.0技术开发.系统的框架图如下所示: 特别说明:系统需要用到的CSS文件在Content目录下,公有的JS文件在Scripts目录下.其下载链接为:http://files.cnblogs.com/files/wlandwl/CSS_JS.zip 系统页面前台展示主要运用EasyUI1.4.3的展示控件及

iOS项目架构文档

设计的项目架构主要引用MVVM+MVC架构,并以功能模块分级.以下为目录结构. 初级目录: 我们只需要关注SGZH文件夹下的目录,其他为Xcode管理的目录.可以看到此目录为项目初级目录,我们开发过程只需对初级目录内的文件进行操作,其主要划分为3大块: AppDelegate: AppDelegate是程序入口,程序启动和显示逻辑都定义在内部,主要可以让开发人员快速找到代理文件并了解程序从启动到显示过程,也可以快速进行一些初始化测试. Resource: 此目录主要存放一些项目资源文件,如项目切

大型项目架构搭建_高内聚、低耦合(1)

软件开发中的项目的架构的终极目标就六个字: 高内聚.低耦合. 架构搭建好了,后期可维护性才干提高,在这基础上,假设还想提高项目的高效性,就仅仅能从算法着手 假设项目中算法都已经做到极致了,还想提高项目的高效性,怎么办?(算法并不一定能处理高并发的问题) 就要用到中间件的技术了 以下我就从这三方面来搭建一个项目 假设我们有个这么需求 我公式和YC公式合作,开发一个项目.这个项目功能是用来測量东西的一个项目,我们公式在存储数据方面做得好,YC公司所以要和我们合作.要我们做一个对数据进行保存的容器,他

一种比较实用的iOS SDK项目架构

在SDK开发中,一般会需要经过几个流程,开发SDK,测试SDK,把SDK交付给使用人员,这些东西看似步骤多,过程繁琐,而且每修改一次SDK就需要重复一次上述的过程,增加了一些不必要的操作.当然,如果我们在SDK设计之初就有一个好的项目架构,就可以极大简化开发流程,提高开发效率,本文将带读者一步一步设计搭建一个个人认为比较好的SDK开发架构. 创建基本的工作空间 工作空间这个概念对于很多人并不陌生,平时使用得很多的CocoaPods里面其实就使用到了工作空间,具体一些原理在我的另外一篇博客. 打开