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(); }
// 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(); }
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); //启动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()); } }