/* * 初始化模型 * @throws Exception */ public void Init(String modelJson) { updating = true; initialized = false; modelSetting = new ModelSettingJson(modelJson); if (LAppDefine.DEBUG_LOG) { Debug.Log("Start to load model"); } // Live2D Model if (modelSetting.GetModelFile() != null) { loadModelData(modelHomeDir + modelSetting.GetModelFile()); var len = modelSetting.GetTextureNum(); Debug.Log(len); for (int i = 0; i < len; i++) { loadTexture(i, modelHomeDir + modelSetting.GetTextureFile(i)); } } // Expression if (modelSetting.GetExpressionNum() != 0) { var len = modelSetting.GetExpressionNum(); for (int i = 0; i < len; i++) { loadExpression(modelSetting.GetExpressionName(i), modelHomeDir + modelSetting.GetExpressionFile(i)); } } // Physics if (modelSetting.GetPhysicsFile() != null) { loadPhysics(modelHomeDir + modelSetting.GetPhysicsFile()); } // Pose if (modelSetting.GetPoseFile() != null) { loadPose(modelHomeDir + modelSetting.GetPoseFile()); } // 由于布局可以在Unity上设置,因此不会从JSON中读取 //Dictionary<string, float> layout = new Dictionary<string, float>(); //if (modelSetting.GetLayout(layout)) //{ // if (layout.ContainsKey("width")) modelMatrix.setWidth(layout["width"]); // if (layout.ContainsKey("height")) modelMatrix.setHeight(layout["height"]); // if (layout.ContainsKey("x")) modelMatrix.setX(layout["x"]); // if (layout.ContainsKey("y")) modelMatrix.setY(layout["y"]); // if (layout.ContainsKey("center_x")) modelMatrix.centerX(layout["center_x"]); // if (layout.ContainsKey("center_y")) modelMatrix.centerY(layout["center_y"]); // if (layout.ContainsKey("top")) modelMatrix.top(layout["top"]); // if (layout.ContainsKey("bottom")) modelMatrix.bottom(layout["bottom"]); // if (layout.ContainsKey("left")) modelMatrix.left(layout["left"]); // if (layout.ContainsKey("right")) modelMatrix.right(layout["right"]); //} // 初始参数 for (int i = 0; i < modelSetting.GetInitParamNum(); i++) { string id = modelSetting.GetInitParamID(i); float value = modelSetting.GetInitParamValue(i); live2DModel.setParamFloat(id, value); } for (int i = 0; i < modelSetting.GetInitPartsVisibleNum(); i++) { string id = modelSetting.GetInitPartsVisibleID(i); float value = modelSetting.GetInitPartsVisibleValue(i); live2DModel.setPartsOpacity(id, value); } // 自动捕眼器 eyeBlink = new L2DEyeBlink(); view.SetupView( live2DModel.getCanvasWidth(), live2DModel.getCanvasHeight()); updating = false; // 更新状態の完了 initialized = true; // 初期化完了 }
public void load(string modelSettingPath) { updating = true; initialized = false; if (modelJson == null && modelSettingPath != null) { if (LAppDefine.DEBUG_LOG) { Debug.Log("Load json : " + modelSettingPath); } try{ TextAsset ta = (Resources.Load(modelSettingPath, typeof(TextAsset)) as TextAsset); modelSetting = new ModelSettingJson(ta); } catch (IOException e) { Debug.Log(e.StackTrace); throw new Exception(); } } else { if (LAppDefine.DEBUG_LOG) { Debug.Log("Load json"); } modelSetting = new ModelSettingJson(modelJson); } if (LAppDefine.DEBUG_LOG) { Debug.Log("Start to load model"); } loadModelData(modelSetting.getModelFile(), modelSetting.getTextureFiles()); loadExpressions(modelSetting.getExpressionNames(), modelSetting.getExpressionFiles()); loadPhysics(modelSetting.getPhysicsFile()); loadPose(modelSetting.getPoseFile()); Dictionary <string, float> layout = new Dictionary <string, float>(); if (modelSetting.getLayout(layout)) { if (layout.ContainsKey("width")) { modelMatrix.setWidth(layout["width"]); } if (layout.ContainsKey("height")) { modelMatrix.setHeight(layout["height"]); } if (layout.ContainsKey("x")) { modelMatrix.setX(layout["x"]); } if (layout.ContainsKey("y")) { modelMatrix.setY(layout["y"]); } if (layout.ContainsKey("center_x")) { modelMatrix.centerX(layout["center_x"]); } if (layout.ContainsKey("center_y")) { modelMatrix.centerY(layout["center_y"]); } if (layout.ContainsKey("top")) { modelMatrix.top(layout["top"]); } if (layout.ContainsKey("bottom")) { modelMatrix.bottom(layout["bottom"]); } if (layout.ContainsKey("left")) { modelMatrix.left(layout["left"]); } if (layout.ContainsKey("right")) { modelMatrix.right(layout["right"]); } } for (int i = 0; i < modelSetting.getInitParamNum(); i++) { string id = modelSetting.getInitParamID(i); float value = modelSetting.getInitParamValue(i); live2DModel.setParamFloat(id, value); } for (int i = 0; i < modelSetting.getInitPartsVisibleNum(); i++) { string id = modelSetting.getInitPartsVisibleID(i); float value = modelSetting.getInitPartsVisibleValue(i); live2DModel.setPartsOpacity(id, value); } eyeBlink = new L2DEyeBlink(); view.setupView( live2DModel.getCanvasWidth(), live2DModel.getCanvasHeight()); updating = false; initialized = true; }
public void Initialize(L2DModelInfo modelInfo, int modelSlotIdx) { setUpdating(true); // 모델 갱신중 setInitialized(false); _IsActivate = true; _modelHomeDir = FileManager.getDirName(modelInfo._SettingFullPath); _modelRenderPos = new Vector3(modelSlotIdx * 5.0f, 60.0f, 0.0f); GameObject proxyObj = new GameObject(modelInfo._modelName); _proxy = proxyObj.AddComponent <L2DModelProxy>(); _proxy.Initialize(this, modelInfo._planeSize, _modelRenderPos); string modelJson = Live2DFramework.getPlatformManager().loadString(modelInfo._SettingFullPath); _modelSetting = new ModelSettingJson(modelJson); startTimeMSec = UtSystem.getUserTimeMSec(); _updatedOnce = false; // Live2D Model if (_modelSetting.GetModelFile() != null) { loadModelData(_modelHomeDir + _modelSetting.GetModelFile()); var len = _modelSetting.GetTextureNum(); for (int i = 0; i < len; i++) { loadTexture(i, _modelHomeDir + _modelSetting.GetTextureFile(i)); } } // 모션은 미리 읽지 않고 각 모션 재생 시도 시 읽어들임 // Expression if (_modelSetting.GetExpressionNum() != 0) { var len = _modelSetting.GetExpressionNum(); for (int i = 0; i < len; i++) { loadExpression(_modelSetting.GetExpressionName(i), _modelHomeDir + _modelSetting.GetExpressionFile(i)); } } // Physics if (_modelSetting.GetPhysicsFile() != null) { loadPhysics(_modelHomeDir + _modelSetting.GetPhysicsFile()); } // Pose if (_modelSetting.GetPoseFile() != null) { loadPose(_modelHomeDir + _modelSetting.GetPoseFile()); } // 파라미터 초기값 for (int i = 0; i < _modelSetting.GetInitParamNum(); i++) { string id = _modelSetting.GetInitParamID(i); float value = _modelSetting.GetInitParamValue(i); live2DModel.setParamFloat(id, value); } // 파츠 for (int i = 0; i < _modelSetting.GetInitPartsVisibleNum(); i++) { string id = _modelSetting.GetInitPartsVisibleID(i); float value = _modelSetting.GetInitPartsVisibleValue(i); live2DModel.setPartsOpacity(id, value); } // 눈 자동깜빡임 eyeBlink = new L2DEyeBlink(); // 레이아웃. 적용 순서에 따라 결과 달라짐에 주의 getModelMatrix().multScale(modelInfo._layout._scale, modelInfo._layout._scale); getModelMatrix().setY(modelInfo._layout._y); setUpdating(false); // 갱신상태 완료 setInitialized(true); }
/// <summary> /// 眨眼 /// </summary> /// <param name="interval">单位:毫秒</param> public void StartEyeBlink(int interval = 5000) { eyeBlink = new L2DEyeBlink(); eyeBlink.setInterval(interval); }