コード例 #1
0
    private MotionPlayer motionPlayer; //GetComponent()による自動取得

    void Start()
    {
        motionPlayer = GetComponent <MotionPlayer>();

        playLower();
        playUpper();
    }
コード例 #2
0
 private void ResetMotionPlayer()
 {
     _motionPlayer = new MotionPlayer(_motion, _poser);
     _motionPlayer.SeekFrame(0);
     _poser.PrePhysicsPosing();
     _physicsReactor.Reset();
     _poser.PostPhysicsPosing();
 }
コード例 #3
0
 //コンストラクタ
 public MotionMixer(MotionPlayer player, PlayableGraph graph)
 {
     this.player         = player;
     this.playParam      = new MotionPlayerParam();
     this.beforePlayable = AnimationClipPlayable.Create(graph, null);
     this.mixer          = AnimationMixerPlayable.Create(graph, 2);
     this.graph          = graph;
 }
コード例 #4
0
 private void OnStopLoop(object sender, RoutedEventArgs e)
 {
     if (motionPlayer != null)
     {
         //If no stop the player, it's going to be weird
         motionPlayer.Stop();
         motionPlayer = null;
     }
 }
コード例 #5
0
        private void DoGenerate(MmdModel model, MmdMotion motion, string savePath, float frameStepLength, float timeAfterMotionFinish, float physicsStepLength)
        {
            try
            {
                _status = GenerateStatus.Preparing;
                if (physicsStepLength > frameStepLength)
                {
                    physicsStepLength = frameStepLength;
                }
                var poser          = new Poser(model);
                var motionPlayer   = new MotionPlayer(motion, poser);
                var physicsReactor = new BulletPyhsicsReactor();

                var totalTimeLength = motion.Length / 30.0 + timeAfterMotionFinish;
                var totalStepCount  = (int)(totalTimeLength / frameStepLength) + 1;
                var playPos         = 0.0;
                var maxSubSteps     = (int)(frameStepLength / physicsStepLength) + 1;

                using (var fileStream = new FileStream(savePath, FileMode.Create))
                {
                    using (var bufferedStream = new BufferedStream(fileStream))
                    {
                        using (var binaryWriter = new BinaryWriter(bufferedStream))
                        {
                            WriteHeader(binaryWriter, model, totalStepCount + 1, frameStepLength);
                            _status           = GenerateStatus.CalculatingFrames;
                            _totalFrames      = totalStepCount + 1;
                            _calculatedFrames = 0;
                            physicsReactor.AddPoser(poser);
                            motionPlayer.SeekFrame(0);
                            poser.PrePhysicsPosing();
                            physicsReactor.Reset();
                            poser.PostPhysicsPosing();
                            WritePose(binaryWriter, poser);
                            _calculatedFrames = 1;
                            for (var i = 0; i < totalStepCount; ++i)
                            {
                                playPos += frameStepLength;
                                motionPlayer.SeekTime(playPos);
                                poser.PrePhysicsPosing();
                                physicsReactor.React(frameStepLength, maxSubSteps, physicsStepLength);
                                poser.PostPhysicsPosing();
                                WritePose(binaryWriter, poser);
                                _calculatedFrames = i + 2;
                            }
                        }
                    }
                }
                _status = GenerateStatus.Finished;
            }
            catch (Exception e)
            {
                _status = GenerateStatus.Failed;
                Debug.LogException(e);
            }
        }
コード例 #6
0
 void ToggleRecordingFor(MotionPlayer remote, SteamVR_TrackedObject srcTrackedObj)
 {
     if (remote.IsRecording())
     {
         remote.Playback();
     }
     else
     {
         remote.RecordMotion(srcTrackedObj.gameObject);
     }
 }
コード例 #7
0
 private void OnLoopAllMotionsClick(object sender, RoutedEventArgs e)
 {
     if (model?.Motion != null)
     {
         OnStopLoop(null, null);
         var motions = model.Motion.Values.SelectMany(x => x).ToArray();
         motionPlayer      = new MotionPlayer(RenderView, motions);
         motionPlayer.Loop = true;
         motionPlayer.Begin();
     }
 }
コード例 #8
0
 private void OnGroupLoop(object sender, RoutedEventArgs e)
 {
     if (model?.Motion != null && sender is MenuItem)
     {
         OnStopLoop(null, null);
         var menuItem = (MenuItem)sender;
         motionPlayer      = model.CreatePlayer(RenderView, menuItem.Header.ToString());
         motionPlayer.Loop = true;
         motionPlayer.Begin();
     }
 }
