- 这是 交互设计 的第 4篇文章 -- 读完本文,大概需要您 10分钟的时间 -

本文为《iOS人机交互指南》的一部分,由黄方闻翻译,转载请注明出处。受公众号限制,无法跳转第三方网页为了更好的体验,欢迎访问http://hfw.design阅读查看,点击查看原文可跳转。

原文地址https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/augmented-reality/

通过增强现实(AR)技术,让应用程序可提供身临其境,引人入胜的体验,从而将虚拟对象与现实世界无缝融合。你的应用程序通过调用设备的摄像头,让屏幕实时显示现实世界,同时,在现实世界上叠加三维虚拟对象,给用户一种这些对象真实存在的错觉。根据你应用程序所提供的功能,用户可以旋转设备以从不同角度去探索对象,使用手势和动作与其进行交互,甚至可以加入他人进行多用户的AR体验。有关AR的开发指南,详见ARKit。仅在支持AR的设备上提供AR功能。如果你的应用程序的主要功能是AR,请确保你的应用程序仅在那些支持ARKit的设备上运行。如果AR只是你应用程序的某个特定功能,或者只是可选项,那么当用户在不支持ARKit的设备上使用你应用程序时,无需向用户提示错误信息,要做到这一点,只需要避免在不支持ARKit的设备上提供这些功能即可。相关的开发指南,详见支持设备和用户权限。创造引人入胜的、舒适的体验

让用户可以全屏使用。尽可能多的在屏幕上显示真实世界和你应用程序的虚拟对象的内容。避免在屏幕上添加多余的控件和信息导致屏幕中的内容显得混乱,从而减少用户身临其境的感觉。

让虚拟对象尽可能的真实。设计具有逼真纹理和细节的3D对象,使其放在真实世界中看起来就像真实存在的。通过ARKit提供的信息,你可以正确地缩放对象并将其定位在检测到的真实世界上,并反映出真实的环境光效果,让对象产生真实的投影,并能随着相机位置的变化而同步变化。为了保证对象的真实性,请确保你的应用程序的刷新率在每秒60次以上来避免对象出现跳跃或闪烁。

考虑虚拟对象如何在真实环境中显示。ARKit中的反射是基于相机捕获的环境的近似值。为了保持AR的真实感,请选择较小或者粗糙的反射面,来减少环境的影响。

使用声音和触觉来增强沉浸式体验。声音效果或者碰撞感是确认虚拟对象与真实的物理表面或其他虚拟对象接触的好办法。背景音乐还可以让用户更好的沉浸在这个虚拟世界中。相关指南,详见声音和触觉。

尽可能少的使用文本。仅显示那些用户使用你应用程序所必须要显示的信息。

如果必须要添加信息或控件,请确保其在屏幕上的展示。内容固定在屏幕上的某个位置在虚拟世界中不怎么常见。但用户会相对容易比较注意到这些内容,因为当用户移动设备时,屏幕上其他AR内容会移动,而这些内容相对固定。

当需要设置固定的操作控件时请使用间接控件(Indirect controls)。间接控件不是虚拟环境的一部分,而是固定在屏幕上的2D控件。如果用户总是需要用到该控件,请使用间接控件,这样用户无需调整设备便可随时触控到。同时,请考虑将间接控件设计成半透明样式,以免遮挡控件下方的内容。例如“测距仪”应用通过混合使用半透明的间接控件和不透明的AR控件来帮助用户测量真实世界对象的距离。

预期用户会在各种现实环境中使用你的应用程序。用户可能在一个没有足够移动空间或者没有足够大的平坦的表面的环境下使用你的应用程序。你应该在用户使用前清楚的告知用户使用需求和建议,以帮助他们了解真实环境对AR体验的影响。你还可以考虑针对不同的环境提供不同的功能。

请注意用户的舒适度。长时间的手持设备并保持一定距离或角度可能会造成用户的疲劳。为了避免产生疲劳,你可以考虑将虚拟对象放置在一个合适的位置以减少用户需要移动设备去靠近的必要,在游戏中,可以考虑将关卡设置的短一些,或者在游戏中加入短暂的休息时间。

如果你的应用鼓励用户移动设备(如体感),请逐步引入这些操作。例如,你可能不会希望用户在刚进入你的AR游戏就需要躲避射过来的虚拟炮弹。给用户一些时间适应你应用程序中的AR体验,然后在逐步的引导用户去尝试移动。

注意用户的人身安全。当用户沉浸在AR体验中时,可能不会有足够的精力去注意周边的真实环境,当进行一些相对激烈的动作时可能会产生危险。请考虑你的应用能被安全的使用,例如,在游戏中避免让用户有过大幅度或突然的动作行为。

使用辅助引导

