测试环境 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 显示效果如图所示