洪流学堂,让你快人几步。你好,我是郑洪智。

洪流学堂公众号回复捉妖,可以获取本教程的源码工程


大智:“小新,你小子最近是不是谈恋爱了,怎么天天往外跑?”

小新:“嘿嘿”

大智:“嘿嘿你个鬼啊,从实招来,是不是要请我吃饭了?”

小新:“最近有一款非常火的AR游戏,叫《一起来捉妖》,你玩了没?”

大智:“听说过,不过你看我最近忙的,哪有时间玩。什么样的游戏?”

小新:“和之前的Pokémon GO有点像,是用AR捉妖的游戏。”

大智:“明白了,以后这种游戏应该会越来越多。”

小新:“我好想学一下呀,这个游戏可以用Unity开发么?”

大智:“当然可以了,我问了腾讯游戏的童鞋,这款游戏也确实是用Unity开发的呢。”

小新:“那今天下午,你的时间就被我买断了,嘿嘿。”

大智:“好吧好吧,请我吃晚饭的权力也送给你了!”

小新:“忍了。。。”

利用陀螺仪实现AR相机

大智玩了一会《一起来捉妖》,对小新说:“这款游戏里面的AR实际上是利用陀螺仪实现的3自由度的AR,实现起来也比较简单,今天我们来一起搞一波。”

小新:“陀螺仪我知道,3自由度是什么意思?”

大智:“自由度DOF,英文是degree of freedom,3自由度一般是指可以在三个轴进行旋转,但是不能识别平移。所以现在很多VR、AR的技术都在攻克6DOF的技术。不过3自由度的AR相机利用陀螺仪就可以实现。”

基本的实现思路是这样的:

  1. 使用陀螺仪来控制相机的旋转
  2. 背景使用后置摄像头的图像,跟随相机移动
  3. 3D模型保持世界坐标不动

1. 陀螺仪控制相机

陀螺仪控制相机涉及到以下几个知识点:
1、 如何在Unity中获取陀螺仪的数据
2、如何用陀螺仪的数据来控制相机旋转

在Unity中使用陀螺仪

在Unity中使用陀螺仪需要用到Input类中的gyro

核心代码是:

// 从Input中获取陀螺仪对象
Gyroscope gyro = Input.gyro;
// 开启陀螺仪
gyro.enabled = true;
// 获取陀螺仪的态势数据,返回值是一个四元数
Debug.Log(gyro.attitude);

既然陀螺仪的态势数据是一个四元数,我们想当然可以使用这个四元数来直接和相机的旋转做运算,比如:

void Update()
{transform.rotation = gyro.attitude;
}

