Example #1
0
    void Update()
    {
        live2dModel.setMatrix(transform.localToWorldMatrix * live2dCanvasPos);
        if (l2dMotionManager.isFinished())
        {
            StartMotion(0, 1);
        }
        else if (Input.GetKeyDown(KeyCode.Space))
        {
            StartMotion(14, 2);
        }
        l2dMotionManager.updateParam(live2dModel);

        Vector3 pos = Input.mousePosition;

        drag.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        live2dModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
        live2dModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
        live2dModel.setParamFloat("PARAM_EYE_BALL_X", -drag.getX());
        live2dModel.setParamFloat("PARAM_EYE_BALL_Y", -drag.getY());
        drag.update();

        long time = UtSystem.getUserTimeMSec();

        physicHairSide.update(live2dModel, time);
        if (Input.GetKeyDown(KeyCode.Space))
        {
            motionIndex = (motionIndex + 1 >= expressionMotions.Length ? 0 : motionIndex + 1);
            //expressionMotions[motionIndex].setLoop(true);
            motionQueueManager.startMotion(expressionMotions[motionIndex]);
        }
        motionQueueManager.updateParam(live2dModel);
        live2dModel.update();
    }
        void Update()
        {
            if (live2DModel == null)
            {
                return;
            }
            live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

            if (!Application.isPlaying)
            {
                live2DModel.update();
                return;
            }


            if (motionMgr.isFinished() || main != _State)
            {
                //歩き
                if (_State == Main.CharaState.Walk)
                {
                    live2DModel.setParamFloat("Param3", -1);
                    live2DModel.setParamFloat("Param7", 0);

                    motionMgr.startMotion(motions[0]);
                }
                //走り
                else if (_State == Main.CharaState.Run)
                {
                    live2DModel.setParamFloat("Param3", -1);
                    live2DModel.setParamFloat("Param7", 0);

                    motionMgr.startMotion(motions[1]);
                }
                //停止
                if (_State == Main.CharaState.Wait)
                {
                    //live2DModel.setParamFloat("Param3", -1);
                    motionMgr.startMotion(motions[2]);
                    //motionMgr.stopAllMotions();
                }
            }

            main = _State;

            motionMgr.updateParam(live2DModel);
            live2DModel.update();
            live2DModel.draw();
        }
Example #3
0
    void Update()
    {
        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }



        double t = (UtSystem.getUserTimeMSec() / 1000.0) * 2 * Math.PI;

        if (Input.GetMouseButtonUp(0))
        {
            mouthcheck = !mouthcheck;
        }

        //テキストを読み上げているか判定
        if (mouthcheck)
        {
            mouth = (float)Mathf.PingPong(time += mouthspeed, 1);           //口動かす
        }
        else
        {
            //徐々に口を閉じる
            if (mouth > 0)
            {
                mouth -= 0.1f;
            }
        }

        live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", mouth);        //口


        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.2345)), 1);        //呼吸


        eyeBlink.setParam(live2DModel);        //目ぱち
         
        live2DModel.update();
    }
Example #4
0
    // Update is called once per frame
    void Update()
    {
        live2DMode.setMatrix(transform.localToWorldMatrix * transformMar);
        motionManager.updateParam(live2DMode);

        Vector3 mousePos = Input.mousePosition;

        if (Input.GetMouseButton(0))
        {
            dragEff.Set(mousePos.x / Screen.width * 2 - 1, mousePos.y / Screen.height * 2 - 1);
        }

        if (Input.GetMouseButtonUp(0))
        {
            dragEff.Set(0, 0);
        }
        dragEff.update();
        if (dragEff.getX() != 0 && dragEff.getY() != 0)
        {
            live2DMode.setParamFloat("PARAM_ANGLE_X", dragEff.getX() * 30);
            live2DMode.setParamFloat("PARAM_ANGLE_Y", dragEff.getY() * 30);
            live2DMode.setParamFloat("PARAM_EYE_BALL_X", -dragEff.getX());
            live2DMode.setParamFloat("PARAM_EYE_BALL_Y", -dragEff.getY());
            live2DMode.setParamFloat("PARAM_BODY_ANGLE_X", 10 * dragEff.getX());
            live2DMode.setParamFloat("PARAM_BODY_ANGLE_Y", 10 * dragEff.getY());
        }
        live2DMode.update();
    }
Example #5
0
    void Update()
    {
        if (live2DModel == null)
        {
            load();
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        var pos = Input.mousePosition;

        if (Input.GetMouseButtonDown(0))
        {
            //
        }
        else if (Input.GetMouseButton(0))
        {
            dragMgr.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            dragMgr.Set(0, 0);
        }


        dragMgr.update();
        live2DModel.setParamFloat("PARAM_ANGLE_X", dragMgr.getX() * 30);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);

        live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());

        live2DModel.setParamFloat("PARAM_SMILE", transform.parent.parent.parent.GetComponent <HumanLaught>().laught);

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }

        live2DModel.update();
    }
