Пример #1
0
 /// <summary>
 /// カメラがシーンにレンダリング後に呼ばれる
 /// </summary>
 void OnRenderObject()
 {
     if (live2DModel == null)
     {
         return;
     }
     live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
     // アプリが終了していた場合
     if (!Application.isPlaying)
     {
         live2DModel.update();
         live2DModel.draw();
         return;
     }
     // 再生中のモーションからモデルパラメータを更新
     if (motionManager != null)
     {
         motionManager.updateParam(live2DModel);
     }
     // ポーズの設定
     if (pose != null)
     {
         pose.updateParam(live2DModel);
     }
     // 物理演算の設定
     if (physics != null)
     {
         physics.updateParam(live2DModel);
     }
     // 頂点の更新
     live2DModel.update();
     // モデルの描画
     live2DModel.draw();
 }
Пример #2
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();
        }
    void Update()
    {
        if (live2DModel == null && !Load())
        {
            return;
        }

        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

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

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

        live2DModel.update();
    }
    void Awake()
    {
        chVoice = GetComponent <AudioSource> ();
        //  myRender = gameObject.GetComponentInChildren<MeshRenderer> ();

        lipSyncValue = 0f;

        //초기화 페이즈//


        Live2D.init();

        //json 파일 불러와서 속성 값들 리스트로 뽑아 옴
        model = Live2DModelUnity.loadModel(mocData.bytes);

        //모션 데이터 할당
        motionDataManager = GetComponent <MotionDataManager> ();


        //만약 숨쉬는 모션이 있으면
        if (breathMotion != null)
        {
            breathMotion_ = Live2DMotion.loadMotion(breathMotion.bytes);
        }


        //텍스쳐 세팅
        for (int i = 0; i < textureList.Length; i++)
        {
            model.setTexture(i, textureList [i]);
        }


        // 포즈 파일은 필수적인 것은 아님.
        if (poseData)
        {
            l2dPose = L2DPose.load(poseData.bytes);
        }

        if (physicsData)
        {
            l2dPhysics = L2DPhysics.load(physicsData.bytes);
        }


        //모션을 식별할때 이 스크립트는 string을 사용했지만 enum을 쓰든 뭘 쓰든 모션 식별자로 뭘 써도 무방.



        //아까 초기화한 모델의 가로 사이즈 받아옴.
        var width = model.getCanvasWidth();


        //캔버스 지정
        canvasMatrix = Matrix4x4.Ortho(0.0f, width, width, 0.0f, -50.0f, 50.0f);


        //모션 매니저들 할당. 사실 얘들은 모션들의 우선순위를 정해주는 등의 역할이 있으나 복잡해서 거의 안쓴다.
        //주 역활은 자기가 가지고 있는 주모션 하나를 모델 인스턴스에 적용해주는 것.
        //얘들에게 모션을 주고 여러 설정자들로 모션의 속성들을 설정해줄 수 있다. 그외에 우선순위를 정해주고 등등 기능 있으나 자주 안쓰임.
        //모션 매니저에 현재 모션을 지정해준다고 모델의 모션이 업데이트되지 않는다.
        //반드시 L2D매니저.UpdateParam(모델 인스턴스) 를 호출해줘야 모델 인스턴스의 움직임이 갱신됨.


        l2dMotionManager           = new L2DMotionManager();
        l2dExpressioNMotionManager = new L2DMotionManager();

        //모션 재생 시작


        //모델의 모션 업데이트
        l2dPose.updateParam(model);

        transformCache = transform;
    }