参考:
https://blog.csdn.net/Nbin_Newby/article/details/128045244
记录生成Avatar。把自定义格式导入unity生成Avatar
public class AvatarTool
{
public SkeletonBone[] CreateKeleton(GameObject go)
{
Transform[] transforms = go.GetComponentsInChildren<Transform>();
SkeletonBone[] skeletonBones = new SkeletonBone[transforms.Length];
for (int i = 0; i < transforms.Length; i++)
{
var transform = transforms[i];
skeletonBones[i] = new SkeletonBone
{
name = transform.name,
position = transform.localPosition,
rotation = transform.localRotation,
scale = transform.localScale
};
}
return skeletonBones;
}
public HumanBone[] CreateHuman(GameObject go, Dictionary<string, string> map)
{
Transform[] transforms = go.GetComponentsInChildren<Transform>();
List<HumanBone> humanBones = new List<HumanBone>();
foreach (Transform transform in transforms)
{
if (map.TryGetValue(transform.name, out string name))
{
var humanBone = new HumanBone
{
boneName = transform.name,
humanName = name,
limit = new HumanLimit()
};
humanBone.limit.useDefaultValues = true;
humanBones.Add(humanBone);
}
}
return humanBones.ToArray();
}
/// <summary>
///
/// </summary>
/// <param name="go">binding bones and weight</param>
/// <param name="map">skeletal mapping</param>
/// <param name="path">save path</param>
public void CreateAvatar(GameObject go, Dictionary<string, string> map,string path)
{
var avatar = AvatarBuilder.BuildHumanAvatar(go, new HumanDescription
{
armStretch = 0.05f,
feetSpacing = 0f,
hasTranslationDoF = false,
legStretch = 0.05f,
lowerArmTwist = 0.5f,
lowerLegTwist = 0.5f,
upperArmTwist = 0.5f,
upperLegTwist = 0.5f,
skeleton = CreateKeleton(go),
human = CreateHuman(go, map)
});
var ext = Path.GetExtension(path);
if (ext != ".asset")
{
path = path.Replace(ext, ".asset");
}
AssetDatabase.CreateAsset(avatar, path);
}
}