Example #6
0
    void Update()
    {
        if (live2DModel == null)
        {
            load();
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        if (!Application.isPlaying)
        {
            live2DModel.update();
            //motionManager.updateParam (live2DModel);
            return;
        }

        /*
         * var pos = Input.mousePosition;
         * if (Input.GetMouseButtonDown(0))
         * {
         * //
         * }
         * else if (Input.GetMouseButton(0))
         * {
         * dragMgr.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
         * }
         * else if (Input.GetMouseButtonUp(0))
         * {
         * dragMgr.Set(0, 0);
         * }
         */


        dragMgr.update();
        live2DModel.setParamFloat("PARAM_ANGLE_X", dragMgr.getX() * 30);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);

        live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }

        if (motionManager.isFinished())
        {
            StartCoroutine(FadeModel(0, 1));
        }
        live2DModel.update();
        motionManager.updateParam(live2DModel);
    }
    void LateUpdate()
    {
        //모션이 끝남
        //모션을 1회 재생했을 때 해당 모션이 완전이 재생되고 종료되었는지는 isFinished 메소드로 체크 가능.
        if (l2dMotionManager.isFinished())
        {
            if (enableAnimationForIdle)
            {
                //idle 애니메이션을 재생하길 원하는 경우
                //기본 모션으로 바꿔준다.
                //l2dMotionManager.startMotion(motionDataManager.GetLiveMotion("IDLE"));
                StartIdleMotion();
                //isBreath = false;
            }
            else
            {
                //모션이 끝나긴 했는데, IDLE 애니메이션을 루프재생 하길 원치 않은 경우
                if (breathMotion != null)
                {
                    //숨쉬기 모션이 있으면 모션이 끝났을때, 모션의 마지막 프레임 자세를 간직한체 그 위에 숨쉬는 모습을 덧칠해줌.
                    l2dMotionManager.startMotion(breathMotion_, false);
                    isBreath = true;
                }
            }
        }


        if (isBreath)
        {
            l2dEyeBlink.updateParam(model);
        }


        //모션 매니저들이 자신들이 가진 모션의 속성들로 모델을 갱신
        l2dMotionManager.updateParam(model);
        l2dExpressioNMotionManager.updateParam(model);

        //만약 캐릭터가 말하는 중이면 입모양 움직여 주세요. 먼저 립싱크값 갱신
        SetLipSync();
        //그 다음에 갱신된 립싱크 값으로 입에 해당하는 속성의 값을 갱신합니다.
        model.setParamFloat(L2DStandardID.PARAM_MOUTH_OPEN_Y, lipSyncValue, 0.7f);


        l2dPhysics.updateParam(model);
        //포즈 업데이트
        l2dPose.updateParam(model);

        //그리고 최종 갱신.
        model.update();
    }
Example #8
0
    void Update()
    {
        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }
        if (motionMgr.isFinished())
        {
            SetMotion(Live2DMotion.loadMotion(motionFiles[0].bytes));
        }

        //double t = (UtSystem.getUserTimeMSec() / 1000.0) * 2 * Math.PI;
        //live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", (float)(2 * Math.Sin(t / 0.5)));

        //Debug.Log(live2DModel.getParamFloat("PARAM_MOUTH_OPEN_Y"));
        motionMgr.updateParam(live2DModel);

        //live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", (float)(2 * Math.Sin(t / 0.5)));
        //Debug.Log(live2DModel.getParamFloat("PARAM_MOUTH_OPEN_Y"));
        /*先播放mtn文件,再setParamFloat,不然会被mtn文件覆盖*/
        if (!GameParam.isTalkEnd)
        {
            //Debug.Log(GameParam.amplitude);
            live2DModel.setParamFloat("PARAM_MOUTH_FORM", (float)1f);
            live2DModel.setParamFloat("PARAM_MOUTH_SIZE", (float)0.8f);
            live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", (float)GameParam.amplitude);
        }
        live2DModel.update();
    }
Example #9
0
    void Update()
    {
        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            live2DModel.draw();
            return;
        }
        float volume = 0;

        if (smoothing)
        {
            float currentVolume = GetCurrentVolume(GetComponent <AudioSource>());

            if (Mathf.Abs(lastVolume - currentVolume) < 0.2f)
            {
                volume = lastVolume * 0.9f + currentVolume * 0.1f;
            }
            else if (lastVolume - currentVolume > 0.2f)
            {
                volume = lastVolume * 0.7f + currentVolume * 0.3f;
            }
            else
            {
                volume = lastVolume * 0.2f + currentVolume * 0.8f;
            }
            lastVolume = volume;
        }
        else
        {
            volume = GetCurrentVolume(GetComponent <AudioSource>());
        }


        live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", volume * scaleVolume);


        live2DModel.update();
    }