在用户开始使用你应用程序中的AR功能之前,需要移动设备来让ARKit来评估周围环境以及检测物理表面。在iOS13及更高的版本中,你可以使用内置辅助引导来告知用户在初始化设置中需要做什么并提供相应的反馈。当AR体验被打断后,你还可以使用该辅助引导来帮助用户重新初始化AR设置(重新定位),比如当用户切换到另一个应用程序后再切换回时。有关重新定位的指南,详见中断处理;更多开发指南,详见ARCoachingOverlayView。

当用户在辅助引导状态下,隐藏其他不必要的UI内容。在默认情况下,当需要初始化或重新定位设置时,辅助引导会自动出现,此时你应该隐藏其他不相关的UI内容,以帮助用户将注意力集中在辅助引导上。

如有必要,可自定义辅助引导。尽管你可以使用系统内置的辅助引导帮助用户完成特定的设置,如检测水平面或垂直面,但你可能需要更多的信息或者使用其他 视觉样式。要自定义辅助引导,请基于系统内置的辅助引导为参考。

放置对象

告知用户如何定位表面并放置对象。你可以使用系统内置的辅助引导来帮助用户找到要放置对象的水平面或垂直面。当ARKit检测到一个表面后,你可以通过自定义的视觉效果来告知用户是否可以放置对象。你可以通过将引导检测器与检测到的表平面对齐来帮助用户更好的了解他们放置的对象在真实环境中的呈现。

当用户放置了一个对象,请立即将该对象整合到AR环境中。尽管在表面检测期间,精度会在很短时间内逐渐提高,但是最好避免在用户放置对象后还等待更准确的数据。当用户放置了对象后,应使用当前可用信息立即作出响应,然后,在完成表面检测后,如有必要,可以微调对象的位置。例如,如果用户将对象放置在检测到的表面之外,可以将对象移回表面上。有关如何精准定位对象的开发指南,详见ARTrackedRaycast。

引导用户找到屏幕外的虚拟对象。有时候,用户会很难找到一个屏幕外的虚拟对象,在这种情况下,你可以通过声音或视觉引导来帮助用户找到该对象。例如,假设某个虚拟对象在屏幕外的左侧,你可以在屏幕左侧增加一个视觉引导,来提示用户将摄像头指向左侧。

避免将对象和已检测到的表面精确对齐。在AR中,表面边界是近似值,可能会随着用户周围环境以及进一步的分析而发生变化。

对表面进行分类并告知用户可放置的类别。例如,仅允许用户在分类为“地板”的表面上放置虚拟家具,或者可以将飞机归类为“桌子”以放置虚拟游戏板。

设计直观、令人愉悦的对象交互

尽可能的让用户直接和虚拟对象进行交互。通过直接触控屏幕上的3D虚拟对象,而不是通过屏幕上的间接控件进行交互,不仅更直观,还能让用户更有沉浸感。但是,当用户是在到处走动的场景下使用你的应用程序,那么使用间接控件可能更好。

让用户可以使用符合预期的标准化的手势直接与对象进行交互。例如,应支持用于移动对象的单指拖动手势和用于旋转对象的双指旋转手势。相关指南,详见手势。

请保持交互的简单。本质上,触控手势是二维交互,但AR及现实世界是三维的。你可以考虑通过以下的方式来简化用户与虚拟对象的交互。

(左图文字:限制对象仅在平面上移动;右图文字:限制对象仅能围绕一个轴旋转)

在合理的范围内让虚拟对象对可能的交互手势作出响应。用户可能比较难以精确触控到某个小的、细的或者有一定距离的对象,当你的应用程序检测到某个手势在这个可交互对象附近时,通常最好假设用户想要操作该对象。

请思考在你的应用中支持用户对对象进行缩放是否有意义。例如,如果你的应用是让用户探索一个虚拟的环境,那么支持对象的缩放可能很有用,因为你的应用不是代表的真实世界。但另一方面,假设你的应用是帮助用户确定是否要购买一个家具,那么允许用户对椅子进行缩放,并不能帮用户更好的了解这个椅子放在房间中的效果。

提示:无论你的应用程序是做什么用的,都不要将缩放对象当成调整对象距离的一种方式。如果你试图将远处的对象放大来让其看起来更近一些,实际可能只是让那个对象变大了,但跟你的距离并没有发生变化。

请留意可能出现的手势冲突。例如,双指捏合的手势和双指旋转的手势很相似。如果你想同时支持这两种手势,请确保你应用程序能准确识别并测试无误。

在你应用的AR环境中保持虚拟控件和周围环境有一致的物理属性。用户可能并不期望一个对象在粗糙或者不平坦的表面移动,但他们会期望这个对象在运动过程中是可见的。移动时应将对象附着在真实世界的表面,并且避免用户在调整大小、旋转以及移动等操作时,对象跳跃或闪烁的出现。

探索更多引人入胜的交互方式。手势并不是用户与AR中虚拟对象交互的唯一方式。你的应用还可以使用其他的要素,如动作或相似度,来使内容栩栩如生。例如,一个游戏角色可以在朝另一个人走过去的时候转头看他。