由于我们在PC上开发,陀螺仪是没有数据的,需要我们发布到真机进行测试,或者使用Unity Remote(https://docs.unity3d.com/Manual/UnityRemote5.html)

由于Unity Remote在Android端只能从Google Play安装,需要翻墙,所以我传了一个安装包到百度云。
链接:https://pan.baidu.com/s/1VxNbRl6yF0F4URcHRM6b7A
提取码:vm62

优化在AR场景下的操作

小新:“我测试了一下,发现不太对啊,说不出来为什么。”

大智:“这是因为坐标系的问题。陀螺仪的数据使用的是右手坐标系,而Unity是左手坐标系,所以需要转换一下。”

// 将旋转从右手坐标系转换到左手坐标系
private static Quaternion ConvertRotation(Quaternion q)
{return new Quaternion(q.x, q.y, -q.z, -q.w);
}

大智:“还有一个问题,就是通常情况下,使用AR时,手机是竖着的。但是由于陀螺仪的态势为0时,对应的是手机水平放置,所以如果想要手机是竖着时对应态势为0点,需要将相机沿着x轴旋转90度。”

可以使用如下代码:

transform.rotation = Quaternion.Euler(90, 0, 0) * ConvertRotation(gyro.attitude);
// 当然有些代码中会使用Quaternion.Euler(90, 0, 90),这并不会影响功能,只是影响左右旋转的初始位置

完整代码是:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GyroCameraController : MonoBehaviour
{private Gyroscope gyro;// 相机初始的态势Quaternion cameraBase = Quaternion.Euler(90, 0, 0);void Start(){// 从Input中获取陀螺仪对象gyro = Input.gyro;// 开启陀螺仪gyro.enabled = true;// 获取陀螺仪的态势数据Debug.Log(gyro.attitude);}void Update(){transform.rotation = cameraBase * ConvertRotation(gyro.attitude);}// 将旋转从右手坐标系转换到左手坐标系private static Quaternion ConvertRotation(Quaternion q){return new Quaternion(q.x, q.y, -q.z, -q.w);}
}

总结

大智:“今天学习了用Unity开发《一起来捉妖》的第一部分,那就是用陀螺仪实现一种伪AR的技术。当然了,这个AR技术还差一个非常重要的环节就是显示摄像头的功能,下次我们再一起攻克这个难题。”

洪流学堂公众号回复捉妖,可以获取本教程的源码工程

如果你想要视频教程,请点击文末右下角的在看让我知道哦,达到一定人数后就会专门为你录制!

今日思考题

大智:“动手将今天的工程部署到真机上体验一下。”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”

推荐阅读

  • Unity 2019.1 中文更新日志速览版
  • UnityWebRequest详解
  • Unity中编码Encoding脱坑指南
  • Unity中的Git最佳实践
  • Unity2019更新规划速览,将有官方的可视化编程!
  • Unity运行时更新带来了什么?
  • Unity2018.3新功能 | Prefab嵌套和变体
  • Unity3d中的百度语音识别及语音合成

《大话Unity2019》,大智带小新学Unity2019的有趣经历,让你学Unity更简单。

Unity开发《一起来捉妖》教程 | 1.陀螺仪控制相机相关推荐

  1. 白鹭引擎开发飞机大战详尽教程(四控制飞机移动)

    简介    本教程是以飞机大战小游戏作为白鹭的入门,详细的按笔者的开发思路,一步步讲解游戏的开发步骤,内容基本涵盖了白鹭引擎提供的能力,包括界面可视化开发.事件派发.粒子播放(爆炸效果).龙骨帧动画. ...

  2. Unity开发《一起来捉妖》教程 | 4.抛掷封妖灵珠

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,今天咱们来开发封妖灵珠?" 大智:"好啊,你觉得实现封妖灵珠 ...

  3. Unity开发《一起来捉妖》教程 | 3.随机妖怪位置及旋转提示

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,我找了个小精灵的模型,嘿嘿,不过我经常运行的时候找不到模型在哪,怎么办?&quo ...

  4. Unity开发《一起来捉妖》教程 | 2.用摄像头图像做背景

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"我们接下来是不是需要将显示融合到屏幕上,才能称得上是AR呢?" 大智:&qu ...

  5. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  6. unity课设小游戏_【Unity3D开发小游戏】《跑酷小游戏》Unity开发教程

    一.前言 最近跑酷游戏比较流行,开发教程也很多,但是大部分都是不太详细,这篇文章就带着大家一步一步开发出来一个跑酷类的游戏,教程比较基础,适合大部分Unity开发的初学者. 还有就是,此专栏已经开通收 ...

  7. Unity VR开发VRTK中文图文教程大全-Chinar出品定期维护更新

    Chinar blog :www.chinar.xin Unity VR开发插件 VRTK 教程大全 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无 ...

  8. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(一)准备工作

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(二)Wwise项目 [游戏音效]Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity 前言 Unity有自己的 ...

  9. 【游戏音效】Unity集成Wwise并进行开发的全流程教程(二)Wwise项目

    集成教程: [游戏音效]Unity集成Wwise并进行开发的全流程教程(一)准备工作 [游戏音效]Unity集成Wwise并进行开发的全流程教程(三)脚本接入Unity 前言 这一篇章大致讲一下Wwi ...

最新文章

  1. 最新图神经网络论文笔记汇总(附pdf下载)
  2. spark之5:配置文件
  3. python3类的继承详解_python3 多重继承机制
  4. 华为云3大体系化防护实践,保障金融业云上数据安全
  5. 滴滴回应上班高峰期大范围崩溃 :系统异常 订单差额部分统一退还
  6. 案例精解:BGP路由黑洞
  7. (转)OO设计初次见面
  8. 广搜最短路径变形,(POJ3414)
  9. cpc卡内计费信息异常包括_抖音信息流广告投放收费标准是什么?抖音发一个广告多少钱?...
  10. 事务屏幕创建tcode_数据库并发事务存在的问题(脏读、不可重复读、幻读等)...
  11. android calendar控件,Android Calendar自定义日历控件
  12. android连接airprint打印机,苹果让无线打印更加便捷,安卓已羡慕
  13. Linux怎么复制文件到其他文件夹
  14. 怎样用计算机制作思维导图,Win电脑快速制作思维导图的方案一
  15. Linux两主机之间快速传输大量小文件
  16. 【Unity3D】IK动画
  17. 千万 PV,百万PV什么意思?
  18. 必知C++算法之排列组合基本操作
  19. 关于微信小程序开发个人总结
  20. Jmeter学习笔记

热门文章

  1. 2008年3月移动开发Webcast预告
  2. 实现删除商品信息功能
  3. Java读取文件中的arraylist_java – 从文件中读取ArrayList作为对象?
  4. centos7安装详细图解_开封温包规格,电热执行器安装详细图解
  5. android studio app显示红叉_发现这个 APP 后,感觉可以放弃桌面时钟了
  6. 安卓bmi项目_搭载安卓系统的智能健康一体机:上禾SH-V20
  7. 促销海报模板|经典蓝的带着「节日促销」来搞事情了!
  8. 网页排版规则:你需要知道的
  9. galaxy+tab+查看android+版本,三星第一代Galaxy Tab将更新至安卓4.1.2版本
  10. 企业文化用品展示网页的开发