Example #10
0
    /*动作实现类*/
    private void DragMove()
    {
        Vector3 pos = Input.mousePosition;

        /*--pos.x|pox.y--*/

        this.ddx = pos.x / (Screen.width) * 2 - 1;  //绝对坐标变换
        this.ddy = pos.y / (Screen.height) * 2 - 1; //绝对坐标变换
        float dx;                                   //真实轴向坐标
        float dy;                                   //真实轴向坐标

        /*-*/
        //if (pos.x > TrueX) { dx = -ddx; } else { dx = ddx; }
        //if (pos.y > TrueY) { dy = -ddy; } else { dy = ddy; }
        /*-*/
        if (Input.GetMouseButton(0))
        {
            drag.Set(this.ddx, this.ddy);
        }
        //把屏幕坐标转换成live2D检测的坐标
        else if (Input.GetMouseButtonUp(0))
        {
            drag.Set(0, 0);
        }
        //点击重设位置
        //参数及时更新,考虑加速度等自然因素,计算坐标,进行逐帧更新
        drag.update();
        //模型的转向
        if (drag.getX() != 0)
        {
            live2DModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
            live2DModel.setParamFloat("PARAM_ANGLE_Y", 30 * drag.getY());
            live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
            if (flag_Eyeball == true)
            {
                //眼睛跟随鼠标移动
                live2DModel.setParamFloat("PARAM_EYE_BALL_X", drag.getX());
                live2DModel.setParamFloat("PARAM_EYE_BALL_Y", drag.getY());
            }
            else
            {
                //眼睛只望向前方
                live2DModel.setParamFloat("PARAM_EYE_BALL_X", -drag.getX());
                live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -drag.getY());
            }
        }
    }
Example #11
0
    void Update()
    {
        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        double t = (UtSystem.getUserTimeMSec() / 1000.0) * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_ANGLE_X", (float)(30 * Math.Sin(t / 3.0)));

        live2DModel.update();
    }
Example #12
0
    // 드래그한 결과를 Live2D 파라미터에 반영한다
    void Drag()
    {
        m_dragMgr.update();
        // 얼굴이 향한 방향을 따라가는 처리
        m_live2DModel.addToParamFloat("PARAM_ANGLE_X", m_dragMgr.getX() * 30);
        m_live2DModel.addToParamFloat("PARAM_ANGLE_Y", m_dragMgr.getY() * 30);

        // 몸이 향한 방향을 따라가는 처리
        m_live2DModel.addToParamFloat("PARAM_BODY_ANGLE_X", m_dragMgr.getX() * 10);

        // 눈이 따라가게 하는 처리
        m_live2DModel.addToParamFloat("PARAM_EYE_BALL_X", m_dragMgr.getX());
        m_live2DModel.addToParamFloat("PARAM_EYE_BALL_Y", m_dragMgr.getY());

        // 시간에 따라 변화하는 사인파 곡선에 맞춰 호흡 파라미터를 업데이트한다
        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        m_live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));
    }
Example #13
0
    void Update()
    {
        if (_live2DModel == null)
        {
            _Load();
        }
        _live2DModel.setMatrix(transform.localToWorldMatrix * _live2DCanvasPos);

        if (!Application.isPlaying)
        {
            _live2DModel.update();
            return;
        }

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        _live2DModel.setParamFloat("PARAM_ANGLE_X", (float)(30f * Math.Sin(t / 3.0)));


        _live2DModel.update();
    }
Example #14
0
        /*-*/
        private void DragMove()
        {
            Vector3 pos = Input.mousePosition;

            /*--pos.x|pox.y--*/

            ddx = pos.x / (Screen.width) * 2 - 1;  //绝对坐标变换
            ddy = pos.y / (Screen.height) * 2 - 1; //绝对坐标变换

            if (Input.GetMouseButton(0))
            {
                drag.Set(ddx, ddy);
            }
            //把屏幕坐标转换成live2D检测的坐标
            else if (Input.GetMouseButtonUp(0))
            {
                drag.Set(0, 0);
            }
            //点击重设位置
            //参数及时更新,考虑加速度等自然因素,计算坐标,进行逐帧更新
            drag.update();

            if (drag.getX() != 0)
            {
                live2DModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
                live2DModel.setParamFloat("PARAM_ANGLE_Y", 30 * drag.getY());
                live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
                if (EyeFlag == true)
                {
                    //眼睛跟随鼠标移动
                    live2DModel.setParamFloat("PARAM_EYE_BALL_X", drag.getX());
                    live2DModel.setParamFloat("PARAM_EYE_BALL_Y", drag.getY());
                }
                else
                {
                    //眼睛只望向前方
                    live2DModel.setParamFloat("PARAM_EYE_BALL_X", -drag.getX());
                    live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -drag.getY());
                }
            }
        }
Example #15
0
    void OnRenderObject()
    {
        if (live2DModel == null)
        {
            load();
        }

        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);


        if (!Application.isPlaying)
        {
            live2DModel.update();
            live2DModel.draw();
            return;
        }

        dragMgr.update();
        live2DModel.setParamFloat("PARAM_ANGLE_X", dragMgr.getX() * 30);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);

        live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }

        live2DModel.update();
        live2DModel.draw();
    }
