public void StartAfterConfig()
    {
        configOn   = false;
        configured = true;

        if (ParentAvatar.TryGetComponent <MoveBoxPlayback>(out PlayBack))
        {
            PlayBack.standalone = false;
            PlayBack.enabled    = false;
        }


        // START AVATAR
        RootPosition = ParentAvatar.transform.Find("Bip01").Find("Bip01 Pelvis").gameObject;

        originalAvatarAbsoluteRotations = new Dictionary <string, Quaternion>();
        Retrieve_OriginalAvatarRotations(RootPosition);

        GameObject rockethead = GetRocketboxBone(JointId.Head, RootPosition);
        GameObject rocketfoot = GetRocketboxBone(JointId.FootLeft, RootPosition);

        rocketboxHeight = rockethead.transform.position.y - rocketfoot.transform.position.y;

        Offset = RootPosition.transform.position;



        // START MOCAP

        StartMoCap();


        // Start Playback
        PlayBack              = gameObject.AddComponent <MoveBoxPlayback>();
        PlayBack.standalone   = false;
        PlayBack.ParentAvatar = ParentAvatar;
        PlayBack.RootPosition = RootPosition;
        PlayBack.animationOn  = animationOn;
        PlayBack.eyeBlinkOn   = eyeBlinkOn;
        PlayBack.lipsyncOn    = lipsyncOn;

        //START EYEBLINK

        if (eyeBlinkOn)
        {
            PlayBack.StartEyeBlinks();
        }


        // START LIPSYNC

        if (lipsyncOn)
        {
            if (lipsyncMicOn)
            {
                PlayBack.lipsyncOn = false;
                if (!ParentAvatar.TryGetComponent <LipSync>(out lipsync))
                {
                    lipsync = ParentAvatar.AddComponent <LipSync>();
                }
                lipsync.nameOfMicrophone = nameMic;
                lipsync.realtimeMoCap    = true;
                lipsync.StartAfterConfig(null, RootPosition);
            }
            else
            {
                PlayBack.audioClip = audioClip;
                PlayBack.StartLipSync();
            }
        }


        // ANIMATION PLAYBACK
        if (animationOn & !isRealTime)
        {
            PlayBack.animationClip = animationClip;
            PlayBack.loopingOn     = loopingOn;
            PlayBack.StartAnimationPlayback();
        }
        else
        {
            PlayBack.animationOn = false;
        }
    }
Exemplo n.º 2
0
    public override void OnInspectorGUI()
    {
        // DrawDefaultInspector();

        MoveBoxPlayback mocap = (MoveBoxPlayback)target;


        if (!mocap.enabled)
        {
            return;
        }

        GUILayout.Space(20f);                                 //2
        GUILayout.Label("Animation", EditorStyles.boldLabel); //3

        if (mocap.standalone)
        {
            mocap.animationOn = EditorGUILayout.Toggle("ON/OFF", mocap.animationOn);
        }

        if (mocap.animationOn)
        {
            mocap.loopingOn     = EditorGUILayout.Toggle("Loop animation", mocap.loopingOn);
            mocap.animationClip = (AnimationClip)EditorGUILayout.ObjectField("Animation File", mocap.animationClip, typeof(AnimationClip), false);

            if (mocap.isRunTime)
            {
                GUILayout.Label("Current Time: " + mocap.currentTime, EditorStyles.boldLabel);
                GUILayout.Label("Crop Animation", EditorStyles.boldLabel);
                mocap.startpoint = EditorGUILayout.Slider("Start Time Normalized", mocap.startpoint, 0, 1);
                mocap.endpoint   = EditorGUILayout.Slider("End Time Normalized", mocap.endpoint, 0, 1);
                if (GUILayout.Button("Reset"))
                {
                    mocap.restartAnimation = true;
                }

                //additions for smoothloop:
                GUILayout.Label("Auto-Crop Animation", EditorStyles.boldLabel);
                mocap.searchWholeClip = EditorGUILayout.Toggle("Search Whole Clip", mocap.searchWholeClip);
                GUILayout.Label("When Search Whole Clip is off, Auto-Crop will trim between Start Time and End Time", EditorStyles.miniLabel);
                mocap.trimMarginSeconds = EditorGUILayout.Slider("Trimming Window", mocap.trimMarginSeconds, 0, mocap.animationClip.length / 2);
                GUILayout.Label("Trimming Window is how many seconds can be lopped off each end", EditorStyles.miniLabel);
                if (GUILayout.Button("Trim for Smoothest Loop"))
                {
                    mocap.findBestLoopTrim = true;
                }
            }
        }

        GUILayout.Space(20f);                               //2
        GUILayout.Label("LipSync", EditorStyles.boldLabel); //3
        if (mocap.standalone)
        {
            mocap.lipsyncOn = EditorGUILayout.Toggle("ON/OFF", mocap.lipsyncOn);
        }


        if (mocap.lipsyncOn)
        {
            mocap.audioClip = (AudioClip)EditorGUILayout.ObjectField("Audio File", mocap.audioClip, typeof(AudioClip), false);

            GUILayout.Label("Calibration (only on runtime)");
            if (mocap.lipsync != null & mocap.isRunTime)
            {
                if (GUILayout.Button("Re-start play"))
                {
                    mocap.lipsync.restart = true;
                }

                mocap.lipsync.VOLUME_THRESHOLD = EditorGUILayout.Slider("Threshold", mocap.lipsync.VOLUME_THRESHOLD, 0, 1);
                mocap.lipsync.OPEN_FACTOR      = EditorGUILayout.Slider("Mouth Openning", mocap.lipsync.OPEN_FACTOR, 1, 10);
                GUILayout.Label("Current Volume: " + mocap.lipsync.currentAverageVolume);
                GUILayout.Label("Silence Volume: " + mocap.lipsync.silenceVolume);

                if (GUILayout.Button("Calibrate Silence"))
                {
                    mocap.lipsync.captureSilence = true;
                }
            }
        }


        GUILayout.Space(20f);                                  //2
        GUILayout.Label("Eye Blinks", EditorStyles.boldLabel); //3
        if (mocap.standalone)
        {
            mocap.eyeBlinkOn = EditorGUILayout.Toggle("ON/OFF", mocap.eyeBlinkOn);
        }
    }