unity3d vr 功能实现_unity 3d vr - CSDN
  • Unity3D+VR实现

    千次阅读 2019-04-26 12:15:26
    针对CardBoard一类的眼镜用Unity3D开发VR内容。 1、创建VRCamera:使用Dive插件,从DiveUnityDemo提取摄像机和有关的脚本并export出来。 2、对象选择:视选模式:从眼睛发射一条射线,选择看到的对象。手柄模式:...

    针对CardBoard一类的眼镜用Unity3D开发VR内容。

    1、创建VRCamera:
    使用Dive插件,从DiveUnityDemo提取摄像机和有关的脚本并export出来。

    2、对象选择:
    视选模式:从眼睛发射一条射线,选择看到的对象。
    手柄模式:蓝牙手柄上的按键来选择对象。

    3、视选模式的实现:
    视选:使用Raycast检测,RaycastHit返回碰撞到的物体信息。
    private RaycastHit rayHitInfo;
    public Transform goPoint;//为射线发出点,是两个摄像机中间的一个点。
    if (Physics.Raycast(goPoint.position, goPoint.forward, out rayHitInfo))
    {
    Debug.Log("RaySelect: " + rayHitInfo.collider.gameObject.name);
    }
    焦点:新建一个Plane,和Point放在同一个局部坐标系下,然后调整transform,使其放到视野中间,去选Mesh collider。
    给焦点开发动画效果:Texture循环播放。
    给视选设置一个停留时间:不是说看到某个物体就触发,而是盯着某个物体一定时间才触发。

    4、手柄模式的实现:
    检测手柄是否存在:
    if ((Input.GetJoystickNames().Length > 0) && (!Input.GetJoystickNames()[0].Equals("")))
    {
    //手柄存在
    }
    void Start ()
    {
    InvokeRepeating("detect", 0, 5);//每隔5s调用一次detect函数,做检测手柄动作。
    }
    检测手柄按键:
    if (Input.GetKeyDown(KeyCode.Joystick1Button0))
    {
    //手柄键1
    }
    else if (Input.GetKeyDown(KeyCode.Joystick1Button1))
    {
    //手柄键2
    }
    //以此类推
    设置并检测手柄摇杆:
    设置摇杆通过在input里面增加axis的手柄,4个方向,要新增设置四个。
    检测摇杆:
    if (Input.GetAxis("AxisName"))
    {
    //摇杆的一个方向
    }

    更多unity2018的功能介绍请到paws3d爪爪学院查找。

    展开全文
  • 简介: unity3D游戏已经风靡全球,在游戏界火爆的不行,对于虚拟现实设备支持的非常好,因此具备unity开发的能力就能够驾驭任何一款头盔。本文针对大朋E2头盔的UNITY环境搭建谈谈自己的经验,记得当时买到头盔后,...
    
    

    简介: unity3D游戏已经风靡全球,在游戏界火爆的不行,对于虚拟现实设备支持的非常好,因此具备unity开发的能力就能够驾驭任何一款头盔。本文针对大朋E2头盔的UNITY环境搭建谈谈自己的经验,记得当时买到头盔后,关于这项工作折腾了很久,现在无偿奉献给和我当初同样苦恼的初学者。

    大朋头盔无非就是一个特殊的摄像头,在UNITY场景中和普通的camera没什么两样,只是在使用大朋之前需要做些驱动方面的工作。

    长话短说,切入正题:

    第一部:正确安装好大朋驱动

    我的电脑是WIN7 X64位操作系统,拿到大朋E2之后首先安装最新版的大朋助手,确保驱动安装成功,然后把大朋模式选择上,对于想玩DK2的朋友们就得暂时忍忍了,因为我要用到大朋官网提供的unity开发包,只支持大朋模式,毕竟DK2是美国佬的,大朋是自己的技术,因此支持国产好了,重要的事项再重复下:安装大朋助手,选择大朋模式。

    第二步:卸载大朋助手,安装oculus 0.6.exe

           安装oculu 0.6很关键,首先得卸载大朋助手,可能还有其他oculus的版本,但是这个版本至少很稳定,我一直使用,安装好了之后就离成功只有一部之遥了。

    第三步:下载大朋官网提供的Deepoon Unity Plugin

            我使用的是大朋原来发布的,但是发现不能直接应用,经过一番修改,最终实现了漫游及观看的功能,我把调试好项目生成包,名称为DapoonUnityDemo.unitypackage,下载后把文件导入项目工程中就可以使用。使用之前不要忘记勾选对虚拟设备支持选项。

    DapoonUnityDemo.unitypackage下载地址:http://download.csdn.net/detail/moonhot537/9524871

    ----------------------------------------------------------------

    欢迎大家转载我的文章。

    转载请注明:转自月亮之火

    http://blog.csdn.net/moonhot537

    欢迎继续关注我的博客

     

    展开全文
  • Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能
    Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下:
    1. 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,代码如下:
      using UnityEngine;
      using System.Collections;
      
      public class GyroController : MonoBehaviour
      {
          // Fields
          private readonly Quaternion baseIdentity = Quaternion.Euler(90f, 0f, 0f);
          private Quaternion baseOrientation = Quaternion.Euler(90f, 0f, 0f);
          private Quaternion baseOrientationRotationFix = Quaternion.identity;
          private Quaternion calibration = Quaternion.identity;
          private Quaternion cameraBase = Quaternion.identity;
          private bool debug = true;
          public static bool gyroAvaiable;
          private bool gyroEnabled = true;
          private Quaternion gyroInitialRotation;
          public static bool gyroOff;
          private Quaternion initialRotation;
          private readonly Quaternion landscapeLeft = Quaternion.Euler(0f, 0f, -90f);
          private readonly Quaternion landscapeRight = Quaternion.Euler(0f, 0f, 90f);
          private const float lowPassFilterFactor = 0.1f;
          private Quaternion offsetRotation;
          private Quaternion referanceRotation = Quaternion.identity;
          private readonly Quaternion upsideDown = Quaternion.Euler(0f, 0f, 180f);
      
          // Methods
          private void AttachGyro()
          {
              this.gyroEnabled = true;
              this.ResetBaseOrientation();
              this.UpdateCalibration(true);
              this.UpdateCameraBaseRotation(true);
              this.RecalculateReferenceRotation();
          }
      
          private void Awake()
          {
              gyroAvaiable = SystemInfo.supportsGyroscope;
          }
      
          private static Quaternion ConvertRotation(Quaternion q)
          {
              return new Quaternion(q.x, q.y, -q.z, -q.w);
          }
      
          private void DetachGyro()
          {
              this.gyroEnabled = false;
          }
      
          private Quaternion GetRotFix()
          {
              return Quaternion.identity;
          }
      
          private void RecalculateReferenceRotation()
          {
              this.referanceRotation = Quaternion.Inverse(this.baseOrientation) * Quaternion.Inverse(this.calibration);
          }
      
          private void ResetBaseOrientation()
          {
              this.baseOrientationRotationFix = this.GetRotFix();
              this.baseOrientation = this.baseOrientationRotationFix * this.baseIdentity;
          }
      
          protected void Start()
          {
      
                  Input.gyro.enabled = true;
                  base.enabled = true;
              this.AttachGyro();
              this.initialRotation = base.transform.localRotation;
              this.gyroInitialRotation = Input.gyro.attitude;
          }
      
          private void Update()
          {
              gyroOff = PlayerPrefs.GetInt("gyro-off") == 1;
              if (this.gyroEnabled )
              {
                  base.transform.localRotation = Quaternion.Slerp(base.transform.localRotation, this.cameraBase * (ConvertRotation(this.referanceRotation * Input.gyro.attitude) * this.GetRotFix()), 0.5f);//0.1f
              }
          }
      
          private void UpdateCalibration(bool onlyHorizontal)
          {
              if (onlyHorizontal)
              {
                  Vector3 toDirection = (Vector3) (Input.gyro.attitude * -Vector3.forward);
                  toDirection.z = 0f;
                  if (toDirection == Vector3.zero)
                  {
                      this.calibration = Quaternion.identity;
                  }
                  else
                  {
                      this.calibration = Quaternion.FromToRotation((Vector3) (this.baseOrientationRotationFix * Vector3.up), toDirection);
                  }
              }
              else
              {
                  this.calibration = Input.gyro.attitude;
              }
          }
      
          private void UpdateCameraBaseRotation(bool onlyHorizontal)
          {
              if (onlyHorizontal)
              {
                  Vector3 forward = base.transform.forward;
                  forward.y = 0f;
                  if (forward == Vector3.zero)
                  {
                      this.cameraBase = Quaternion.identity;
                  }
                  else
                  {
                      this.cameraBase = Quaternion.FromToRotation(Vector3.forward, forward);
                  }
              }
              else
              {
                  this.cameraBase = base.transform.rotation;
              }
          }
      }
    2. 在相机MainCamera下创建一个新的Camera相机,并改变两个相机的Viewport Rect属性,以将屏幕均分,如图:
    3. 在场景中创建一个Cube,效果如图:
    4. 保存场景,打包成apk,安装到手机即可。大笑大笑大笑
    展开全文
  • 基于vlc的unity3d vr视频播放器开发,简述


    需求:

    项目需要在vr设备(htc vive、pico、小π等vr设备)中显示在线视频和播放本地视频的功能。


    茶话:

    当前做的比较好有htc vive的ViveCinema,场景做比较漂亮。他使用的是FFmpeg+SDL+GLEW。FFmpeg作为视频解析的库在业内是非常有名,视频的解析是从头实现的,大部分其他开源项目都是基于它来实现解复用、解析等操作。SDL是一套开放源代码的跨平台多媒体开发库,另外在游戏方面使用的人是比较多的。GLEW不用说,opengl wrapper。但是ViveCinema仅支持本地视频,那么在线视频呢?


    unity3d是比较轻量级的游戏引擎,在手机3d游戏市场可谓如日中天。其灯光渲染效果可能没有ue4等pc游戏引擎好,但是其操作的简易性,开发效率高等特点,得到了大量vr设备厂商和开发人员的青睐。对于C++程序来说,pc端ue4是最好的选择,C#的内存方面的操作实在蹩脚,p/invoke也是非常蛋疼的。无奈vr设备厂商提供unity3d的包,项目采用unity3d开发。

    确定使用unity3d开发,那么问题来了,怎么加载视频呢?


    首先需要了解vlc的结构,在此花了大量的时间......


    思路是:

    1、去vlc官网下载vlc库(http://www.videolan.org/vlc/download-windows.html),当前是vlc-2.2.4-win64.zip;

    2、解压,分别将axvlc.dll、libvlc.dll、libvlccore.dll、npvlc.dll四个dll和plugins文件夹拷贝至unity3d项目Assert文件夹;

    3、使用p/invoke 实现以上dll的接口,获取vlc视频流、视频相关信息和控制事件;

    4、在unity3d中新建一个sprite对象,并添加视频控制的cs代码,进行播放视频功能控制;

    5、根据3中的接口控制播放,并取得视频流的回调,新建一个视频流的cache数组,将回调函数中的视频流数据放入cache数组中;

    6、开始时在ui线程中,起一个定时器获取视频流数据,我这里设置的是每个20ms执行一次,如果正常播放的话,每秒执行50次,就是50帧,应该够了;

    6、定时器中处理,在5中得到cache数组中取一帧数据。使用Texture2D类,新建Texture2D对象,关键函数为LoadRawTextureData,即将二进制流数据转换为texture2d材质。然后使用Sprite.Create()使用转换好的Texture2d变为sprite精灵对象。这样就显示在4中新建的sprite对象中了。

    7、还有些乱七八糟的参数和事件,后续慢慢解决...


    碰到的问题:

    unity3d中如何使用unsafe代码?

    a、不知道为什么我的vr机器上VS不能打开unity3d项目的属性,在笔记本上可以打开,打开方法,右键项目属性-Build-General-Allow Unsafe Code打上勾;

    b、在unity3d项目的Assert下面新建一个名为:smcs.rsp的文件,文件内容为:-unsafe;

    c、修改项目的player setting中Other Settings的Optimization中Api Compatibility Level改为.Net 2.0 Subset。(关键)


    简单实现 重播,开始/暂停,下一个等功能。4k视频,这个视频播放时间显示不正确....



    欢迎来交流群交流:323929978


    展开全文
  • 【翻译】 Unity3D VR 教程:1.VR概述

    千次阅读 2016-05-03 23:31:26
    Unity引入了一些内置的支持,但是只针对几种特定的VR设备。这个指南会专注于Oculus 系列的VR设备, 特别是 Oculus Rift Development Kit 2 (DK2 ) 和 消费者版本的Gear VR(一种手机外设,需要三星Galaxy s6, s6 ...
  • unity开发htc VR实现瞬移功能

    千次阅读 2017-09-26 16:10:26
    unity开发htc vive 实现曲线瞬移
  • VR开发中,我们经常需要激活一个用户正在盯着的物体。我们准备了一个示例,一个简单的可扩展的轻量级的系统,让用户和物体交互。这个系统由三个主要的脚本组成,VREyeRaycaster, VRInput, 和VRInteractiveItem - ...
  • Unity3D基于陀螺仪实现VR相机功能

    千次阅读 2017-10-17 10:26:46
    Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下: 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,如图:在相机MainCamera下创建一个新的Camera相机,并改变...
  • unity3d利用pano2VR实现全景视图效果

    千次阅读 2016-03-09 10:12:42
    unity3d利用pano2VR实现全景视图效果 要做全景视图,当然先要找一张全景图片(360°鱼眼镜头的)   接着全景视图的转换软件,如果可以的话自己做也行。  这里推荐 pano2VR         图片转换...
  • 浅谈UnityVR产业,用Unity开发VR应用

    千次阅读 2018-07-01 18:40:04
    VR(Virtual Reality的缩写,中文翻译—虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段。 中国VR产业仍在摸索阶段,亟缺复合型专业人才。据领英的全球...
  • Unity3D 虚拟现实开发(三)-UI篇

    千次阅读 2018-11-13 21:38:36
    一款软件肯定要有好的界面了,Unity3D 5.X版本后开始了UGUI功能。 下面我们来讲解一下,Unity3D UGUI 界面的简单制作。看下面这张图,咱们将UI实现呢   下面我们就开始制作UI,哎,原来的图片没有了,还得自己...
  • 首先在Unity项目里已经下载好了SteamVR插件,这个没有的话去asset store下载即可。然后在Hierarchy下面添加[CameraRig]。 1.[CameraRig]下面的 left 或者 right 添加 “SteamVR_LaserPointer” 和 “St...
  • iOS与Unity3d的交互实现

    2017-11-29 14:12:03
    iOS与Unity3d的交互实现 最近在公司写的项目是基于iOS与Unity3d的,之前也写了不少的iOS与Unity的项目,但是这次将两者结合开发还是第一次。项目的第一条功能需求就是:实现从iOS原生界面到Unity的跳转。 看似...
  • 一、概述:在使用Unity实现VR中在黑板上写字(初级篇)中的最后留下了一些有待完善的地方,首先完善画笔穿透画板的问题;在之前使用画笔会出现这种情况:可以看到画笔是穿透了画板,这样在VR中会给用户很差的体验,...
  • 但是今天,要给大家分享的并不是使用这两种插件的经验,而是要给大家分享第三种方法,不使用其他需要导入的插件,仅使用Unity主体功能,自己配置打造Oculus的输入控制,下面就让我们开始动手做一个我们自己的VR控制...
  • Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下:   打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,如图:   代码如下: usin...
  • Unity实现VR摄像机

    2019-09-04 19:52:31
    众所周知,unity是一款功能强大的游戏引擎,专注于做手机游戏,像王者荣耀这样的大型网络手游,就是在这样的引擎下做出来的,所以说它还是非常成熟的引擎了。当然,unity不仅可以做手机网游,还可以做页游,端游,...
  • Unity3D 虚拟现实开发(五)-UI篇

    千次阅读 2018-11-20 20:24:37
    前面我们已经讲解了按钮制作、按钮的位移、缩放、渐变的实现,现在我们来讲解另一块房地产VR核心业务模块。项目简介、动态交通。这两个模块是平面展示中的核心模块。 现在我们来讲解一下,项目简介、动态交通的制作...
1 2 3 4 5 ... 20
收藏数 1,669
精华内容 667
关键字:

unity3d vr 功能实现