Example #16
0
    void Update()
    {
        if (live2DModel == null)
        {
            load();
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }
        while (client.Count() > 0)
        {
            meanindex = (meanindex + 1) % mean_size;
            string jsonLine = client.Receive().Split('\n')[0];
            var    json     = MiniJSON.Json.Deserialize(jsonLine) as Dictionary <string, object>;
            Debug.Log(jsonLine);

            if (json == null)
            {
                continue;
            }
            Debug.Log(json["AcX"].GetType() + "type of json");
            Debug.Log(json["AcX"]);
            acX = (Int64)json["AcX"] / AccRatio;
            acY = (Int64)json["AcY"] / AccRatio;
            acZ = (Int64)json["AcZ"] / AccRatio;
            _lastGyX[meanindex] = ((Int64)json["GyX"]);
            _lastGyY[meanindex] = ((Int64)json["GyY"]);
            _lastGyZ[meanindex] = ((Int64)json["GyZ"]);
            gyX = gyY = gyZ = 0.0f;
            for (var i = 0; i < mean_size; i++)
            {
                gyX += _lastGyX[i];
                gyY += _lastGyY[i];
                gyY += _lastGyY[i];
            }
            gyX = gyX / GyroRatio;
            gyY = gyY / GyroRatio;
            gyZ = gyZ / GyroRatio;

            Debug.LogFormat("{0} {1} {2} {3} {4} {5}", acX, acY, acZ, gyX, gyY, gyZ);
            break;
        }


        live2DModel.setParamFloat("PARAM_ANGLE_X", acX);             // head panning : value range -30.0 to 30.0 (degree)
        live2DModel.setParamFloat("PARAM_ANGLE_Y", acY);             // head banking back and forth : -30 to 30

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", acZ);        // body angle sideway : -30.0 to 30.0

        live2DModel.setParamFloat("PARAM_EYE_L_OPEN", gyX + 0.5f);   // 0 to 1
        live2DModel.setParamFloat("PARAM_EYE_R_OPEN", gyX + 0.5f);   //

        live2DModel.setParamFloat("PARAM_BROW_L_Y", gyX);            // -1.0 to 1.0
        live2DModel.setParamFloat("PARAM_BROW_R_Y", gyX);            //

        live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", gyY + 0.5f); // 0 to 1.0
        live2DModel.setParamFloat("PARAM_MOUTH_FORM", gyZ);          //  -1.0 to 1.0


        live2DModel.setParamFloat("PARAM_BREATH", 1);

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }

        live2DModel.update();
    }
Example #17
0
    // Update is called once per frame
    void Update()
    {
        int motionIndex = 0;

        // 根据返回的情感指数,在对应情感动作中随机选取
        if (ChatWithTuling.flag == true)
        {
            rate = ChatWithTuling.rate;
            // 积极动作
            if (rate > 0.5)
            {
                motionIndex = optimisticIndex[getRandomIndex(optimisticIndex.Length)];
            }
            // 消极动作
            else if (rate < 0)
            {
                motionIndex = pessimisticIndex[getRandomIndex(pessimisticIndex.Length)];
            }
            // 中立动作
            else
            {
                motionIndex = neutralIndex[getRandomIndex(neutralIndex.Length)];
            }

            print("rate: " + rate + ", motionIndex: " + motionIndex);

            ChatWithTuling.flag = false;
        }


        //为模型设置用于显示的画布,后面是2个矩阵相乘
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCancasPos);

        //设置物理过程,更新模型的参数
        physics.updateParam(live2DModel);

        //设置眨眼动作,设置模型的参数
        eyeBlinkMotion.setParam(live2DModel);

        //按M键切换动作并播放声音
        if (motionManager.isFinished())                         //动作完成,切换到默认的动作
        {
            motionManager.startMotionPrio(motions[0], 1);       //默认的动作的优先级为1,数值较高,优先级较大
        }
        // 展示特定情绪的动作
        else if (motionIndex != 0)
        {
            motionManager.startMotionPrio(motions[motionIndex], 2);     //新动作的优先级为2
        }

        ////按M键切换动作并播放声音
        //if (motionManager.isFinished())                         //动作完成,切换到默认的动作
        //{
        //    motionManager.startMotionPrio(motions[0], 1);       //默认的动作的优先级为1,数值较高,优先级较大
        //}
        //else if (Input.GetKeyDown(KeyCode.M))
        //{
        //    motionManager.startMotionPrio(motions[motionIndex], 2);     //新动作的优先级为2
        //    //motionIndex++;

        //    print("motion index: " + motionIndex + "\n");

        //    if (motionIndex >= motions.Length)
        //    {
        //        motionIndex = 0;
        //    }


        //    //播放声音
        //    audioSource.clip = audioClips[audioIndex];
        //    audioSource.Play();

        //    audioIndex++;
        //    if (audioIndex >= audioClips.Length)
        //    {
        //        audioIndex = 0;
        //    }

        //}
        motionManager.updateParam(live2DModel);             //设置了动作后,更新模型的参数

        //表情的动作是一直保持的
        if (Input.GetKeyDown(KeyCode.E))
        {
            expressionManager.startMotion(expressions[expressionIndex]);

            print("expression index: " + expressionIndex + "\n");

            expressionIndex++;
            if (expressionIndex >= expressionFiles.Length)
            {
                expressionIndex = 0;
            }
        }
        expressionManager.updateParam(live2DModel);

        Vector3 mousePos = Input.mousePosition;         //获得鼠标的坐标

        //更新模型参数,使模型随着鼠标运动
        l2DTargetPoint.Set(mousePos.x / Screen.width * 2 - 1, mousePos.y / Screen.height * 2 - 1);      //将鼠标坐标缩放到[-1, 1],然后存储到l2DTargetPoint中
        l2DTargetPoint.update();

        //从l2DTargetPoint中取出坐标,用于更新模型的参数
        live2DModel.setParamFloat("PARAM_ANGLE_X", l2DTargetPoint.getX() * 30);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", l2DTargetPoint.getY() * 30);
        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", l2DTargetPoint.getX() * 10);
        //live2DModel.setParamFloat("PARAM_BODY_ANGLE_Y", l2DTargetPoint.getY() * 10);
        live2DModel.setParamFloat("PARAM_EYE_BALL_X", l2DTargetPoint.getX());
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", l2DTargetPoint.getY());

        //更新模型的参数,放在Updat()函数后面
        live2DModel.update();
    }
