unity/steamVR-学习随笔1

利用HTC-VIVE抓取物体
要点:
1.脚本中使用SteamVR_TrackedObject类的对象获取手柄的steamVR组件
2.利用SteamVR_Controller.Device对象使用SteamVR_Controller.Input()方法将获取的手柄转换为unity内可被识别的对象
3.使用SteamVR_Controller.Device对象的GetPressDown、GetPressUp方法获取按下、弹起操作。
4.3中方法的参数为手柄具体按钮,通过SteamVR_Controller.ButtonMask获取,Trigger参数为“扳机”。
实例代码如下

public class CatchBox : MonoBehaviour {
    //获取手柄的steamVR组件
    private SteamVR_TrackedObject trackObject;
    //将手柄转换为unity内可被识别的装置
    private SteamVR_Controller.Device device;
    //手柄抓取的物体
    private GameObject catchObject;
	// Use this for initialization
	void Start () {
        trackObject = this.GetComponent<SteamVR_TrackedObject>();
        device = SteamVR_Controller.Input((int)trackObject.index);
	}

    void Update()
    {
        //监听手柄按钮事件
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
        {
            if (catchObject != null)
            {
                catchObject.transform.parent = this.transform;
                Rigidbody rig = catchObject.GetComponent<Rigidbody>();
                rig.useGravity = false;
                rig.isKinematic = true;
            }
        }

        if (device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))
        {
            if (catchObject != null)
            {
                catchObject.transform.parent = null;
                Rigidbody rig = catchObject.GetComponent<Rigidbody>();
                rig.useGravity = true;
                rig.isKinematic = false;
            }
        }
    }
    /// <summary>
    /// 碰撞体进入处理函数
    /// </summary>
    /// <param name="other"></param>
    private void OnTriggerEnter(Collider other)
    {
        if (other.transform.tag == "Finish")
        {
            catchObject = other.gameObject;
           
        }
    }

    private void OnTriggerStay(Collider other)
    {
        if (device != null) {
            //使手柄发生振动
            device.TriggerHapticPulse(700);
        }
      
    }

    /// <summary>
    /// 碰撞体结束处理函数
    /// </summary>
    /// <param name="other"></param>
    private void OnTriggerExit(Collider other)
    {
        catchObject = null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值