SteamVR学习(二)V1.2.3

The Lab中的InteractionSystem结构

1.Core(核心):包含一些材质,封装了核心代码,封装了手柄头盔的预制件等

2.Hint(提示):实现手柄上的一些提示,为手柄按钮做出提示

3.Longbow(射箭):射箭系统的一些交互,有弓和箭等模型,并且附着了交互脚本

4.Samples(样例):有集成部分交互的样例场景

5.Teleport(瞬移):包含瞬移交互中的一些类和声音和预制件等

PlayerPrefab

1.在SteamVR—InteractionSystem—Core—Prefabs文件夹下把Player放入场景

2.using Valve.VR.InteractionSystem;

3.包含两个Camera组件,一个用来做VR渲染,一个用来做2D调试

4.非特殊情况下Player的Position最好设置在(0,0,0)

4.使用方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.InteractionSystem;

public class TestPlayer : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //Player为单例,通过instance访问属性
        Vector3 vec = new Vector3();
        vec = Player.instance.feetPositionGuess;//对站立的位置进行一个估计
        vec = Player.instance.bodyDirectionGuess;//对身体朝向进行估计

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
Hand

1.在Hand(Script)中可以对左右手进行设定

2.Hand(Script)中包含Hover Sphere Transform可以设置悬停感应,Hover Sphere Radius可以设置感应的半径,Hover Laye Mask设置有哪些层可以感应

3.还有一些和debug相关的,具体可以查看文档

4.Controller Prefab可以设置手柄的外形,Interaction中自带BlankController预制件,可以修改成其他模型

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.InteractionSystem;

public class TestPlayer : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Player.instance.hands[0].AttachedObjects();//参数传递物体名称和抓取方式
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
Teleport

1.Teleporting拖到场景中就可以实现瞬移,TeleportPoint拖到场景中就有了一个可以瞬移的点

2.可访问属性,Locked初始可以设置成勾选,达成某条件后执行

3.Marker Active勾选上后默认不显示瞬移点,按下TouchPad后才显示,不勾选的情况下是始终显示瞬移点

4.Teleport Type瞬移类型,可以仅传送到新位置,也可以改变到新的场景

5.Title在瞬移点上添加文字

6.Switch To Scene跳转到对应Project中的场景名称,填写完整的路径名称时用/来连接,可以打开TeleportPoint脚本,引用using UnityEngine.SceneManagement;在223行处修改场景跳转逻辑或其他,在Build Setting中添加场景

7.在物体上添加Teleport Area脚本就可以实现控制瞬移的区域

public void TeleportToScene()
{
	if ( !string.IsNullOrEmpty( switchToScene ) )
	{
		Debug.Log( "TeleportPoint: Hook up your level loading logic to switch to new scene: " + switchToScene );
		SceneManager.LoadScene(switchToScene);
	}
	else
	{
		Debug.LogError( "TeleportPoint: Invalid scene name to switch to: " + switchToScene );
	}
}

复原The Lab中的登山场景

Interaction System实现交互
Interactable组件

交互基础,添加到游戏物体上,游戏物体就可以用手柄进行交互,手柄有高亮振动反应(在Player—SteamVRProjects—Hand1—ControllerHoverHighlight添加了高亮轮廓材质,勾选了Fire Haptics On Highlight)

InteractableHoverEvents组件和InteractableButtonEvents组件

物体响应Hand交互事件,分成悬停和按钮按下两种,Events列表中有对应不同阶段事件,添加游戏物体后可以选择方法函数,自定义方法函数时需要public,其他使用脚本的方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.InteractionSystem;

public class InteractWithButton : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        InteractableButtonEvents ibe=GetComponent();
        ibe.onTriggerDown.AddListener(triggerDownHandler);
    }

    private void triggerDownHandler()
    {
        Debug.Log("Trigger Down");
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
ControllerHoverHighlight组件

手柄高亮显示

Throwable组件

抓取物体,包含四个标志位,可以吸附到手柄上,成为手柄的子物体或是指定吸附其他物体,还可以设置延时时间,松开时是否与parent保持原有层级关系,还可以设置吸附过程中的缓动情况,自带两个事件,拿起和被手柄释放

标签的使用

添加Trowable时会同时添加其他组件,使用标签的方法强制自动添加组件[RequireComponent(typeof(Interactable))]

为物体添加Physics Material

在游戏物体的Box Colider组件中的Material中添加

ItemPackage实现配套物品同时抓取
ItemPackage组件

做一个列表提示生成机制在每一个阶段用到什么游戏物体,相当于生成一个配置列表,不一定是可见的,可以是prefab,给物体添加一个碰撞区域,把ItemPackage组件拖到物体上,PackageType可以选择单手或双手抓握类型,选择双手时,在Other Hand Item Package中添加另一只手需要生成的预制体,Item Prefab是按下trigger时在手上生成的预制体,Preview Prefab是放回时的预制体,Faded Preview Prefab是放回的轮廓

ItemPackageSpawner组件

基于生成机制实现交互效果的逻辑,可以设置按键方式,吸附类型,是否放回物体,还有两个事件,拿起时触发和落下时触发

ItemPackageReference组件

设定物体与组织的关系,放回时需要用到的属于哪一个package的标记,放回时不会消失,只是脱离手柄,需要调用Destroy On Detached From Hand脚本

Linear Drive组件和Circular Drive组件

线性组件和环形组件,一方面实现物体按照设定方式进行运动,另一方面输出数值到LinearMapping,提供0-1之间的数值改变其他物体的属性

Linear Drive

属性中设置开始位置和结束位置,无需可视化,只需要transform属性,指定可以观察到的标识就可以,在这个范围内进行线性运动,新建游戏物体添加Linear Mapping脚本,MaintainMomemntum可以设置停止拖动后是否立即停下运动,Momemtum DampenRate可以设置惯性移动摩擦系数

Linear Animation

两个属性,一个LinearMapping,一个动画对象Animator

Linear Mapping

可以用于其他需要控制百分比的类中

Circular Drive

属性中可以用Axis Of Rotation设置旋转的轴,Child Colider可以控制子物体上响应动作,Hover Lock勾选上时,当手柄移开感应区的时候同样可以进行旋转,可以设置旋转是否被限制和最小角度最大角度,或者当达到最小或最大角度时是否被锁定同时可以添加触发函数,Out Angle可以输出一个角度

你可能感兴趣的:(学习,unity,vr)