Example #18
0
    void Update()
    {
        if (live2DModel == null)
        {
            load();
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        if (motionMgr.isFinished())
        {
            motionMgr.startMotion(Live2DMotion.loadMotion(motionFiles.bytes));
        }
        motionMgr.updateParam(live2DModel);

        var pos = Input.mousePosition;

        if (Input.GetMouseButtonDown(0))
        {
            //
        }
        else if (Input.GetMouseButton(0))
        {
            dragMgr.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            dragMgr.Set(0, 0);
        }


        dragMgr.update();
        //Debug.Log(dragMgr.getX()+"-"+dragMgr.getY());

        live2DModel.setParamFloat("PARAM_ANGLE_X", dragMgr.getX() * 30);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);
        live2DModel.setParamFloat("PARAM_BODY_ANGLE_Y", dragMgr.getY() * 5);


        live2DModel.setParamFloat("PARAM_EYE_BALL_X", dragMgr.getX());
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", dragMgr.getY());

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.1f + 0.9f * Math.Sin(t / 3.0)));

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }


        live2DModel.update();
    }
Example #19
0
    void Update()
    {
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        #region
        //if (Input.GetMouseButtonDown(0))
        //{
        //    motionIndex++;
        //    if (motionIndex >= motions.Length)
        //    {
        //        motionIndex = 0;
        //    }
        //    motionQueueManager.startMotion(motions[motionIndex]);
        //}

        //motionQueueManager.updateParam(live2DModel);
        //motionQueueManagerB.updateParam(live2DModel);


        //判断待机动作
        //if (motionManager.isFinished())
        //{
        //    StartMotion(0, 1);
        //}
        //else if (Input.GetKeyDown(KeyCode.Space))
        //{
        //    StartMotion(14, 2);
        //}
        //motionManager.updateParam(live2DModel);

        //设置参数
        // live2DModel.setParamFloat(2, 30, 1);
        //参数的保存与回复  整个模型的参数
        //live2DModel.saveParam();
        //live2DModel.loadParam();

        //设定模型某一部分的透明度
        //live2DModel.setPartsOpacity("PARTS_01_EYE_BALL_001", 0);
        #endregion
        //眨眼
        eyeBlinkMotion.setParam(live2DModel);

        //获取鼠标位置
        Vector3 pos = Input.mousePosition;
        if (Input.GetMouseButton(0))
        {   //通过公式转换得到live2d鼠标检测点的比例值是-1到1
            //通过这个值取设置我们的参数
            //按照这个值带来的影响度来影响模型动作
            drag.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }
        else
        {
            drag.Set(0, 0);
        }
        drag.update();

        //模型转向
        if (drag.getX() != 0)
        {
            live2DModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
            live2DModel.setParamFloat("PARAM_ANGLE_Y", 30 * drag.getY());
            live2DModel.setParamFloat("PARAM_EYE_BALL_X", drag.getX()); //取-值眼睛只盯着玩家
            live2DModel.setParamFloat("PARAM_EYE_BALL_Y", drag.getY());
            live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
        }

        long time = UtSystem.getUserTimeMSec();

        sideHairLeft.update(live2DModel, time);
        sideHairRight.update(live2DModel, time);
        backHairLeft.update(live2DModel, time);
        backHairRight.update(live2DModel, time);

        //表情使用
        if (Input.GetMouseButtonDown(0))
        {
            motionIndex++;
            if (motionIndex >= expressions.Length)
            {
                motionIndex = 0;
            }
            expressionManager.startMotion(expressions[motionIndex]);
        }

        expressionManager.updateParam(live2DModel);


        //更新模型状态
        live2DModel.update();
    }
