void OnRenderObject() { if (live2DModel == null) { return; } live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); live2DModel.draw(); return; } // motion播完或是flag改變 if (motionMgr.isFinished() || mtnBehaviour.changeflg == true) { // load motion motion = Live2DMotion.loadMotion(motionFile.bytes); // 播放motion motionMgr.startMotion(motion); // 設置flag為off mtnBehaviour.changeflg = false; } motionMgr.updateParam(live2DModel); live2DModel.update(); live2DModel.draw(); }
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 OnRenderObject() { if (live2DModel == null) { return; } live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); live2DModel.draw(); return; } if (motionMgr.isFinished()) { motionMgr.startMotion(motion); } motionMgr.updateParam(live2DModel); live2DModel.update(); live2DModel.draw(); }
void Update() { Vector3 targetPos = target.transform.position; Vector3 myPos = transform.position; Vector3 relativePos = targetPos - myPos; transform.rotation = Quaternion.LookRotation(relativePos); transform.Rotate(new Vector3(-75, 180, 0)); Vector3 pos = transform.position; pos.y = 81; this.transform.position = pos; if (!Application.isPlaying) { live2DModel.update(); return; } if (motionMgr.isFinished()) { motionMgr.startMotion(motion); } motionMgr.updateParam(live2DModel); live2DModel.update(); }
// Update is called once per frame void Update() { model.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); motionQueueManager.updateParam(model); eyeBlinkMotion.setParam(model); model.update(); if (GameManager.Instance.isGameOver) { return; } if ((missCui.transform.position.x - transform.position.x) < 3) { GameManager.Instance.isGameOver = true; GameManager.Instance.isCatched = true; } if (isDefeat) { transform.position = Vector3.Lerp(transform.position, initPos, 0.1f); Destroy(gameObject); } else { transform.Translate(Vector3.right * moveSpeed * Time.deltaTime); } }
/// <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(); }
// Update is called once per frame void Update() { live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); motionQueueManager.updateParam(live2DModel); eyeBlinkMotion.setParam(live2DModel); live2DModel.update(); if (GameManager.Instance.gameOver) { return; } //判断当前Boss是否追赶上翠花 if ((missCui.transform.position.x - transform.position.x) < 3) { GameManager.Instance.gameOver = true; } if (isDefeat) { transform.position = Vector3.Lerp(transform.position, initPos, 0.2f); } else { transform.Translate(Vector3.right * moveSpeed * Time.deltaTime); } }
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 Update() { if (motion == null) { return; } motionMgr.updateParam(modelComponent.model); }
private IEnumerator Routine_Main() { while (true) { while (true) { if (live2DModel == null) { break; } live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); break; } if (motionMgr.isFinished() || main != _State) { //歩き if (_State == EnemyState.Walk) { motionMgr.startMotion(motions[0]); } } if (main != _State) { //噛みつき if (_State == EnemyState.Attack) { motionMgr.startMotion(motions[1]); } //怯み else if (_State == EnemyState.Stop) { motionMgr.startMotion(motions[2]); } //停止 if (_State == EnemyState.Wait) { motionMgr.startMotion(motions[3]); } } main = _State; motionMgr.updateParam(live2DModel); live2DModel.update(); live2DModel.draw(); yield return(null); } yield return(null); } }
private void OnPostRender() { if (live2DModelUnity == null) { return; } live2DModelUnity.setMatrix(base.transform.localToWorldMatrix * live2DCanvasPos); if (!IsStop || isOneDraw) { motionMgr.updateParam(live2DModelUnity); live2DModelUnity.update(); live2DModelUnity.draw(); isDrawed = true; if (motionMgr.isFinished() || isOneDraw) { isOneDraw = false; } } }
// 아무것도 하지 않을 때에 실행할 모션은 무작위로 재생한다 void Idle() { // 현재의 모션이 끝난 상태라면 if (m_motionMgr.isFinished()) { // 난수를 생성한다 int rnd = UnityEngine.Random.Range(0, m_motions.Length - 1); // 모션 재생 m_motionMgr.startMotion(m_motions[rnd]); } m_motionMgr.updateParam(m_live2DModel); }
//全局监听(步骤函数) private void Motion() { /*******表情更新*******/ if (Input.GetKeyDown(MTN_DW)) { motionIndex++; if (motionIndex >= motions.Length) { motionIndex = 0; } //出顶反底 else if (motionIndex < 0) { motionIndex = motions.Length - 1; } //触底反弹 motionQueueManager.startMotion(motions[motionIndex]); //队列更新 }//表情下翻 if (Input.GetKeyDown(MTN_RESET)) { motionIndex = 0; motionQueueManager.startMotion(motions[motionIndex]); }//表情重置 if (Input.GetKeyDown(MTN_UP)) { motionIndex--; if (motionIndex >= motions.Length) { motionIndex = 0; } //出顶反底 else if (motionIndex < 0) { motionIndex = motions.Length - 1; } //触底反弹 motionQueueManager.startMotion(motions[motionIndex]); //队列更新 }//表情上翻 if (Input.GetKeyDown(EyeballTraceMoveMent)) { this.flag_Eyeball = !flag_Eyeball; } //眼球跟踪 /*-*/ motions[motionIndex].setLoopFadeIn(true); motions[motionIndex].setFadeOut(modelAnimationFadeOut); motions[motionIndex].setFadeIn(modelAnimationFadein); motions[motionIndex].setLoop(true); //以上动画的更换方式(*过渡) motionQueueManager.updateParam(live2DModel); //更新队列 /*******表情更新*******/ }
void Update() { if (modelUnity == null) { return; } modelUnity.setMatrix(transform.localToWorldMatrix * matrix4X4); if (queueManager.isFinished()) { queueManager.startMotion(dMotion); } queueManager.updateParam(modelUnity); modelUnity.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(); }
void Update() { if (live2DModel == null) { return; } live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); return; } if (motionMgr.isFinished() || main != _State2) { //歩き if (_State2 == Enemy2State.Walk) { motionMgr.startMotion(motions[0]); } } if (main != _State2) { //噛みつき if (_State2 == Enemy2State.Attack) { motionMgr.startMotion(motions[1]); } //怯み else if (_State2 == Enemy2State.Stop) { motionMgr.startMotion(motions[2]); } //停止 if (_State2 == Enemy2State.Wait) { motionMgr.startMotion(motions[3]); } } motionMgr.updateParam(live2DModel); live2DModel.update(); live2DModel.draw(); }
private KrLive2DLipSync m_pLipSync = null; // process for lip sync //::::::::::::::::::::::::::::::::::::::::::::::::::::: // UNITY FUNCTION //::::::::::::::::::::::::::::::::::::::::::::::::::::: // @Brief : Update void Update() { // Update motion parameter m_pIdleMotionManager.updateParam(m_pLive2dModel); m_pMotionManager.updateParam(m_pLive2dModel); LipSync(); m_pLive2dModel.update(); // Render type is Live2D.L2D_RENDER_DRAW_MESH if (m_pLive2dModel.getRenderMode() == Live2D.L2D_RENDER_DRAW_MESH) { m_pLive2dModel.draw(); } }
void Update() { if (!Application.isPlaying) { live2DModel.update(); return; } if (motionMgr.isFinished()) { motionMgr.startMotion(motion); } motionMgr.updateParam(live2DModel); live2DModel.update(); }
void Update() { float modelWidth = live2DModel.getCanvasWidth(); Matrix4x4 m1 = Matrix4x4.Ortho( 0, modelWidth, modelWidth, 0, -50.0f, 50.0f); Matrix4x4 m2 = transform.localToWorldMatrix; Matrix4x4 m3 = m2 * m1; motionManager.updateParam(live2DModel); if (live2DModel == null) { return; } live2DModel.setMatrix(m3); live2DModel.update(); }
void Update() { if (motionMgr.isFinished()) { motionMgr.startMotion(motion); } for (int i = 0; i < NUM_MODELS; i++) { var live2DModel = models[i]; if (live2DModel == null) { continue; } motionMgr.updateParam(live2DModel); live2DModel.update(); } }
void Update() { if (motions == null || motions.Length == 0) { return; } if (!EventSystem.current.IsPointerOverGameObject()) { if (Input.GetMouseButtonDown(0)) { startClickTime = Time.realtimeSinceStartup; } if (Input.GetMouseButtonUp(0) && Time.realtimeSinceStartup - startClickTime < dragWaitSeconds) { NextMotion(); } } if (motionMgr.isFinished()) { if (running) { if (loop) { motionMgr.startMotion(motions[currentMotionIndex]); } else { running = false; } } else { return; } } motionMgr.updateParam(modelComponent.model); }
void Update() { //if (Input.GetButtonDown("Fire1")) //{ // motion = Live2DMotion.loadMotion(mtnFiles[2].bytes); // //motion.setLoop(true); // motionManager.startMotion(motion, false); // Debug.Log("Fire1"); // //motionoff = true; //} //if (Input.GetButtonDown("Fire2")) //{ // motion = Live2DMotion.loadMotion(mtnFiles[1].bytes); // //motion.setLoop(true); // motionManager.startMotion(motion, false); // // motionManager.stopAllMotions(); // Debug.Log("Jump"); // // motionoff = true; //} float modelWidth = live2DModel.getCanvasWidth(); Matrix4x4 m1 = Matrix4x4.Ortho( 0, modelWidth, modelWidth, 0, -50.0f, 50.0f); Matrix4x4 m2 = transform.localToWorldMatrix; Matrix4x4 m3 = m2 * m1; motionManager.updateParam(live2DModel); if (live2DModel == null) { return; } //live2DModel.setParamFloat("PARAM_WEAPON01", 1.0f); live2DModel.setMatrix(m3); live2DModel.update(); }
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(); }
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(); }
void Update() { if (live2DModel == null) { return; } if (auto) { if (link_animator) { AnimatorStateInfo state = GetComponent <Animator>().GetCurrentAnimatorStateInfo(0); timer = state.length * state.normalizedTime; //timer = (float)GetComponent<Animator>().GetTime(); UtSystem.setUserTimeMSec((long)(timer * 1000.0f)); } else { delta_timer = (Time.time - temp_real_timer) * speed; timer += delta_timer; UtSystem.setUserTimeMSec((long)(timer * 1000.0f)); temp_real_timer = Time.time; } } bool motion_chenged = false; if (motionFile == null) { motion = null; temp_motionFile_name = ""; } else { if (temp_motionFile_name != motionFile.name) { motion = Live2DMotion.loadMotion(motionFile.bytes); motion_chenged = true; } temp_motionFile_name = motionFile.name; } if (live2DModel.getLayer() != gameObject.layer) { live2DModel.setLayer(gameObject.layer); } live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); return; } if (motion != null) { motion.setLoop(true); motion.setFadeIn(0); motion.setFadeOut(0); if (motionMgr.isFinished()) { motionMgr.startMotion(motion); } if (motion_chenged) { motionMgr.stopAllMotions(); motionMgr.startMotion(motion); } motionMgr.updateParam(live2DModel); } else { motionMgr.stopAllMotions(); if (motionFile != null) { motion = Live2DMotion.loadMotion(motionFile.bytes); } } live2DModel.update(); if (live2DModel.getRenderMode() == Live2D.L2D_RENDER_DRAW_MESH) { Render(); } }
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()); 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 (Input.GetKeyDown(KeyCode.A)) {// pressed "A" key. motionMgr.startMotion(motion); } motionMgr.updateParam(live2DModel); 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()); } }
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(); }
// 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(); }