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 显示效果如图所示

猜你喜欢

转载自blog.csdn.net/qq_39097425/article/details/82108695
今日推荐