Example #20
0
    // Update is called once per frame
    void Update()
    {
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        //if (Input.GetKeyDown(KeyCode.M))
        //{
        //    motionIndex++;
        //    if (motionIndex>=motions.Length)
        //    {
        //        motionIndex = 0;
        //    }
        //    motionQueueManager.startMotion(motions[motionIndex]);
        //}

        //motionQueueManager.updateParam(live2DModel);
        //motionQueueManagerA.updateParam(live2DModel);

        if (Input.GetKeyDown(KeyCode.M))
        {
            motionIndex++;
            if (motionIndex >= expressions.Length)
            {
                motionIndex = 0;
            }
            expresionMotionQueueManager.startMotion(expressions[motionIndex]);
        }

        expresionMotionQueueManager.updateParam(live2DModel);


        //判断待机动作
        //if (l2DMotionManager.isFinished())
        //{
        //    StartMotion(0,1);
        //}
        //else if (Input.GetKeyDown(KeyCode.M))
        //{
        //    StartMotion(14,2);
        //}
        //l2DMotionManager.updateParam(live2DModel);

        //设置参数
        //live2DModel.setParamFloat("PARAM_ANGLE_X",1);

        //if (Input.GetKeyDown(KeyCode.A))
        //{
        //    live2DModel.addToParamFloat("PARAM_ANGLE_X", a);
        //}

        //live2DModel.multParamFloat("PARAM_ANGLE_X", a);
        ////也可以通过获取索引去设置参数
        //int paramAngleX;
        //paramAngleX = live2DModel.getParamIndex("PARAM_ANGLE_X");
        //live2DModel.setParamFloat(paramAngleX,30);

        ////参数的保存与回复
        //live2DModel.setParamFloat("PARAM_ANGLE_X", 30);
        ////保存与回复的参数是整个模型的所有参数,并不只是之前同方法里设置的某几个参数
        //live2DModel.saveParam();
        //live2DModel.loadParam();

        //设定模型某一部分的不透明度。
        //live2DModel.setPartsOpacity("PARTS_01_FACE_001", 0);

        //模型跟随鼠标转向与看向
        //得到的Live2d鼠标检测点的比例值是-1到1(对应一个live2d拖拽
        //管理坐标系,或者叫做影响度。)
        //然后我们通过这个值去设置我们的参数,比如旋转30度*当前得到的值
        //就会按照这个值所带来的影响度去影响我们的模型动作
        //从而到达看向某一个点的位置
        Vector3 pos = Input.mousePosition;//屏幕坐标

        if (Input.GetMouseButton(0))
        {
            drag.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }

        else if (Input.GetMouseButtonUp(0))
        {
            drag.Set(0, 0);
        }

        //参数及时更新,考虑加速度等自然因素,计算坐标,进行逐帧更新。
        drag.update();

        //模型转向
        if (drag.getX() != 0)
        {
            live2DModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
            live2DModel.setParamFloat("PARAM_ANGLE_Y", 30 * drag.getY());
            live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
            live2DModel.setParamFloat("PARAM_EYE_BALL_X", -drag.getX());
            live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -drag.getY());
        }

        //眨眼
        eyeBlinkMotion.setParam(live2DModel);

        long time = UtSystem.getUserTimeMSec();//执行时间

        physicsHairSideLeft.update(live2DModel, time);
        physicsHairSideRight.update(live2DModel, time);
        physicsHairBackLeft.update(live2DModel, time);
        physicsHairBackRight.update(live2DModel, time);

        live2DModel.update();
    }
    // Update is called once per frame
    void Update()
    {
        //设置矩阵 当前坐标转换为世界坐标 矩阵相乘
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        //启动api自带的update
        live2DModel.update();
        ////启动动画管理 告诉他启动哪一个角色的动画
        //motionQueueManager.updateParam(live2DModel);
        ////多个动作同时播放会卡一下最好不要设置相同参数 一般模型师都K好整个动作
        //motionQueueManagerA.updateParam(live2DModel);

        expressionMotionQueueManager.updateParam(live2DModel);
        ////控制动画切换动作
        if (Input.GetKeyDown(KeyCode.M))
        {
            motionIndex++;
            if (motionIndex >= expressions.Length)
            {
                motionIndex = 0;
            }
            expressionMotionQueueManager.startMotion(expressions[motionIndex]);
        }


        ////判断待机动作 当前动作进行完毕 true
        //if (l2DMotionManager.isFinished())
        //{
        //    StartMotion(0, 1);
        //}
        // if (Input.GetKeyDown(KeyCode.M))
        //{
        //    StartMotion(14, 2);
        //}
        ////启动l2DMotionManager里的Update
        //l2DMotionManager.updateParam(live2DModel);

        //设置参数 参数id(就live2d编辑器的那个) value就是该参数值 weight权重 影响度
        //live2DModel.setParamFloat("PARAM_ANGLE_X",30,weight);

        //if (Input.GetKeyDown(KeyCode.A))
        //{
        //    //往之前度数加上10度
        //    live2DModel.addToParamFloat("PARAM_ANGLE_X", 10);
        //}
        ////之前倍数乘上这个数值 也就是正值会向右边扭头 负值控制向左扭头 就可以控制数值了
        //live2DModel.multParamFloat("PARAM_ANGLE_X", 10);
        ////也可以通过获取索引设置参数
        //int paramAngleX;
        //paramAngleX = live2DModel.getParamIndex("PARAM_ANGLE_X");
        //live2DModel.setParamFloat(paramAngleX,30);

        ////参数的保存与回复
        //live2DModel.setParamFloat("PARAM_ANGLE_X", 30, weight);
        ////保存与回复的参数是整个模型的所有参数 并不是之前同方法里的设置的几个参数
        //live2DModel.saveParam();
        //live2DModel.loadParam();

        ////设置某一部分的透明度
        //live2DModel.setPartsOpacity("PARTS_01_CLOTHES",0);
        //眨眼
        eyeBlinkMotion.setParam(live2DModel);
        //后面时间按创建时间计算 类似于计时器
        long time = UtSystem.getUserTimeMSec();//获取执行时间

        physicsHairSideLeft.update(live2DModel, time);
        physicsHairSideRight.update(live2DModel, time);
        physicsHairBackLeft.update(live2DModel, time);
        physicsHairBackRight.update(live2DModel, time);
        //模型跟随鼠标转向与看向
        //参数及时更新,考虑加速度等自然因素 计算坐标 逐渐更新
        drag.update();
        //获取鼠标位置
        Vector3 pos = Input.mousePosition;

        if (Input.GetMouseButton(0))
        {
            //转化坐标
            //得到Live2D鼠标监测点的比例值-1到1(对应Live2D拖拽
            //管理坐标系,或者叫影响度)
            //然后我们通过这个值去设置我们的参数 比如旋转30*当前的到的值
            //然后按这个值所带来的影响度去影响我们的动作
            //从而达到看向某一点的位置
            drag.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            drag.Set(0, 0);
        }


        //模型转向
        if (drag.getX() != 0)
        {
            live2DModel.setParamFloat("PARAM_ANGLE_X", 30 * drag.getX());
            live2DModel.setParamFloat("PARAM_ANGLE_Y", 30 * drag.getY());
            live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", 10 * drag.getX());
            //官方给出如果取-drag.getX() 人物就会一直看你 就是屏幕中间
            live2DModel.setParamFloat("PARAM_EYE_BALL_X", drag.getX());
            live2DModel.setParamFloat("PARAM_EYE_BALL_Y", drag.getY());
        }
    }
