Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Dear Users,

Now, we are seeking users who can give us a hand with expertise to evolve our software more dynamically.
If you are willing to help us, we’d like you to make a registration for “Live2D Creators Circle” via the link below.
Designers, programmers, translators are especially welcomed so far.
(More detailed explanation will be given to you before we ask you to do tasks)

https://docs.google.com/forms/d/1G5KK_GL3ozwPXtTHrpi_ktbsI8UZf8jlYRSlDworyBo/viewform?usp=send_form

How do I loop a motion while touch swiping?

edited February 2016 in Help
I'm in process of understanding the framework right now. I've examined the SampleApp1 code and I can see that if I swipe on the head, it will only play the motion once. Same goes for the body.
How do I make a motion keep looping when I swipe on the head? When I swipe on the head or the body, it will loop same motion over and over until I released my touch and it will slowly fade to idle state.

It's kind of something like this (skip to 3:21)
While that it seems it only loops the face expression but I wonder if I can apply motion for the whole parts too.

Thank you :)

Tagged:

Comments

  • Hi, Ran_TH .

    Try to modify the code as follows .
    The modified point was put comments (Add Code) .

    SampleApp1/Assets/Scripts/sample
    [LAppModelProxy.cs]
    public class LAppModelProxy : MonoBehaviour
    {
        public String path="";
        public int sceneNo = 0;
    
        private LAppModel model;
        //---- Add Code start(set swip motion file) ----//
        public TextAsset swipingMtn;
        //---- Add Code end(set swip motion file) ----//
    
        private bool                isVisible = false ;
    	
    	void Awake()
        {
            if (path == "") return;
            model = new LAppModel(this);
    
            LAppLive2DManager.Instance.AddModel(this);
    
            var filename = FileManager.getFilename(path);
            var dir = FileManager.getDirName(path);
    
            Debug.Log("Load " + dir +"  filename:"+ filename);
    		model.LoadFromStreamingAssets(dir, filename);
    
        	// Add Code start(load swip motion file) ----//
            if(swipingMtn!=null)
                model.swipingMotion = Live2DMotion.loadMotion (swipingMtn.bytes);
        	// Add Code end(load swip motion file) ----//
        }
     ・
     ・
    
    set the swiping .mtn


    [LAppModel.cs]
     ・
     ・
        public void Init(String modelJson)
        {
     ・
     ・
            eyeBlink = new L2DEyeBlink();
    
            view.SetupView(
                live2DModel.getCanvasWidth(),
                live2DModel.getCanvasHeight());
    
            updating = false;
            initialized = true;
        }
    
        //---- Add Code start ----//
        bool isSwiping = false;
        public void setSwiping(bool b)
        {
            isSwiping = b;
        }
    
    	// All stop Motion
        public void stopAllMotions()
        {
            mainMotionManager.stopAllMotions ();
        }
    
        public AMotion swipingMotion;
        int motionno=-1;
        //---- Add Code end ----//
    
        public void Update()
        {
            if ( ! isInitialized() || isUpdating())
            {
                return;
            }
    
    
            view.Update(Input.acceleration);
            if (live2DModel == null)
            {
                if (LAppDefine.DEBUG_LOG) Debug.Log("Can not update there is no model data");
                return;
            }
    
            if (!Application.isPlaying)
            {
                live2DModel.update();
                return;
            }
    
            long timeMSec = UtSystem.getUserTimeMSec() - startTimeMSec;
            double timeSec = timeMSec / 1000.0;
            double t = timeSec * 2 * Math.PI;// 2πt
    
            if (mainMotionManager.isFinished())
            {
                StartRandomMotion(LAppDefine.MOTION_GROUP_IDLE, LAppDefine.PRIORITY_IDLE);
            }
    
            //---- Add Code start ----//
            if (mainMotionManager.isFinished (motionno) && isSwiping && swipingMotion!=null) 
            {
                Debug.Log ("----- SWIPING -----");
                motionno = mainMotionManager.startMotion (swipingMotion);
            }
            //---- Add Code end ----//
    
            live2DModel.loadParam();
            bool update = mainMotionManager.updateParam(live2DModel);
     ・
     ・
    
    [MyGameController.cs]
     ・
     ・
    	void Update () {
            if (Input.GetMouseButtonDown(0))
            {
                lastX = Input.mousePosition.x;
                lastY = Input.mousePosition.y;
                LAppLive2DManager.Instance.TouchesBegan(Input.mousePosition);
            }
            else if (Input.GetMouseButton(0))
            {
                if (lastX == Input.mousePosition.x && lastY == Input.mousePosition.y)
                {
                    return;
                }
                lastX = Input.mousePosition.x;
                lastY = Input.mousePosition.y;
                LAppLive2DManager.Instance.TouchesMoved(Input.mousePosition);
                //---- Add Code start(When no swipping) ----//
                GameObject.Find ("Live2D_Canvas_Haru").GetComponent<LAppModelProxy> ().GetModel ().setSwiping (true);
                //---- Add Code end(When no swipping) ----//
            }
            else if (Input.GetMouseButtonUp(0))
            {
                lastX = -1;
                lastY = -1;
                LAppLive2DManager.Instance.TouchesEnded(Input.mousePosition);
                //---- Add Code start(When no swipping) ----//
                GameObject.Find ("Live2D_Canvas_Haru").GetComponent<LAppModelProxy> ().GetModel ().setSwiping (false);
                GameObject.Find ("Live2D_Canvas_Haru").GetComponent<LAppModelProxy> ().GetModel ().stopAllMotions ();
                //---- Add Code end(When no swipping) ----//
            }
    
    The result will be this way .
  • edited December 2015
    You're truly a hero, naotaro. Thank you so much :D
    Now I've noticed, it does loop the motion, but at the end of motion, it will jump back to first frame. Can I make the loop returning to specific frame instead of first frame?



    I'd like to make my model keep in blushing state with eyes shut until I released my touch.

    Or should I used Expressions for this? I'm thinking like... when the motion ends, I switched to display the expression mimicking last frame of the motion.
  • Thanks! I'm aiming to Live2D hero o:)

    However , I don't know how to loop returning to specific frame .

    It is you're right .
    If your model keep in blushing state with eyes shut,
    I think that it is good to use Expressions motion also together .

    There is a simple Expressions use source in the past of thread .
    Please be here in reference .


    How do I change the model's expressions in Unity during gameplay?

Sign In or Register to comment.