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(); }
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(); }
// 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(); }
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(); }
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(); }
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(); 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(); }
/*动作实现类*/ 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()); } } }
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(); }
// 드래그한 결과를 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))); }
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(); }
/*-*/ 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()); } } }
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(); }
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(); }
// 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(); }
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(); }
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(); }
// 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() { 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) 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(); }