Example #22
0
    void Update()
    {
        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        if (motionMgr.isFinished() || main != Player.State)
        {
            //歩き
            if (Player.State == Main.CharaState.Walk)
            {
                live2DModel.setParamFloat("Param3", -1);
                live2DModel.setParamFloat("Param7", 0);

                motionMgr.startMotion(motions[0]);
            }
            //走り
            else if (Player.State == Main.CharaState.Run)
            {
                live2DModel.setParamFloat("Param3", -1);
                live2DModel.setParamFloat("Param7", 0);

                motionMgr.startMotion(motions[1]);
            }
            //素手殴り
            else if (Player.State == Main.CharaState.HandAttack)
            {
                //live2DModel.setParamFloat("Param3", -1);
                motionMgr.startMotion(motions[2]);
            }
            //鉄棒殴り
            else if (Player.State == Main.CharaState.BarAttack)
            {
                motionMgr.startMotion(motions[3]);
            }
            //銃攻撃
            else if (Player.State == Main.CharaState.Shot)
            {
                motionMgr.startMotion(motions[4]);
            }
            //通常ダメージ
            else if (Player.State == Main.CharaState.Damage)
            {
                motionMgr.startMotion(motions[8]);
            }
            //銃攻撃
            else if (Player.State == Main.CharaState.Down)
            {
                motionMgr.startMotion(motions[9]);
            }
            //停止
            if (Player.State == Main.CharaState.Wait)
            {
                //live2DModel.setParamFloat("Param3", -1);
                motionMgr.startMotion(motions[10]);
                //motionMgr.stopAllMotions();
            }
        }

        main = Player.State;

        motionMgr.updateParam(live2DModel);
        live2DModel.update();
        live2DModel.draw();
    }
    void Update()
    {
        //Debug.Log(DateTime.Now);
        Festival();
        Timer();
        //base Behavior & Motion Ctrl
        if (live2DModel == null)
        {
            load();
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        if (!Application.isPlaying)
        {
            live2DModel.update();
            //live2DModel.draw();
            return;
        }

        //if (ВерныйAS.isPlaying)
        //{
        //    audioPlayerAS.volume = 0.1f;
        //    //audioPlayerAS.mute = true;
        //}
        //else
        //{
        //    audioPlayerAS.volume = 1.0f;
        //    //audioPlayerAS.mute = false;
        //}

        //每隔一段时间随机播放动画
        //playTime += Time.deltaTime;
        //if (playTime >= playRate)
        //{
        //if (motionMgr.isFinished())
        //{
        //    motionMgr.startMotion(Live2DMotion.loadMotion(motionFile[UnityEngine.Random.Range(0, 4)].bytes));
        //    playTime = 0;
        //}
        //}


        var pos = Input.mousePosition;

        if (playTime < playRate) //计时器逻辑
        {
            playTime += Time.deltaTime;
        }
        if (Input.GetMouseButtonDown(0))//点击随机播放动画和对应语音
        {
            if (playTime >= playRate)
            {
                if (motionMgr.isFinished())
                {
                    audioClipID   = UnityEngine.Random.Range(0, ВерныйAudioClipRandomIdle.Length);
                    ВерныйAS.clip = ВерныйAudioClipRandomIdle[audioClipID];
                    ВерныйAS.Play();
                    cuAudioClipID = audioClipID;                                                         //获取当前随机到的声音ID
                    //Debug.Log(cuAudioClipID);
                    motionMgr.startMotion(Live2DMotion.loadMotion(idleMotionFile[cuAudioClipID].bytes)); //播放对应的动画
                    playTime -= playRate;
                }
            }
        }
        //else if (Input.GetMouseButtonDown(1))
        //{
        //    if (motionMgr.isFinished())
        //    {
        //        motionMgr.startMotion(motionBattle);
        //    }
        //}
        else if (Input.GetMouseButton(0))
        {
            dragMgr.Set(pos.x / Screen.width * 2 - 1, pos.y / Screen.height * 2 - 1);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            dragMgr.Set(0, 0);
        }

        dragMgr.update();
        live2DModel.setParamFloat("PARAM_ANGLE_X", dragMgr.getX() * 20);
        live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 20);

        live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);

        live2DModel.setParamFloat("PARAM_EYE_BALL_X", dragMgr.getX() * 20);
        live2DModel.setParamFloat("PARAM_EYE_BALL_Y", dragMgr.getY() * 20);

        live2DModel.setParamFloat("PARAM_ikari", dragMgr.getX());
        live2DModel.setParamFloat("PARAM_ikari", dragMgr.getY());

        live2DModel.setParamFloat("PARAM_HAIR_FRONT", dragMgr.getX());
        live2DModel.setParamFloat("PARAM_HAIR_SIDE", dragMgr.getX());
        live2DModel.setParamFloat("PARAM_HAIR_BACK", dragMgr.getX());

        double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
        double t       = timeSec * 2 * Math.PI;

        live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));

        eyeBlink.setParam(live2DModel);

        if (physics != null)
        {
            physics.updateParam(live2DModel);
        }

        live2DModel.update();

        if (live2DModel == null)
        {
            return;
        }
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        motionMgr.updateParam(live2DModel);

        live2DModel.update();
        OnRenderObject();
    }
