Unity + Kinect Kinect放置在高处的时候配置模型初始旋转角度(八)

测试环境 kinect v2 , Kinect 高度为 2.6米

 

1. 在AvatarController 脚本中找到 Kinect2AvatarRot()这个方法,原代码为

	protected Quaternion Kinect2AvatarRot(Quaternion jointRotation, int boneIndex)
	{
		Quaternion newRotation = jointRotation * initialRotations[boneIndex];
		//newRotation = initialRotation * newRotation;

//		if(offsetNode != null)
//		{
//			newRotation = offsetNode.transform.rotation * newRotation;
//		}
//		else
		{
			newRotation = initialRotation * newRotation;
		}
		return newRotation;
	}

2.  在这个脚本里添加一行代码,如图所示

	protected Quaternion Kinect2AvatarRot(Quaternion jointRotation, int boneIndex)
	{
		Quaternion newRotation = jointRotation * initialRotations[boneIndex];
		//newRotation = initialRotation * newRotation;

//		if(offsetNode != null)
//		{
//			newRotation = offsetNode.transform.rotation * newRotation;
//		}
//		else
		{
			newRotation = initialRotation * newRotation;
		}
        // 在这个脚本里初始化 Avatar 角度
        newRotation = Quaternion.Euler(initateRotate, 0f, 0f) * newRotation; // 偏移量
		return newRotation;
	}

3. 因为在现场可能需要多次调解这个角度,所以我把这个角度写在了 Json 文件里读取,后面方便调整Avatar的角度

json 文件如图所示

Model 类 这个类里的名字需要和 json文件里的属性一样

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Model {

    public string modelName;
    public string rotateAngle;
}

读取 json 文件代码如下: 

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;

public class SelectModel : MonoBehaviour {
    public static string m_modelName;
    public static string rotateAngle;
    // Use this for initialization
    void Awake () {
        string jsonTest = File.ReadAllText(Application.dataPath + "/StreamingAssets/ModelName.json", Encoding.UTF8);
        Model obj = JsonUtility.FromJson<Model>(jsonTest);
        // 读取json文件里的 旋转角度
        rotateAngle = obj.rotateAngle;
        SetActiveModel(obj.modelName);
        m_modelName = obj.modelName; 
        Debug.Log("obj.name" + obj.modelName);
    }
    

    // 根据 json 解析激活模型
    void SetActiveModel(string modelName)
    {
        Transform model = transform.Find(modelName);
        model.gameObject.SetActive(true);
        model.localEulerAngles = new Vector3(0.0f, 180f, 0.0f);
    }

}

在AvatarController Awake()方法调用这个静态属性,强转成 float 类型,添加如下代码

public void Awake()
    {
        initateRotate = Convert.ToSingle(SelectModel.rotateAngle);
    }

4. 来看一下效果

当kinect放置高度位于 2.6米的时候,json 文件 旋转设置成25的时候

avatar 显示效果如图所示

当kinect放置高度位于 2.6米的时候,json 文件 旋转设置成65的时候

avatar 显示效果如图所示

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值