unity/steamVR-学习随笔3

InteractionSystem使用记录

脚本:
1.Interactedable

该脚本用于和手柄产生反馈,项目中需要和手柄产生交互的物体都需要加入该脚本。

2.Interactedable Hover Events

该脚本用于执行物体被手柄选中后的交互操作。
方法:

  • OnHandHoverBegin:和手柄选中的交互事件响应
  • OnHandHoverEnd:手柄离开,结束选中状态的交互事件响应
  • OnAttachedToHand:被手柄拿起后的交互事件响应
  • OnDetachedFromHand:被手柄放下的交互事件响应
3.Interactedable Button Events

该脚本用于手柄按钮的交互操作。
方法:

  • OnTrigger Down:扳机键按下交互响应
  • OnTrigger Up:扳机键松开交互响应
  • OnGrip Down:侧面按钮按下交互响应
  • OnGrip Up:侧面按钮松开交互响应
  • OnTouched Down:方向触摸盘按下交互响应
  • OnTouched Up:方向触摸盘松开交互响应
  • OnTouched Touch:方向触摸盘解除交互响应
  • OnTouched Release:方向触摸盘离开交互响应
4.Teleport Area

该脚本用于设定物体成为可移动位置,脚本的两个属性Locked和Marker Active分别表示该位置是否被“锁定”和是否常显。

  • 勾选Locked则不可通过手柄移动到达该位置
  • 勾选Marker Active表示当按下手柄选择位置按钮时,可选位置才会显示,不按动手柄按钮时,可选位置不会显示。
5.Throwable

该脚本用于对于物体的抓取,只需将该脚本挂靠在希望抓取的物体上。
属性:

  • Attachment Flag:Everything默认,SnapOnAttach吸附到手柄上,DetachOthers其他手柄物体可释放, ParentToHand属于手柄子物体
  • Attachment Point:与目标物体产生吸附效果的物体
  • Catch Speed Thireshold:产生效果的时间
  • Restore Original Parent:松开目标物体后,其是否和原有的父物体保持原有的层级关系
  • Attach Easy in:在抓取过程中是否有滑动的过程
  • Snap Attach Easy in Curve:滑动过程变化曲线
  • Snap Attach Easy in Time:滑动时间
    方法:
  • On Pick Up:抓取后相互事件响应
  • On Detach From Hand:放下后交互事件响应
6.Item Pckage Spawner

此脚本用于拿起多物体配合,具体如下
属性:

  • Item Package:配置列表,包括拿起的物体、拿起后的物体轮廓,高亮等
  • Require Trigger Press To Take:是否按下扳机键拿起
  • Require Trigger Press To Return:是否按下扳机键恢复
  • Show Trigger Hint:手柄trigger键提示此物体可拿起
  • Attachment Flags:同5中同属性介绍
  • Attachment Point:同5中同属性介绍
  • Take Back Item:是否可以被放回
    方法:
  • Pickup Event:拿起物体交互响应事件
  • Drop Event:放下物体交互响应事件
7.Item Pckage

此脚本用于6中Item Package属性,为所需物体挂靠该脚本
属性:

  • Name:此物体的名字
  • Package Type:拿起类型,One Hand单手拿起效果,Two Hand双手拿起效果
  • Item Prefab:拿起动作产生后,手柄中生成的物体
  • Other Hande Item Prefab:拿起动作产生后,另一只手柄中伴随产生的物体
  • Preview Prefab:放回原处时,产生的物体
  • Faled preview Prefab:拿起后原处产生的轮廓
8.Item Pckage Refence

此脚本用于判断需要匹配移除的物体,将脚本放在目标物体上

9.Linear Driver

实现物体按照线性方式移动输出数值到LinearMapping。挂靠在带动物体上
属性:
startPosition:开始移动的位置
endPosition:结束移动的位置
LinearMapping:当前距离开始位置的距离占总路程的百分比
Position Game Object:是否不移动输出数值
Maintain Momemntum:停止操作移动后,物体是否存在惯性移动
Maintain Dampn Fate:摩擦系数数值

