1.Core(核心):包含一些材质,封装了核心代码,封装了手柄头盔的预制件等
2.Hint(提示):实现手柄上的一些提示,为手柄按钮做出提示
3.Longbow(射箭):射箭系统的一些交互,有弓和箭等模型,并且附着了交互脚本
4.Samples(样例):有集成部分交互的样例场景
5.Teleport(瞬移):包含瞬移交互中的一些类和声音和预制件等
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()
{
}
}
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()
{
}
}
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中的登山场景
交互基础,添加到游戏物体上,游戏物体就可以用手柄进行交互,手柄有高亮振动反应(在Player—SteamVRProjects—Hand1—ControllerHoverHighlight添加了高亮轮廓材质,勾选了Fire Haptics On Highlight)
物体响应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()
{
}
}
手柄高亮显示
抓取物体,包含四个标志位,可以吸附到手柄上,成为手柄的子物体或是指定吸附其他物体,还可以设置延时时间,松开时是否与parent保持原有层级关系,还可以设置吸附过程中的缓动情况,自带两个事件,拿起和被手柄释放
添加Trowable时会同时添加其他组件,使用标签的方法强制自动添加组件[RequireComponent(typeof(Interactable))]
在游戏物体的Box Colider组件中的Material中添加
做一个列表提示生成机制在每一个阶段用到什么游戏物体,相当于生成一个配置列表,不一定是可见的,可以是prefab,给物体添加一个碰撞区域,把ItemPackage组件拖到物体上,PackageType可以选择单手或双手抓握类型,选择双手时,在Other Hand Item Package中添加另一只手需要生成的预制体,Item Prefab是按下trigger时在手上生成的预制体,Preview Prefab是放回时的预制体,Faded Preview Prefab是放回的轮廓
基于生成机制实现交互效果的逻辑,可以设置按键方式,吸附类型,是否放回物体,还有两个事件,拿起时触发和落下时触发
设定物体与组织的关系,放回时需要用到的属于哪一个package的标记,放回时不会消失,只是脱离手柄,需要调用Destroy On Detached From Hand脚本
线性组件和环形组件,一方面实现物体按照设定方式进行运动,另一方面输出数值到LinearMapping,提供0-1之间的数值改变其他物体的属性
属性中设置开始位置和结束位置,无需可视化,只需要transform属性,指定可以观察到的标识就可以,在这个范围内进行线性运动,新建游戏物体添加Linear Mapping脚本,MaintainMomemntum可以设置停止拖动后是否立即停下运动,Momemtum DampenRate可以设置惯性移动摩擦系数
两个属性,一个LinearMapping,一个动画对象Animator
可以用于其他需要控制百分比的类中
属性中可以用Axis Of Rotation设置旋转的轴,Child Colider可以控制子物体上响应动作,Hover Lock勾选上时,当手柄移开感应区的时候同样可以进行旋转,可以设置旋转是否被限制和最小角度最大角度,或者当达到最小或最大角度时是否被锁定同时可以添加触发函数,Out Angle可以输出一个角度