HTC Vive Unityunity 瞬移插件下载该怎么用

提供几个 HTC 插件&
2.VRTK - SteamVR Unity Toolkit
3.HTCUnity
链接:/s/1mhSt83Q 密码:0e2p
带上HTC眼镜后盯住物体几秒,然后弹出一个缩减时间的UI,在时间未结束以前移开视线清0
看物体触发事件的效果的原理其实就是从摄像机上发出一条射线,然后判断他碰到的是否是你想要触发的物体,接着发出对应事件即可
using UnityE
using System.C
using UnityEngine.UI;
public class VRCameraRay : MonoBehaviour
&&& [SerializeField]
&&& private GameObject m_C
&&& [SerializeField]
&&& private float _myTime = 3;//时间总量
&&& [SerializeField]
&&& private GameObject m_
&&& [SerializeField]
&&& private Image m_I
&&& void Update()
&&&&&&& // 以摄像机所在位置为起点,创建一条向前发射的射线&
&&&&&&& Ray ray = new Ray(transform.position, transform.forward);
&&&&&&& RaycastH
&&&&&&& if (Physics.Raycast(ray, out hit, Mathf.Infinity))
&&&&&&&&&&& // 如果射线与平面碰撞,打印碰撞物体信息&
&&&&&&&&&&& //Debug.Log(&碰撞对象: & + hit.collider.name);
&&&&&&&&&&& if (hit.collider.name == &Debris&)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& m_cd.gameObject.SetActive(true);
&&&&&&&&&&&&&&& CD();
&&&&&&&&&&&&&&& Countdown();
&&&&&&&&&&& }
&&&&&&&&&&& if (hit.collider.name != &Debris&) {
&&&&&&&&&&&&&&& m_cd.gameObject.SetActive(false);
&&&&&&&&&&&&&&& _myTime = 3;
&&&&&&&&&&&&&&& m_Image.fillAmount = 1;
&&&&&&&&&&& }
&&&&&&&&&&& // 在场景视图中绘制射线&
&&&&&&&&&&& Debug.DrawLine(ray.origin, hit.point, Color.red);
&&& //====================倒计时=====================
&&& void Countdown()
&&&&&&& _myTime -= Time.deltaT//时间总量-=完成一帧所用时间
&&&&&&& if (_myTime &= 0)
&&&&&&&&&&& m_Canvas.gameObject.SetActive(true);
&&& //============技能冷却==============
&&& private bool m_isColding =
&&& void CD()
&&&&&&& if (m_isColding)
&&&&&&&&&&& m_Image.fillAmount -= (1.0f / _myTime) * Time.deltaT
&&&&&&&&&&& if (m_Image.fillAmount == 0)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& m_cd.gameObject.SetActive(false);
&&&&&&&&&&& }
将本脚本挂在到& Camera (eye)&&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1634次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'VR开发 -- HTC Vive实现瞬移功能 - 简书
VR开发 -- HTC Vive实现瞬移功能
一.什么是瞬移功能?
瞬移就是使用手柄选取一个位置,通过扳机键进行瞬间移动。因为HTC Vive活动范围有限制(3m * 5m),所以我们在实际的使用中,为了更好的浏览场景,查看场景,会使用这种移动的方式,达到游戏中的视野移动。移动的方式有两种:一种是水平移动即X,Z轴移动;另一种就是垂直移动,即Y轴移动。PS : 我们通过射线检测的方法进行开发,因为HTC Vive有类似的脚本。所以我们只需更改脚本的某些部分就可实现瞬移功能。
二.案例详解
1.下载Steam VR,导入资源
Paste_Image.png
2.将脚本复制,修改类名(部分脚本)
Paste_Image.png
using UnityE
using System.C
public class SteamVR_LaserPointer : MonoBehaviour
public bool active =
public float thickness = 0.002f;
public GameO
public GameO
bool isActive =
public bool addRigidBody =
public event PointerEventHandler PointerIn;
public event PointerEventHandler PointerO
public Vector3 HitP
Transform previousContact =
// Use this for initialization
void Start ()
holder = new GameObject();
holder.transform.parent = this.
holder.transform.localPosition = Vector3.
holder.transform.localRotation = Quaternion.
pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
pointer.transform.parent = holder.
pointer.transform.localScale = new Vector3(thickness, thickness, 100f);
pointer.transform.localPosition = new Vector3(0f, 0f, 50f);
pointer.transform.localRotation = Quaternion.
BoxCollider collider = pointer.GetComponent&BoxCollider&();
if (addRigidBody)
if (collider)
collider.isTrigger =
Rigidbody rigidBody = pointer.AddComponent&Rigidbody&();
rigidBody.isKinematic =
if(collider)
Object.Destroy(collider);
Material newMaterial = new Material(Shader.Find("Unlit/Color"));
newMaterial.SetColor("_Color", color);
pointer.GetComponent&MeshRenderer&().material = newM
public virtual void OnPointerIn(PointerEventArgs e)
if (PointerIn != null)
PointerIn(this, e);
public virtual void OnPointerOut(PointerEventArgs e)
if (PointerOut != null)
PointerOut(this, e);
// Update is called once per frame
void Update ()
if (!isActive)
isActive =
this.transform.GetChild(0).gameObject.SetActive(true);
float dist = 100f;
SteamVR_TrackedController controller = GetComponent&SteamVR_TrackedController&();
Ray raycast = new Ray(transform.position, transform.forward);
bool bHit = Physics.Raycast(raycast, out hit);
if(previousContact && previousContact != hit.transform)
PointerEventArgs args = new PointerEventArgs();
if (controller != null)
args.controllerIndex = controller.controllerI
args.distance = 0f;
args.flags = 0;
args.target = previousC
OnPointerOut(args);
previousContact =
if(bHit && previousContact != hit.transform)
PointerEventArgs argsIn = new PointerEventArgs();
if (controller != null)
argsIn.controllerIndex = controller.controllerI
argsIn.distance = hit.
argsIn.flags = 0;
argsIn.target = hit.
OnPointerIn(argsIn);
previousContact = hit.
previousContact =
HitPoint = hit.
if (bHit && hit.distance & 100f)
dist = hit.
if (controller != null && controller.triggerPressed)
pointer.transform.localScale = new Vector3(thickness * 5f, thickness * 5f, dist);
pointer.transform.localScale = new Vector3(thickness, thickness, dist);
pointer.transform.localPosition = new Vector3(0f, 0f, dist/2f);
3.添加脚本
Paste_Image.png
Paste_Image.png
4.添加传送脚本
public class Test_TelePointer : MonoBehaviour {
//拿到手柄对象
public GameObject LeftC
//修改后的射线检查脚本
private Test_LaserPointer P
//右手柄的控制器
private SteamVR_TrackedController LeftSt;
//事件调用函数
ClickedEventH
//当前的目标位置
Transform currentT
//碰撞事件
PointerEventA
void Start () {
Pointer = LeftController.GetComponent&Test_LaserPointer&();
LeftSt = LeftController.GetComponent&SteamVR_TrackedController&();
//利用Laserpoint里面的事件函数来检测目标位置
Pointer.PointerIn += LeftPointIn;
//利用Laserpoint里面的事件函数来检测目标位置
Pointer.PointerOut += LeftPointO
//利用手柄控制器来检测我们的扳机事件
LeftSt.TriggerClicked += TriggerC
void Update () {
//没有检测到碰撞信息
void LeftPointOut(object sender, PointerEventArgs e)
//当前位置为空
currentTransform =
//检测到碰撞信息
void LeftPointIn(object sender, PointerEventArgs e)
// 设置目标位置为检测到的目标
currentTransform = e.
//扳机事件
void TriggerClicked(object sender, ClickedEventArgs e)
//如果检测到目标位置
if (currentTransform != null)
this.gameObject.transform.position = new Vector3(Pointer.HitPoint.x - LeftController.transform.localPosition.x, Pointer.HitPoint.y, Pointer.HitPoint.z - LeftController.transform.localPosition.z);
学如逆水行舟,不进则退2060人阅读
unity(5)
  开启SteamVR并连接Vive设备&
 (a)  登录Steam客户端,并点击右上角的VR按钮,这时会弹出SteamVR的小窗口
(b)  连接好所有VR设备,连接成功后SteamVR窗口上的图标会全部变为绿色&
2.  新建Unity3D工程&
3.  通过Asset Store导入SteamVR Plugin&
4.  拖入相关prefab&
 先删除所有默认GameObject&
然后将SteamVR/Prefabs中的所有prefab拖入Hierarchy窗口&
5.  点击播放按钮&
 这个时候Game窗口会提示你可以戴上头盔了。戴上后四处环视一下,就能找到控制器。&
好了,第一个程序就这么制作完成了。接下来大家就可以自行发挥啦~ 导入好看的场景和模型,编写自己的gameplay。&
另外,大家可以参考SteamVR Plugin自带的示例场景,分别是:&
 SteamVR/Scenes/example&
 SteamVR/Extras/SteamVR_TestIK&
 SteamVR/Extras/SteamVR_TestThrow
这次就介绍到这里,之后我们会详细地介绍SteamVR各个脚本的应用。
Ps.Unity开发小技巧:请把 显示分辨率对话框属性设置为HiddenByDefault&
在Unity 中Player Settings的选项里,/Manual/class - PlayerSettingsStandalone.html&
       &
当用户带上HMD的时候我们没办法消除掉这个对话框,当启动游戏的时候,他们不得不摘下HMD手动消除这个对话框。但是这个对话框有时还是有用的,这就是为什么我推荐HiddenByDefault而不是Disable. Unity提供的方法是用命令行选项来控制当设置为HiddenByDefault(或者Ctrl),但是当设置为Enable的时候没有用。
转载:/p/186IJMd.html & 感谢博主分享
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:40669次
排名:千里之外
原创:23篇
转载:75篇
(21)(7)(2)(2)(5)(1)(5)(15)(18)(12)(11)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'SteamVR使用VR_TK插件完成VR中的瞬移交互功能 - 简书
SteamVR使用VR_TK插件完成VR中的瞬移交互功能
VR_TK插件介绍。
全名为:SteamVR unity toolskit,它是依赖于SteamVR插件的,这个插件能帮助我们完成许多交互功能(轮子):
普通控制器按钮事件。
控制器世界指针(激动指示器)
使用控制器完成“拼抢”、“持物”等操作。
使用控制器对象交互。
游戏转化为对象交互的UI元素。
它的工具包项目分为三个主要的部分
Paste_Image.png
更多简介以及README
Paste_Image.png
有很详细的帮助文档
Paste_Image.png
使用VR_TK完成Teleport(瞬移)
由于VR_TK是基于SteamVR插件的,所以我们首先需要导入SteamVR插件可以在Assets Store中下载最新版本的SteamVR插件。
Paste_Image.png
选择一个手柄来完成手柄的Teleport功能。
Paste_Image.png
为它添加VRTK_ControllerEvents脚本
Paste_Image.png
这个脚本是用来监听HTC Vive手柄上的所有输入的。
添加了事件监听的脚本以后,我们就需要添加Teleport功能,这里使用贝塞尔曲线的指针进行实现。(当然你也可以使用VRTK_Simple Pointer进行实现,但是很明显交互上和体验上都和瞬移很不符合逻辑。)
为手柄添加VRTK_Bezier Pointer脚本(将直线的激光指示器指向目标点的指针通过贝塞尔曲线指向新的目标点,需要自己仔细研究可以去github上看看帮助文档,也可以自己看看脚本里的代码都是开源的)需要进行Teleport功能勾选上就行
Paste_Image.png
Layers To Ignore:类似于遮罩,将使这个layer层不会接受射线,因为我们不可能可以瞬移到任何地方去,我们将我们不想瞬移到的层,在这里面进行选择。
接着为我们的CameraRig添加处理瞬移移动相关的VRTK_Basic Teleport脚本。(因为我们的瞬移是Camera瞬移)
Paste_Image.png
VRTK_Basic Teleport脚本中的瞬移实现DoTeleport方法:
Paste_Image.png
Paste_Image.png
你也可以通过以下属性去改变这个瞬移线的材质,密度,长度等属性。
Paste_Image.png
VR开发者,大学英语加软件双学位,一年Unity开发经验,半年VR开发经验及半年创业经验,欢迎交流与分享 个人网站

我要回帖

更多关于 饥荒瞬移法杖怎么用 的文章

 

随机推荐