http://hfw.design

是我新上线的一个体验设计相关的网站,内容会与本公众号同步更新,欢迎访问。

你点的每个在看,我都认真当成了喜欢

ios 旋转屏幕试图切换_iOS增强现实应用(AR)设计指南(上)相关推荐

  1. ios 旋转屏幕试图切换_iOS屏幕旋转及其基本适配方法

    屏幕旋转示例.jpeg 前段时间抽空总结了一下iOS视频播放的基本用法,发现这其中还有一个我们无法绕过的问题,那就是播放界面的旋转与适配.的确,视频播放与游戏类型的App经常会遇到这个的问题.由于至今 ...

  2. ios 旋转屏幕试图切换_iOS屏幕横竖屏切换

    iOS屏幕横竖屏切换 胡东东博客 • 2020 年 10 月 25 日 搜了网上的教程是真的乱,废话不多说,这里从启动到具体的VC,横竖屏切换完美搞定. 如果你的app只需要支持一个方向,那么不需要看 ...

  3. ios 旋转屏幕试图切换_iOS指定页面屏幕旋转,手动旋转(某app实现功能全过程)...

    背景: app内有一个双页的界面,然后某天运营说如果其中一页能支持横屏的话,对接的媒体就能给一整块屏幕,然后需求就这样下来了(双页:一页支持横屏效果,另一页不支持). 接下来就是查文档时间了,Duan ...

  4. ios 旋转屏幕试图切换_TCL·XESS 旋转智屏 A200Pro 评测:方向一换,体验大不相同...

    点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事! 对于电视,我们大多数人的概念也许是「横在客厅或者卧室的一块屏幕」.它早已经是每个人家庭装修的一部分,但也因为就一直躺 ...

  5. ios 旋转屏幕试图切换_总结iOS App开发中控制屏幕旋转的几种方式

    在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewControlle ...

  6. iphone横竖屏切换,旋转屏幕

    http://www.cocoachina.com/bbs/simple/?t124992.html 1.用UINavigationController处理2个以上ViewController跳转时, ...

  7. iOS手动旋转屏幕、自动旋转屏幕

    有的时候,在iOS下需要实现手动旋转屏幕与自动旋转屏幕的自由切换.比如,在手机竖屏时希望点击按钮使页面横屏,然后当手机屏幕方向发生变化时,页面能正常的契合手机旋转的方向. 1.视图方向旋转:通过vie ...

  8. 解决iOS设备屏幕切换时页面造成的问题

    环境:IOS6~7 Safari 问题:iOS设备屏幕切换时可能会造成屏幕变大,出现左右间距等问题 解决方法: 头部加入 <meta name = "viewport" co ...

  9. [iOS]监控屏幕旋转

    [iOS]监控屏幕旋转 - (void)viewDidLoad {[super viewDidLoad];//设备旋转通知[[UIDevice currentDevice] beginGenerati ...

最新文章

  1. 字符集 ISO-8859-1(1)
  2. Linux系统环境查看已经登录用户信息及管理
  3. mysql数据库运行远程用户访问不了_MySQL数据库远程访问权限如何打开(两种方法)...
  4. MySQL优化系列_常见的sql使用-Mysql中的实践(Mysql优化系列8)
  5. 林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!...
  6. 芯片数据分析步骤5 过滤探针
  7. html诗词赏析网页制作,网页课程设计_诗词鉴赏.pdf
  8. 网络安全笔记5——数字签名
  9. 计算机交叉专业考研方向,与理工科交叉的计算机专业考研方向有哪些?
  10. codeforces 1538G Gift Set
  11. 【06月03日】预分红股息率最高排名
  12. pythonweb图书管理系统_部署图书管理系统项目
  13. cl.3hh.win/index.php,windows 系统下 安装 gitblit 教程
  14. Vue使用Router报错:ncaught ReferenceError: VueRouter is not defined
  15. Kaggle(Gun Violence Data)—美国枪支暴力事件分析(1)和(2)
  16. 【从零开始JavaEE课设】《影院系统》(一) 需求分析 数据库设计 后端model类
  17. 博客写作模板——自用
  18. 一刀工具箱 - 网站权重查询工具
  19. VOL.bat 内容
  20. AutoCAD2007 17.0.54.110 中文版

热门文章

  1. 怎么让wegame适应屏幕大小_iOS的五大设计原则:统一化和适应化原则
  2. android 自定义spnner弹出框,PopupWindow,ListView实现自定义Spinner
  3. 家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置
  4. Spring MVC访问不到静态资源
  5. php编译称opcode文件,PHP源码保护和性能加速
  6. Linux内核参数传递Tag
  7. java 读取图片给 matlab_如何将MATLAB图像处理程序转换为java?
  8. 解决IDL检索COM类工厂中CLSID为{ }组件注册失败
  9. 【转】ABP源码分析五:ABP初始化全过程
  10. 【转】SQL中where, group by, having的用法和区别