在AR中制作一个RPG风格指南针
个人觉得这个设计相比游戏更适合AR。首先在游戏中不如小地图直观,但现实中的用户对方向感则有更大的需求。其次,AR中满屏的图标会大大降低体验,而这种条状指南针设计简洁,占用屏幕空间小,有许多方面的优势。一下子找不到更好的示意图了,反正玩游戏的同学应该都知道说的是什么(后面写作标尺)。本文的实例,可以沿用上一篇文章设置好的AR场景进一步开发。之前的Canvas作为背景层渲染视频用,会被三维物体遮挡。所以需要在在Hierarchy中新建一个Screen Space - Overlay模式的Canvas,命名为MainCanvas,添加好标尺的图片素材。这里的具体设置,描述起来比较冗长,可以下载附件查看。
这里的重点介绍下"Unity世界方位"与"陀螺仪指向方位"的关系。对于Input.gyro.attitude官网的解释是这样的:
Returns the attitude (ie, orientation in space) of the device.
Unity世界中蓝色箭头(+Z)指向transform.rotation=(0,0,0,1) 。
真机屏幕朝天状态,Input.gyro.attitude=(0,0,0,1) 的方位是哪里?就是现实中的北面。当手机竖起来,这个值变为(0.7,0,0,0.7)。
再给标尺添加控制脚本。这里的Target指ARCamera,前文中我们给ARCamera绑定了陀螺仪,去获取它的+Y轴旋转,控制North/South/East/West四个字母在标尺上水平运动。当某个字母运动到框内( [N] ),就表示当前的朝向。
using UnityEngine;public class CompassManager : MonoBehaviour
{[SerializeField] private int space = 3; //控制字母间距[SerializeField] private Transform Target;[SerializeField] private RectTransform CompassRoot;[SerializeField] private RectTransform North;[SerializeField] private RectTransform South;[SerializeField] private RectTransform East;[SerializeField] private RectTransform West;private int Grade;private int Opposite;void Update(){Opposite = (int)Mathf.Abs(Target.eulerAngles.y);if (Opposite > 360){//if moreOpposite = Opposite % 360;//return to 0 }Grade = Opposite;if (Grade > 180){//opposite angleGrade = Grade - 360;}North.anchoredPosition = new Vector2(((CompassRoot.sizeDelta.x * 0.5f) - (Grade * 2) - (CompassRoot.sizeDelta.x * 0.5f)), 0) * space;South.anchoredPosition = new Vector2(((CompassRoot.sizeDelta.x * 0.5f) - Opposite * 2 + 360) - (CompassRoot.sizeDelta.x * 0.5f), 0) * space;East.anchoredPosition = new Vector2(((CompassRoot.sizeDelta.x * 0.5f) - Grade * 2 + 180) - (CompassRoot.sizeDelta.x * 0.5f), 0) * space;West.anchoredPosition = new Vector2(((CompassRoot.sizeDelta.x * 0.5f) - Opposite * 2 + 540) - (CompassRoot.sizeDelta.x * 0.5f), 0) * space;}
}
最终效果
在AR中制作一个RPG风格指南针相关推荐
- 动漫风html源码,CSS3动画制作一个卡通风格的404错误页面代码
CSS3动画制作一个卡通风格的404错误页面代码(有动画效果) html> Css 404错误页 .error-container { text-align: center; font-size ...
- android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果
如何在Android应用层中制作一个LED指示灯效果 发布时间:2020-12-08 16:12:59 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关如何在Android应用层中 ...
- ps快捷图标在哪个文件夹_在PS中制作一个下载文件夹的图标
在PS中制作一个下载文件夹的图标 出处:多特软件站 时间:2011-03-17 人气:1287我要提问我来说两句 核心提示:在这个教程里,我们将介绍到如何在PS中运用不同的形状和反射制作一个下载文 ...
- 如何从0开始在鸿蒙OS中制作一个APP!
点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 作者:若离链接:https://www.zhihu.com/question/420404 ...
- java类只读怎么办_如何在Java中制作一个只读类?
java类只读怎么办 The question is that "can we make a read-only class in Java?" 问题是"我们可以用Jav ...
- 如何在 Unity 中制作一个道具系统
原文:How to make a Power-Up System in Unity 作者:Kevin Small 译者:kmyhy 如果音速小子中没有金色戒指和电动鞋,超级马里奥中没有了蘑菇,或者吃豆 ...
- vue中既可以选择又可以手动输入的文本框类型_在PPT中制作一个胖乎乎的可爱圆环图...
您好,欢迎来到[爆炒Office],这里有原创的实用办公软件技巧. 概述 有的数据图是以精确的数据为基础制作而成,而有的数据图又是使用图形制作成的示意图.本文介绍使用弧形制作示意关系的圆环图,同时,通 ...
- Android笔记(十九)制作一个简易的指南针
一.获取方向的方法 Android 获取手机旋转的方向和角度是通过加速度传感器和地磁传感器共同计算得出的,这是 Android 目前推荐使用的方式.正常情况下,手机的头部如果是正北方向,那么它围绕Z轴 ...
- MFC中制作一个似命令行的输入框
在做一个MFC软件的时候有一个这样的需求,就是要有类似与AutoCad的命令输入框,如下图所示: 本着不重写已有功能的原则,在MFC中发掘了一圈,没发现有可用的现成控件,上网搜了一下,发现有人做过,但 ...
最新文章
- 基于脑电图的情绪识别BCI应用于DOC患者
- 《图解密码技术》分组密码(3) 密文分组链接CBC模式
- CODEVS-1758-维护数列-NOI2005-splay
- 阿里云centos mysql_阿里云ECS服务器CentOS7上安装MySql服务-阿里云开发者社区
- Java:ThreadPoolExecutor解析
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
- 发现个特别合胃口的仓鼠、小鱼和计数器代码
- App_Data 目录中的数据库位置指定了一个本地 SQL Server
- ORA-00904:quot;T1quot;.quot;AREA_IDquot; :标识符无效
- php 根目录怎么写,php – 如何重写根目录中的目录
- 2.5寸移动硬盘盒改装 驱动3.5寸台式机硬盘
- Crazy Number
- MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)
- 计算机word保存如何操作,如何保存WORD文档内容???急
- 万年历农历法定节假日数据查询工具
- 利用Win10自带的计算器把十六进制,八进制转换成十进制
- AFNetworking 支持cookies的解决方案
- 计算机图形学的功能需求,图形学课程设计要求 《计算机图形学》.doc
- linux升级Openssh到8.4
- qt获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址
热门文章
- 乐观锁与悲观锁的概念、实现方式、场景、优缺点?
- 已解决Python pandas.read_excel读取Excel文件报错
- 区块链宠物始祖CryptoKitties将登陆中国,莱茨狗网易星球害怕吗
- 一键重装Win10图文版教程
- 一、Flash Player的版本
- 为什么选择Simscape Multibody来仿真
- 用fft对信号进行频谱分析实验报告_如何对频谱或矢量信号分析仪进行远程编程?...
- 计算机四级 网络工程师 考过指南,2015计算机四级考试报考指南:考试简介
- Flink实时计算指标对数方案
- MATLAB R2018b学习笔记(3)