在VR开发时,有时需要用到物体高亮的功能。这里使用Highlighting System v3.0.1.unitypackage插件实现。

Highlighting System v3.0.1的介绍访问看这里:

https://forum.unity3d.com/threads/highlighting-system-released.143043/

因为是VR环境下,所以也需要SteamVR Plugin.unitypackage插件。

实现步骤

step1: 导入插件

按照 Assets->Import Package->Custom Package导入就可以了。

step2:新建cube 和 VR环境

新建一个cube,删除已有的"Main Camera"对象,加入SteamVR下的“Camera Rig”, "Status"和“SteamVR”3个prefabs。

step3:给cube增加高亮脚本

新建脚本SpectrumController.cs 并挂在Cube对象下。

using UnityEngine;
using System.Collections; public class SpectrumController : HighlighterController
{
public float speed = 200f; private readonly int period = 1530;
private float counter = 0f; //
new void Update()
{
base.Update();
h.On(Color.blue);
int val = (int)counter; Color col = new Color(GetColorValue(1020, val), GetColorValue(0, val), GetColorValue(510, val), 1f); h.ConstantOnImmediate(col); counter += Time.deltaTime * speed;
counter %= period;
} // Some color spectrum magic
float GetColorValue(int offset, int x)
{
int o = 0;
x = (x - offset) % period;
if (x < 0) { x += period; }
if (x < 255) { o = x; }
if (x >= 255 && x < 765) { o = 255; }
if (x >= 765 && x < 1020) { o = 1020 - x; }
return (float) o / 255f;
}
}

step4:给Camera Rig 下Camera(eye)增加脚本

Camera(eye) 增加“Highlighting Mobile”脚本。

step5: bug解决

到这里已经实现了基本功能,但是这个有个bug需要解决:在vive里面,高亮的轮廓在水平轴上是反向的。

各位试过就知道是怎么回事了。

修改:在HighlightingBase.cs文件下,Line 551开始修改

GL.PushMatrix();
GL.LoadOrtho(); mat1.SetPass(pass1);
GL.Begin(GL.QUADS);
// Unity uses a clockwise winding order for determining front-facing polygons. Important for stencil buffer!
GL.TexCoord2(0f, y1); GL.Vertex3(0f, 0f, z); // Bottom-Left
GL.TexCoord2(0f, y2); GL.Vertex3(0f, 1f, z); // Top-Left
GL.TexCoord2(1f, y2); GL.Vertex3(1f, 1f, z); // Top-Right
GL.TexCoord2(1f, y1); GL.Vertex3(1f, 0f, z); // Bottom-Right
GL.End(); mat2.SetPass(pass2);
GL.Begin(GL.QUADS);
//GL.TexCoord2(0f, 0f); GL.Vertex3(0f, 0f, z);
//GL.TexCoord2(0f, 1f); GL.Vertex3(0f, 1f, z);
//GL.TexCoord2(1f, 1f); GL.Vertex3(1f, 1f, z);
//GL.TexCoord2(1f, 0f); GL.Vertex3(1f, 0f, z); GL.TexCoord2(0f, 1f); GL.Vertex3(0f, 0f, z);
GL.TexCoord2(0f, 0f); GL.Vertex3(0f, 1f, z);
GL.TexCoord2(1f, 0f); GL.Vertex3(1f, 1f, z);
GL.TexCoord2(1f, 1f); GL.Vertex3(1f, 0f, z); GL.End(); GL.PopMatrix();

http://www.cnblogs.com/langzou/p/6012123.html

unity3D HTC VIVE开发-物体高亮功能实现的更多相关文章

  1. HTC Vive开发笔记之UI Guideline

    本文转自HTC官方论坛,原址https://www.htcvive.com/cn/forum/chat.php?mod=viewthread&tid=1641&extra=page=1 ...

  2. HTC Vive开发笔记之手柄控制

    怎么安装设备,配置环境我就不说了,自行百度,教程很多也很简单.接下来说下Vive手柄的控制. 手柄是HTC Vive的重要交互手段,我们通过第一个图片应该对其有一个直观的了解了,总共是九个按钮: 第一 ...

  3. HTC Vive开发笔记之SteamVR插件集成

    重要组件 SteamVR_Camera VR摄像机,主要功能是将Unity摄像机的画面进行变化,形成Vive中的成像画面 使用方法: l 在任一个摄像机上增加脚本 l 点击Expand按钮 完成以上操 ...

  4. HTC vive开发:关于手柄按键

    一.关于左右手柄的对应关系 两个手柄和SteamVR_TrackedObject.EIndex是对应的,一个是EIndex.Device2,另一个是EIndex.Device3(有编号的那个) 在场景 ...

  5. HTC Vive开发笔记之手柄震动

    手柄震动的代码SteamVR_Controller脚本的最上面的注释里面就有说明,其实也很简单 // Example usage: //这个栗子是左手柄震动 右手震动只需把Leftmost换成Righ ...

  6. osgMulitiplerendertargets sample 中fbo使用【HTC VIVE开发中应用】

    osgmultiplerendertargets.cpp ...................................... // now create the camera to do t ...

  7. Unity 5.4大赞:HTC Vive经典The lab渲染器开源

    HTC Vive提供了一个不错的免费VR demo,最近1周仔细体验了一番. 仔细看了其安装文件,竟然是Unity 5.4beta版本(通过查log,知道Valve公司用的是最新的5.4.0b11版本 ...

  8. 用Unity开发HTC VIVE——手柄控制篇

    写这篇文章的原因主要是因为现在虚拟现实非常的火爆但目前主流的虚拟现实设备(HTC VIVE)的教程却少的可怜,这个我深有体会.所以,我想将我平时开发中遇到的问题以及解决方法记录下来,分享给大家,若其中 ...

  9. HTC vive VR设备软硬件安装+运行unity开发的VR程序

    总结在HTC vive VR开发过程中的HTC vive的安装调试 1.首先确保电脑的配置满足要求: 进入官网,测试电脑是否满足要求 链接:https://www.vive.com/us/produc ...

随机推荐

  1. swift3.0 顶部状态栏隐藏

    横屏进入手机状态栏是隐藏的,但是调用了相册选去图片后顶部状态栏又显示了出来,网上查阅按照以下方式: override var prefersStatusBarHidden: Bool{ return ...

  2. Redis从单机到集群,一步步教你环境部署以及使用

    Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的.一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它.那么在一些场景下为了保 ...

  3. mysql 查询性能优化第一章 为什么查询速度会慢

    一 为什么查询速度会慢 在尝试编写快速的查询之前,咱们需要清除一点,真正重要的是响应时间.如果把查询看成是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要有 优化查询,实际上要 ...

  4. nodejs 文件读取一行

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   废话没有,直接上代码: app.get('/company', function (req, res, nex ...

  5. Mysql报错注入原理分析(count()、rand()、group by)

    Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...

  6. centos7破解mariadb密码

    第一步,停止运行mysql: systemctl stop mariadb.service 第二步,使用" -skip-grant-tables"参数重新启动mysql: mysq ...

  7. Shiro入门

    Shiro是由Apache提供的一个强大且易用的Java安全开源框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到 ...

  8. 在Windows的Dos命令中切换盘符

    在Windows的Dos命令中切换盘符... ---------------------------- --------------------------------------- -------- ...

  9. Android SharedPreferences基本用法

    使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类, 用来保存应用的一些常用配置. SharedPreferences与Editor简介 ...

  10. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...