Пример #1
0
    /***
     * Replaces the current Bitmoji in the scene with a new one
     */
    private async void ReplaceBitmoji(GameObject avatarObject, bool doTheDance, string avatarId = null)
    {
        // Clear children
        var children = new List <GameObject>();

        foreach (Transform child in BitmojiAvatar.transform)
        {
            children.Add(child.gameObject);
        }
        children.ForEach(child => Destroy(child));

        // Set animation
        if (doTheDance)
        {
            Animation animation = avatarObject.AddComponent <Animation>();

            string           danceAnimationFilename = LOCAL_DANCE_ANIMATION_PREFIX;
            AvatarAttributes avatarAttributes       = avatarObject.GetComponent <AvatarAttributes>();
            if (avatarAttributes != null && avatarAttributes.AnimationBodyType != null)
            {
                danceAnimationFilename += avatarAttributes.AnimationBodyType;
            }
            else
            {
                danceAnimationFilename += "default";
            }
            danceAnimationFilename += (LevelOfDetail.Equals(Assets.LevelOfDetail.LOD0) ? "_LOD0.glb" : "_LOD3.glb");

            AnimationClip danceAnimation = Assets.AddAnimationClipFromFile(danceAnimationFilename, LevelOfDetail, true);
            danceAnimation.wrapMode = WrapMode.Loop;
            animation.AddClip(danceAnimation, danceAnimation.name);
            animation.CrossFade(danceAnimation.name);
        }

        // Set parent
        avatarObject.transform.parent        = BitmojiAvatar.transform;
        avatarObject.transform.localRotation = Quaternion.identity;

        if (avatarId != null)
        {
            RawImage rawImageComponent = StickerObject.GetComponent <RawImage>();
            if (rawImageComponent != null)
            {
                rawImageComponent.texture = await Assets.GetStickerAsTexture(avatarId, STICKER_ID);
            }
        }
    }