Unity利用CardBoardVR制作(二)一个简易的全景相册和视频
来源:互联网 发布:淘宝收藏的宝贝失效了 编辑:程序博客网 时间:2024/05/16 15:33
这次紧接着上一次的应用制作,我们来实现一个简易的VR应用——VR全景相册和全景视频的播放。
我们需要准备的素材:
1.Unity2017
2.带有陀螺仪的手机
3.纸盒眼镜
4.全景照片和视频。
5.一个法线向内的球。
还是根据上一次的方法,将平台转换为安卓,然后勾选VRSupported,然后SDK选择CardBoard。
一、导入法线向内的球。
将这个球拖到面板中,并把他的位置和Camera重合。
导入我们需要的资源(全景图片和视频)(如果mp4的视频导不进去,就先将平台切成windows,导进去后再切到安卓)
这个法线朝里的材质球目的就是为了摄像机在球内能看到球上的贴图。我们找一张图片放上去,就有下面的效果:
接下来写脚本去控制贴图的切换:
using System.Collections;using System.Collections.Generic;using UnityEngine; public class SphereGallery : MonoBehaviour{ public Texture[] texs; private Material mat;//自身材质 private float texLength; private int index;// Use this for initializationvoid Start () { texLength = texs.Length; mat = this.GetComponent<MeshRenderer>().material; index = 0; mat.mainTexture = texs[index]; RotateCam.changeNextTex += OnNextButtonClick; //把这个函数委托给相机上的脚本去执行//RotateCam是一会要新建的相机的脚本 控制射线 } void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); //按返回得时候退出程序 } } public void OnNextButtonClick()//点击切换图下一张图片 { index++; if (index >= texLength) { index = 0; } mat.mainTexture = texs[index]; } }
把这个脚本拖到球上,再把texture赋给这个脚本
然后建立一个Button用来切换到下一张图片,这个Button和之前准星的Canvas不是同一个,要新建一个Canvas,把他拖到Sphere下然后建立这个Button,同样也是在WorldSpace,并在这个Button上加一个碰撞用来射线选择。把这个Button拖到合适的位置。
我们的思路是,相机随着头部旋转,然后每帧都进行射线的选择,如果射线碰到了Button,那么等待1s,如果头部没有移走的话就表明选择执行图片切换。那么就在相机的脚本中执行委托,切换图片。
然后写相机的脚本RotateCam,发射射线选择,以及执行委托:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI; public class RotateCam : MonoBehaviour{ public delegate void changeNext(); //委托,修改球体图片 public static changeNext changeNextTex; public Button nextButton; //按键的引用 public Image img; //准心的引用 public float waitTime; //多久之后切换图片 // private float x, y; private float timeGo;// Use this for initializationvoid Start () { // x = y = 0f;}// Update is called once per framevoid Update () { /* 方便PC测试 x += Input.GetAxis("Mouse X"); y += Input.GetAxis("Mouse Y"); this.transform.rotation = Quaternion.Euler(-y, x, 0); */ //射线检测 Ray ray = new Ray(this.transform.position, this.transform.forward); RaycastHit hitinfo; //碰撞到UI的时候 if (Physics.Raycast(ray, out hitinfo, 100f,1<<LayerMask.NameToLayer("UI"))) { if (hitinfo.collider != null) { if (hitinfo.collider.gameObject == nextButton.gameObject) { nextButton.image.color = Color.yellow; //切换Button的颜色 表明选到了 timeGo += Time.deltaTime; if (timeGo >= waitTime) { changeNextTex(); //执行这个委托 timeGo = 0f; } } } } else { timeGo = 0f; nextButton.image.color = Color.white; } img.fillAmount = 1 - timeGo / waitTime;//准星的完整度 }}
把这个脚本拖到MainCamera上,然后拖入Button和Image(准星),并设置WaitTime
运行效果是这样:
切换后
全景相册基本就是这样。接下来实现全景视频:
全景视频也很简单,给法线向内的球体上加一个VideoPlayer脚本,然后把我们的素材拖到Clip上就好了。
下面是运行结果:
本文内容部分参考自Think加速想象力出版的《AR与VR开发实战》教程,更多学习资料也请关注www.arvrthink.com。
- Unity利用CardBoardVR制作(二)一个简易的全景相册和视频
- 用Unity2017做一个简易的CardBoardVR应用
- 制作一个简易的相册用js
- openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频
- 基于Unity的VR全景视频(一)
- Unity学习之全景球的制作
- googlevr for unity 快速制作全景视频播放器
- 制作 JS 广告的简易入门(二)利用 CSS3 技术制作广告
- (非全景图)神奇的全景视频360制作教程
- Unity中利用NGUI制作简易字体
- Unity 贪吃蛇2D简易制作(二)
- unityVR全景视频制作
- Unity编程笔录--实现360全景视频和VR视频
- 用UIPagecontrol和UIScroller制作简易的相册(MRC状态下)
- Unity学习之全景球的制作Part2
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- 马拦过河卒
- 软件
- Docker基础教程(2)简介
- winfrom记录全局错误
- HDu 1166 敌兵布阵(树状数组)
- Unity利用CardBoardVR制作(二)一个简易的全景相册和视频
- C#:WiFi 搭建与共享
- poj 1061 小白算法练习 数论 扩展欧几里得 青蛙的约会
- java中error错误和Exception错误
- java 打印菱形算法
- vs2017 cshtml文件打开文字不显示语法颜色,都是黑色问题的解决
- VS编译时MSB8012 的问题解决
- ReentrantLock类和Condition类的使用
- 笔记——最长上升子序列(LIS)