Example #24
0
        void Update()
        {
            //if (live2DModel == null) load();
            if (live2DModel == null)
            {
                return;
            }
            live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
            if (!Application.isPlaying)
            {
                live2DModel.update();
                return;
            }

            double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
            double t       = timeSec * 2 * Math.PI;

            live2DModel.setParamFloat("PARAM_BREATH", (float)(0.5f + 0.5f * Math.Sin(t / 3.0)));

            //
            live2DModel.setParamFloat("PARAM_ANGLE_X", PARAM_ANGLE.x);
            live2DModel.setParamFloat("PARAM_ANGLE_Y", PARAM_ANGLE.y);
            live2DModel.setParamFloat("PARAM_ANGLE_Z", PARAM_ANGLE.z);
            live2DModel.setParamFloat("PARAM_EYE_L_OPEN", PARAM_EYE_L_OPEN);
            live2DModel.setParamFloat("PARAM_EYE_R_OPEN", PARAM_EYE_R_OPEN);
            live2DModel.setParamFloat("PARAM_EYE_BALL_X", PARAM_EYE_BALL_X);
            live2DModel.setParamFloat("PARAM_EYE_BALL_Y", PARAM_EYE_BALL_Y);
            live2DModel.setParamFloat("PARAM_BROW_L_Y", PARAM_BROW_L_Y);
            live2DModel.setParamFloat("PARAM_BROW_R_Y", PARAM_BROW_R_Y);
            live2DModel.setParamFloat("PARAM_MOUTH_OPEN_Y", PARAM_MOUTH_OPEN_Y);
            live2DModel.setParamFloat("PARAM_MOUTH_SIZE", PARAM_MOUTH_SIZE);

            live2DModel.setParamFloat("PARAM_MOUTH_FORM", 0.0f);
            //

            if (physics != null)
            {
                physics.updateParam(live2DModel);
            }

            if (pose != null)
            {
                pose.updateParam(live2DModel);
            }


            live2DModel.update();
        }