- Home /
Animator.GetBoneTransform returns null
GetBoneTransform returns null after upgrading Unity version.
In Unity2018.4.19 it is not null, but in Unity2020.3.8 it returns null.
And the avatar is a prefab object. If it is an object in the scene, it is not null in Unity 2020.
I don't want to put the avatar object in the scene as much as possible. If you have a good idea, please advise. Thanks.
public GameObject avatar;
void Start()
{
Animator anim = this.avatar.GetComponent<Animator>();
Transform trans = anim.GetBoneTransform(HumanBodyBones.LeftHand);
if(trans == null){ Debug.LogWarning("LeftHand is null"); }
else { Debug.LogWarning("LeftHand is NOT null"); }
}
Answer by JoeTheTortilla · Sep 16, 2021 at 02:57 AM
I ran into this issue myself after upgrading.
For me, the issue appeared to be caused from the Armature's hierarchy being disabled. I thought this odd as this was not an issue in previous versions. Maybe Unity changed how the call searches the hierarchy?
This call appears to work as expected when the hierarchy is enabled.
I don't know the details, but it seems to be as designed. https://issuetracker.unity3d.com/issues/animator-dot-getbonetransform-doesnt-get-bones-transform-from-prefab
Answer by peacemakers1980 · May 21, 2021 at 08:09 PM
Sometimes a bone isnt stored or read the same with diffrent versions, try opening the model in the animator itself to see if it sees the correct bones and positions/animation data then save it from the animator on the new version of unity to make sure its saved in the format that version reads. Sometimes you get this when importing from other programs/assets as well since each editor saves data diffrently in a diffrent format, so often just opening in the built in animator can often fix this in my experience.
Thank you very much! But I've tried various things and still haven't solved the problem.