Unity+Kinect骨骼绑定的两种方法和问题(六)

时间:2024-04-02 22:29:40

这篇文章我只是简单的说下骨骼绑定的方法,为什么傻逼的写这篇文章呢,因为自己遇到了一个问题,就是官方的AvatarsDemo,将里面的模型替换成自己的模型后,它只跟随你前后左右移动,就是不跟你一起做动作,我去,忍不了

首先介绍一下骨骼绑定的第一种方法:导入模型,在其上添加两个脚本,KinectManager 和 AvatarController,骨骼就绑定了,它就能跟随你一起做动作了

对就是这么简单,然而今天做一个项目,怎么都不能跟我一起做动作,起先怀疑是模型的问题,后来我才发现,外包公司发来的是一个 Generic 类型的模型

Unity+Kinect骨骼绑定的两种方法和问题(六)

所以,我们以后拿到模型如果是人形的骨骼,一定要转成 Humanoid 类型,一定要转成 Humanoid 类型,一定要转成 Humanoid 类型,重要的事情说三遍

Unity+Kinect骨骼绑定的两种方法和问题(六)

(二)导入模型,在其上添加两个脚本,KinectManager 和 AvatarControllerClassic,将对应的模型关节点拖入到AvatarControllerClassic 脚本内赋值,如果你不想要它移动,你只需要把它的脚的关节都不给它赋值

Unity+Kinect骨骼绑定的两种方法和问题(六)

2.新建一个对象 OffsetNode ,添加脚本组件 OffsetNodeMover,代码放文章最下面:

Unity+Kinect骨骼绑定的两种方法和问题(六)

3.OK,运行看一下,这个时候模型的除了脚都会跟随人做动作,且你移动位置,模型是不会跟随你一起移动的,当你拖动 OffsetNode 时,模型也会跟着你一起移动

Unity+Kinect骨骼绑定的两种方法和问题(六)

 

OffsetNodeMover.cs

using UnityEngine;
using System.Collections;

public class OffsetNodeMover : MonoBehaviour 
{
    [Tooltip("Speed at which the offset node will move through the scene.")]
    public float moveSpeed = 1f;

    [Tooltip("Smooth factor used for offset node movements.")]
    public float smoothFactor = 1f;


    void Update () 
    {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");

        if (h != 0f || v != 0f) 
        {
            Vector3 vMoveStep = new Vector3 (h * moveSpeed, 0f, v * moveSpeed);
            Vector3 vMoveTo = transform.position + vMoveStep;

            transform.position = Vector3.Lerp (transform.position, vMoveTo, Time.deltaTime * smoothFactor);
        }
    }

}