コード例 #9
0
    public void ConnectRemote(GameObject clone)
    {
        CloneController cloneCtrl = clone.GetComponent <CloneController>();

        // attach left hand tracked object to clone
        cloneCtrl.AttachTrackedObject("LeftHand", srcLeftHand);
        // attach right hand tracked object to clone
        cloneCtrl.AttachTrackedObject("RightHand", srcRightHand);

        // attach left, right, and head of clone to motion recorder
        remoteLeftHand  = cloneCtrl.GetPartMotionPlayer("LeftHand");
        remoteRightHand = cloneCtrl.GetPartMotionPlayer("RightHand");
        remoteHead      = cloneCtrl.GetPartMotionPlayer("Head");
    }
コード例 #10
0
 private void OnLoopThisMotionsClick(object sender, RoutedEventArgs e)
 {
     if (model?.Motion != null)
     {
         OnStopLoop(null, null);
         var motion = GetMotion(ListMotion.SelectedItem.ToString());
         if (motion != null)
         {
             motionPlayer      = new MotionPlayer(RenderView, new L2DMotion[] { motion });
             motionPlayer.Loop = true;
             motionPlayer.Begin();
         }
     }
 }
コード例 #11
0
        public BonePosePreCalculator(Poser poser, BulletPyhsicsReactor physicsReactor, MotionPlayer motionPlayer, double stepLength, double startTimePos, int frameCacheSize, bool autoStepLength)
        {
            _poseMode            = false;
            _poser               = poser;
            _physicsReactor      = physicsReactor;
            _motionPlayer        = motionPlayer;
            _stepLength          = stepLength;
            _bonePoseImagesStore = new BlockingQueue <BonePoseFrame>(frameCacheSize);
            _timePos             = startTimePos;
            _autoStepLength      = autoStepLength;

            _motionPlayer.SeekTime(startTimePos);
            _poser.PrePhysicsPosing();
            _physicsReactor.Reset();
            _poser.PostPhysicsPosing();
            var image = GetBonePoseImage(_poser);

            _bonePoseImagesStore.Enqueue(new BonePoseFrame(startTimePos, image));
        }
コード例 #12
0
        public BonePosePreCalculator(BonePoseCalculatorWorker worker, Poser poser, BulletPyhsicsReactor physicsReactor, MotionPlayer motionPlayer, float stepLength, float startTimePos, int frameCacheSize, bool autoStepLength)
        {
            _poseMode            = false;
            _poser               = poser;
            _physicsReactor      = physicsReactor;
            _motionPlayer        = motionPlayer;
            _stepLength          = stepLength;
            _bonePoseImagesStore = new SynchronizedQueue <BonePoseFrame>();
            _timePos             = startTimePos;
            _autoStepLength      = autoStepLength;
            _frameCacheSize      = frameCacheSize;
            _motionPlayer.SeekTime(startTimePos);
            _poser.PrePhysicsPosing();
            _physicsReactor.Reset();
            _poser.PostPhysicsPosing();
            var image = GetBonePoseImage(_poser);

            _bonePoseImagesStore.Enqueue(new BonePoseFrame(startTimePos, image));
            _worker = worker;
        }
コード例 #13
0
    public void OnEnable()
    {
        player = (MotionPlayer)target;

        play        = Resources.Load <Texture>("GUI/play");
        stop        = Resources.Load <Texture>("GUI/stop");
        rewind      = Resources.Load <Texture>("GUI/rewind");
        fastforward = Resources.Load <Texture>("GUI/fastforward");

        projectPath = System.IO.Directory.GetCurrentDirectory();
        if (!projectPath.EndsWith("\\"))
        {
            projectPath += "\\";
        }

        string trackingFile = player.TrackingFile;

        if (string.IsNullOrEmpty(trackingFile))
        {
            loadingPath = "";
        }
        else
        {
            loadingPath = new System.IO.FileInfo(trackingFile).DirectoryName;

            // Reload the file if cached data has been reset
            if (!player.HasData)
            {
                player.LoadTrackingData(trackingFile);
                if (player.PreviewMovement)
                {
                    player.Refresh();
                }
            }
        }
    }