前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTC VIEW☀️十、 替换手部模型、精确手抓握动作

HTC VIEW☀️十、 替换手部模型、精确手抓握动作

作者头像
星河造梦坊官方
发布2024-08-15 16:47:12
800
发布2024-08-15 16:47:12
举报
文章被收录于专栏:星河造梦坊专栏

🟥 基础配置

基础配置

🟧 替换手部模型

1、将左右手模型放到LeftController、RightController下,调整手模型位置

2、将下方A或B代码挂载到手模型上,并赋值状态机

3、实现能抓取物体

a、左、右手Left/RightController下新建空物体 AttachPoint ,挂载Rigidbody,取消使用重力。 b、将这两个抓取点分别赋值给左右手的组件 VRTK_InteractGrab 的 ControllerAttachPoint 属性。

4、关闭[CameraRig]下方的两个左右手Model。

🟨 手部抓取动画

1️⃣ 效果A:按下Trigger,播放完整抓取动画

新建脚本,内容如下:

该脚本分别挂载到自己新建的LeftController和RightController上,用以当获得按下Trigger键信息时,播放手的抓取动画。

别忘了改正播放抓取动画状态机对用的参数、勾选HasExitTime。

代码语言:javascript
复制
using UnityEngine;
using VRTK;

//分别挂载到左右手HandController上去。
public class Skode_VRHandController : MonoBehaviour {

    [Tooltip("手模型的动画状态机,用以回调事件播放动画")]
    public Animator ani;

    void Start () {
        //按下Trigger事件
        GetComponent<VRTK_InteractUse>().UseButtonPressed += InteractUse_UseButtonPressed;
        //松开Trigger事件
        GetComponent<VRTK_InteractUse>().UseButtonReleased += InteractUse_UseButtonReleased;
    }

    
    private void InteractUse_UseButtonPressed(object sender, ControllerInteractionEventArgs e)
    {
        ani.SetBool("isGrabbing",true);
    }

    private void InteractUse_UseButtonReleased(object sender, ControllerInteractionEventArgs e)
    {
        ani.SetBool("isGrabbing",false);
    }
}

2️⃣ 效果B:根据按下的深度不同,手抓取的程度也不同

最下方的脚本,直接挂载到RightController上,给它赋值手的状态机。注意改下播放的动画名称,动画层级。

播放的动画是状态机动画名称

代码如下:

代码语言:javascript
复制
using UnityEngine;
using VRTK;

//分别挂载到左右手HandController上去。
public class Skode_VRHandController : MonoBehaviour {

    [Tooltip("手模型的动画状态机,用以回调事件播放动画")]
    public Animator ani;

    void Start () {
        //获得按下Trigger键的深度
        GetComponent<VRTK_ControllerEvents>().TriggerAxisChanged += Skode_VRHandController_TriggerAxisChanged;
    }

    private void Skode_VRHandController_TriggerAxisChanged(object sender, ControllerInteractionEventArgs e)
    {
        //直接播放状态机中的动画,而不是状态机。
        //动画片段,位于状态机的0层,动画时间/进度
        ani.Play("Grab",0,e.buttonPressure);
        ani.speed = 0;      //暂停动画,便于逐帧进行控制。
    }
}

最终效果:

大家还有什么问题,欢迎在下方留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 基础配置
  • 🟧 替换手部模型
  • 🟨 手部抓取动画
    • 1️⃣ 效果A:按下Trigger,播放完整抓取动画
      • 2️⃣ 效果B:根据按下的深度不同,手抓取的程度也不同
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档