10.Circular Driver

实现物体按照转动方式移动输出到LinearMapping。挂靠在被带动物体上
属性:
Axis Of Rotation:转动轴向
Child Collider:子物体碰撞体(注意:1.带动转动的“把手”必须是被带动物体的子物体,2.被带动物体的碰撞体需要“无作用”)
Hover Lock:手柄是否移出感应区但并未松开扳机键,带动效果依然存在

Limited:是否被限制在一个旋转范围
Min(Max) Angle:最小(大)角度
Freeze On Min(Max):达到最小(大)角度是否被锁定,无法转动

Force Start:初始力
Start Angle:初始角度
Rotate Game Object:物体是否旋转(即使不勾选无法旋转也会进行输出一个角度数值)
Out Angle:输出角度
方法:
On Min(Max) Angle:达到最小(大)角度所触发的事件

———————————————————————————————————————

预制体:

1.Player

  • 该预制体自身携带有steamVR的cameraRigsteamVR预制体。因此导入该预制体后,删除场景原有的camera,同时不再重复添加已有的steamVR插件。

2.Teleporting

  • 该预制体在进行移动时需要向场景中添加,直接拖拽即可,不需要作为某个物体的子物体。

3.TeleportPoint

  • 该预制体为瞬移地点预制体,添加后可使用手柄瞬移到该预制体位置。
  • 面板属性:
    Locked:该预制体点是否可以移动到
    Marker Active:是否只有在按下选择按钮后,显示该移动点
    TeleportPoint Type:该移动点的性质,有两个选项:移动位置和切换场景
    Title:移动点的标头
    Sitch to Scene:移动的场景,需要填写场景的完整路径,而非单纯的场景标号或名称
    注意:设置好后还需要将TeleportPoint脚本下的TeleportToScene方法进行编辑
    ———————————————————————————————————————
附加内容
  • 1.脚本中使用【RequireComponent】可在物体绑定该脚本时,同时绑定标签所指定的组件,例如 [RequireComponent (typeof(Rigibody))]用于添加刚体组件
  • 2.脚本使用#region可对代码块隐藏合并
  • 3.脚本使用///< summery >和///< /summery>可进行更好的注解
  • 4.[SerializeField]将私有变量在面板显示
  • 5.VR中自带outline材质,可以建立物体轮廓
    ———————————————————————————————————————
    更多详细内容,请直接查看steamVR插件在InteractionSystem文件夹下自带的官方文档。
Unity中进行multipart/form-data上传,可以使用UnityWebRequest类。具体步骤如下: 1. 创建一个UnityWebRequest对象,并设置请求的URL和请求方法为POST。 2. 设置请求头部信息,包括Content-Type为multipart/form-data,以及其他必要的信息。 3. 构造表单数据,将需要上传的数据按照multipart/form-data格式进行编码,并设置到UnityWebRequest对象中。 4. 发送请求,并等待服务器响应。 以下是一个示例代码: ``` IEnumerator UploadFile(string url, byte[] data) { UnityWebRequest request = new UnityWebRequest(url, "POST"); request.SetRequestHeader("Content-Type", "multipart/form-data; boundary=------------------------boundary"); string boundary = "--------------------------boundary"; byte[] formHeaderBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n"); byte[] formFooterBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); byte[] bodyBytes = new byte[formHeaderBytes.Length + data.Length + formFooterBytes.Length]; System.Buffer.BlockCopy(formHeaderBytes, 0, bodyBytes, 0, formHeaderBytes.Length); System.Buffer.BlockCopy(data, 0, bodyBytes, formHeaderBytes.Length, data.Length); System.Buffer.BlockCopy(formFooterBytes, 0, bodyBytes, formHeaderBytes.Length + data.Length, formFooterBytes.Length); request.uploadHandler = new UploadHandlerRaw(bodyBytes); request.downloadHandler = new DownloadHandlerBuffer(); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { Debug.Log("Upload complete!"); } else { Debug.Log("Error during upload: " + request.error); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值