public override void OnInspectorGUI() { TexturePicker myScript = (TexturePicker)target; //myScript.experience = EditorGUILayout.IntField("Experience", myScript.experience); //EditorGUILayout.LabelField("Level", myScript.Level.ToString()); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Export Texture")) { myScript.ExportTexture(); } EditorGUILayout.EndHorizontal(); if (listTextures.Count == 0) { FillLTexture(myScript); } bool foldOutValue = true; foldOutValue = EditorGUILayout.Foldout(foldOutValue, "textures"); if (foldOutValue) { EditorGUILayout.BeginHorizontal(); int count = 0; foreach (Texture2D tx in listTextures) { if (GUILayout.Button(tx)) { } if (count == 3) { EditorGUILayout.EndHorizontal(); count = 0; EditorGUILayout.BeginHorizontal(); } count++; } EditorGUILayout.EndHorizontal(); } base.OnInspectorGUI(); }
void FillLTexture(TexturePicker myTexturePicker) { MeshRenderer mr = myTexturePicker.GetComponent <MeshRenderer>(); if (mr != null) { Texture2D tx = mr.material.mainTexture as Texture2D; if (tx != null) { int width = tx.width; int height = tx.height; int x = 0; int y = 0; var colors = tx.GetPixels(x, y, 64, 64); Texture2D newTexture = new Texture2D(64, 64); newTexture.SetPixels(colors); newTexture.Apply(); listTextures.Add(newTexture); } } }
/// <summary> /// Instantiates a <see cref="CubismMoc">model source</see> and a <see cref="CubismModel">model</see>. /// </summary> /// <param name="pickMaterial">The material mapper to use.</param> /// <param name="pickTexture">The texture mapper to use.</param> /// <returns>The instantiated <see cref="CubismModel">model</see> on success; <see langword="null"/> otherwise.</returns> public CubismModel ToModel(MaterialPicker pickMaterial, TexturePicker pickTexture) { // Initialize model source and instantiate it. var mocAsBytes = Moc3; if (mocAsBytes == null) { return(null); } var moc = CubismMoc.CreateFrom(mocAsBytes); var model = CubismModel.InstantiateFrom(moc); model.name = Path.GetFileNameWithoutExtension(FileReferences.Moc); #if UNITY_EDITOR // Add parameters and parts inspectors. model.gameObject.AddComponent <CubismParametersInspector>(); model.gameObject.AddComponent <CubismPartsInspector>(); #endif // Create renderers. var rendererController = model.gameObject.AddComponent <CubismRenderController>(); var renderers = rendererController.Renderers; var drawables = model.Drawables; // Initialize materials. for (var i = 0; i < renderers.Length; ++i) { renderers[i].Material = pickMaterial(this, drawables[i]); } // Initialize textures. for (var i = 0; i < renderers.Length; ++i) { renderers[i].MainTexture = pickTexture(this, drawables[i]); } // Initialize groups. var parameters = model.Parameters; for (var i = 0; i < parameters.Length; ++i) { if (IsParameterInGroup(parameters[i], "EyeBlink")) { if (model.gameObject.GetComponent <CubismEyeBlinkController>() == null) { model.gameObject.AddComponent <CubismEyeBlinkController>(); } parameters[i].gameObject.AddComponent <CubismEyeBlinkParameter>(); } // Set up mouth parameters. if (IsParameterInGroup(parameters[i], "LipSync")) { if (model.gameObject.GetComponent <CubismMouthController>() == null) { model.gameObject.AddComponent <CubismMouthController>(); } parameters[i].gameObject.AddComponent <CubismMouthParameter>(); } } // Add mask controller if required. for (var i = 0; i < drawables.Length; ++i) { if (!drawables[i].IsMasked) { continue; } // Add controller exactly once... model.gameObject.AddComponent <CubismMaskController>(); break; } // Initialize physics if JSON exists. var physics3JsonAsString = Physics3Json; if (!string.IsNullOrEmpty(physics3JsonAsString)) { var physics3Json = CubismPhysics3Json.LoadFrom(physics3JsonAsString); var physicsController = model.gameObject.GetComponent <CubismPhysicsController>(); if (physicsController == null) { physicsController = model.gameObject.AddComponent <CubismPhysicsController>(); } physicsController.Initialize(physics3Json.ToRig()); } // Make sure model is 'fresh' model.ForceUpdateNow(); return(model); }
private void btnChoose_Click(object sender, EventArgs e) { TexturePicker tp = new TexturePicker(curTexture); tp.ShowDialog(); }
/// <summary> /// Instantiates a <see cref="CubismMoc">model source</see> and a <see cref="CubismModel">model</see>. /// </summary> /// <param name="pickMaterial">The material mapper to use.</param> /// <param name="pickTexture">The texture mapper to use.</param> /// <param name="shouldImportAsOriginalWorkflow">Should import as original workflow.</param> /// <returns>The instantiated <see cref="CubismModel">model</see> on success; <see langword="null"/> otherwise.</returns> public CubismModel ToModel(MaterialPicker pickMaterial, TexturePicker pickTexture, bool shouldImportAsOriginalWorkflow = false) { // Initialize model source and instantiate it. var mocAsBytes = Moc3; if (mocAsBytes == null) { return(null); } var moc = CubismMoc.CreateFrom(mocAsBytes); var model = CubismModel.InstantiateFrom(moc); model.name = Path.GetFileNameWithoutExtension(FileReferences.Moc); #if UNITY_EDITOR // Add parameters and parts inspectors. model.gameObject.AddComponent <CubismParametersInspector>(); model.gameObject.AddComponent <CubismPartsInspector>(); #endif // Create renderers. var rendererController = model.gameObject.AddComponent <CubismRenderController>(); var renderers = rendererController.Renderers; var drawables = model.Drawables; // Initialize materials. for (var i = 0; i < renderers.Length; ++i) { renderers[i].Material = pickMaterial(this, drawables[i]); } // Initialize textures. for (var i = 0; i < renderers.Length; ++i) { renderers[i].MainTexture = pickTexture(this, drawables[i]); } // Initialize drawables. if (HitAreas != null) { for (var i = 0; i < HitAreas.Length; i++) { for (var j = 0; j < drawables.Length; j++) { if (drawables[j].Id == HitAreas[i].Id) { // Add components for hit judgement to HitArea target Drawables. var hitDrawable = drawables[j].gameObject.AddComponent <CubismHitDrawable>(); hitDrawable.Name = HitAreas[i].Name; drawables[j].gameObject.AddComponent <CubismRaycastable>(); break; } } } } // Initialize groups. var parameters = model.Parameters; for (var i = 0; i < parameters.Length; ++i) { if (IsParameterInGroup(parameters[i], "EyeBlink")) { if (model.gameObject.GetComponent <CubismEyeBlinkController>() == null) { model.gameObject.AddComponent <CubismEyeBlinkController>(); } parameters[i].gameObject.AddComponent <CubismEyeBlinkParameter>(); } // Set up mouth parameters. if (IsParameterInGroup(parameters[i], "LipSync")) { if (model.gameObject.GetComponent <CubismMouthController>() == null) { model.gameObject.AddComponent <CubismMouthController>(); } parameters[i].gameObject.AddComponent <CubismMouthParameter>(); } } // Add mask controller if required. for (var i = 0; i < drawables.Length; ++i) { if (!drawables[i].IsMasked) { continue; } // Add controller exactly once... model.gameObject.AddComponent <CubismMaskController>(); break; } // Add original workflow component if is original workflow. if (shouldImportAsOriginalWorkflow) { // Add cubism update manager. var updateManager = model.gameObject.GetComponent <CubismUpdateController>(); if (updateManager == null) { model.gameObject.AddComponent <CubismUpdateController>(); } // Add parameter store. var parameterStore = model.gameObject.GetComponent <CubismParameterStore>(); if (parameterStore == null) { parameterStore = model.gameObject.AddComponent <CubismParameterStore>(); } // Add pose controller. var poseController = model.gameObject.GetComponent <CubismPoseController>(); if (poseController == null) { poseController = model.gameObject.AddComponent <CubismPoseController>(); } // Add expression controller. var expressionController = model.gameObject.GetComponent <CubismExpressionController>(); if (expressionController == null) { expressionController = model.gameObject.AddComponent <CubismExpressionController>(); } // Add fade controller. var motionFadeController = model.gameObject.GetComponent <CubismFadeController>(); if (motionFadeController == null) { motionFadeController = model.gameObject.AddComponent <CubismFadeController>(); } } // Initialize physics if JSON exists. var physics3JsonAsString = Physics3Json; if (!string.IsNullOrEmpty(physics3JsonAsString)) { var physics3Json = CubismPhysics3Json.LoadFrom(physics3JsonAsString); var physicsController = model.gameObject.GetComponent <CubismPhysicsController>(); if (physicsController == null) { physicsController = model.gameObject.AddComponent <CubismPhysicsController>(); } physicsController.Initialize(physics3Json.ToRig()); } var userData3JsonAsString = UserData3Json; if (!string.IsNullOrEmpty(userData3JsonAsString)) { var userData3Json = CubismUserData3Json.LoadFrom(userData3JsonAsString); var drawableBodies = userData3Json.ToBodyArray(CubismUserDataTargetType.ArtMesh); for (var i = 0; i < drawables.Length; ++i) { var index = GetBodyIndexById(drawableBodies, drawables[i].Id); if (index >= 0) { var tag = drawables[i].gameObject.GetComponent <CubismUserDataTag>(); if (tag == null) { tag = drawables[i].gameObject.AddComponent <CubismUserDataTag>(); } tag.Initialize(drawableBodies[index]); } } } if (model.gameObject.GetComponent <Animator>() == null) { model.gameObject.AddComponent <Animator>(); } // Make sure model is 'fresh' model.ForceUpdateNow(); return(model); }
/// <summary> /// Instantiates a <see cref="CubismMoc">model source</see> and a <see cref="CubismModel">model</see>. /// </summary> /// <param name="pickMaterial">The material mapper to use.</param> /// <param name="pickTexture">The texture mapper to use.</param> /// <param name="shouldImportAsOriginalWorkflow">Should import as original workflow.</param> /// <returns>The instantiated <see cref="CubismModel">model</see> on success; <see langword="null"/> otherwise.</returns> public CubismModel ToModel(MaterialPicker pickMaterial, TexturePicker pickTexture, bool shouldImportAsOriginalWorkflow = false) { // Initialize model source and instantiate it. var mocAsBytes = Moc3; if (mocAsBytes == null) { return(null); } var moc = CubismMoc.CreateFrom(mocAsBytes); var model = CubismModel.InstantiateFrom(moc); model.name = Path.GetFileNameWithoutExtension(FileReferences.Moc); #if UNITY_EDITOR // Add parameters and parts inspectors. model.gameObject.AddComponent <CubismParametersInspector>(); model.gameObject.AddComponent <CubismPartsInspector>(); #endif // Create renderers. var rendererController = model.gameObject.AddComponent <CubismRenderController>(); var renderers = rendererController.Renderers; var drawables = model.Drawables; // Initialize materials. for (var i = 0; i < renderers.Length; ++i) { renderers[i].Material = pickMaterial(this, drawables[i]); } // Initialize textures. for (var i = 0; i < renderers.Length; ++i) { renderers[i].MainTexture = pickTexture(this, drawables[i]); } // Initialize groups. var parameters = model.Parameters; for (var i = 0; i < parameters.Length; ++i) { if (IsParameterInGroup(parameters[i], "EyeBlink")) { if (model.gameObject.GetComponent <CubismEyeBlinkController>() == null) { model.gameObject.AddComponent <CubismEyeBlinkController>(); } parameters[i].gameObject.AddComponent <CubismEyeBlinkParameter>(); } // Set up mouth parameters. if (IsParameterInGroup(parameters[i], "LipSync")) { if (model.gameObject.GetComponent <CubismMouthController>() == null) { model.gameObject.AddComponent <CubismMouthController>(); } parameters[i].gameObject.AddComponent <CubismMouthParameter>(); } } // Add mask controller if required. for (var i = 0; i < drawables.Length; ++i) { if (!drawables[i].IsMasked) { continue; } // Add controller exactly once... model.gameObject.AddComponent <CubismMaskController>(); break; } // Add original workflow component if is original workflow. if (shouldImportAsOriginalWorkflow) { // Add cubism update manager. var updateaManager = model.gameObject.GetComponent <CubismUpdateController>(); if (updateaManager == null) { model.gameObject.AddComponent <CubismUpdateController>(); } // Add parameter store. var parameterStore = model.gameObject.GetComponent <CubismParameterStore>(); if (parameterStore == null) { parameterStore = model.gameObject.AddComponent <CubismParameterStore>(); } // Add pose controller. var poseController = model.gameObject.GetComponent <CubismPoseController>(); if (poseController == null) { poseController = model.gameObject.AddComponent <CubismPoseController>(); } poseController.PoseData.Initialize(Pose3Json); #if UNITY_EDITOR // Create pose animation clip var motions = new List <SerializableMotion>(); if (FileReferences.Motions.Idle != null) { motions.AddRange(FileReferences.Motions.Idle); } if (FileReferences.Motions.TapBody != null) { motions.AddRange(FileReferences.Motions.TapBody); } for (var i = 0; i < motions.Count; ++i) { var jsonString = string.IsNullOrEmpty(motions[i].File) ? null : LoadReferencedAsset <string>(motions[i].File); if (jsonString == null) { continue; } var assetsDirectoryPath = Application.dataPath.Replace("Assets", ""); var assetPath = AssetPath.Replace(assetsDirectoryPath, ""); var directoryPath = Path.GetDirectoryName(assetPath) + "/"; var motion3Json = CubismMotion3Json.LoadFrom(jsonString); var animationClipPath = directoryPath + motions[i].File.Replace(".motion3.json", ".anim"); var newAnimationClip = motion3Json.ToAnimationClip(shouldImportAsOriginalWorkflow, false, true, Pose3Json); var oldAnimationClip = AssetDatabase.LoadAssetAtPath <AnimationClip>(animationClipPath); // Create animation clip. if (oldAnimationClip == null) { AssetDatabase.CreateAsset(newAnimationClip, animationClipPath); oldAnimationClip = newAnimationClip; } // Update animation clip. else { EditorUtility.CopySerialized(newAnimationClip, oldAnimationClip); EditorUtility.SetDirty(oldAnimationClip); } var fadeMotionPath = directoryPath + motions[i].File.Replace(".motion3.json", ".fade.asset"); var fadeMotion = AssetDatabase.LoadAssetAtPath <CubismFadeMotionData>(fadeMotionPath); if (fadeMotion == null) { fadeMotion = CubismFadeMotionData.CreateInstance(motion3Json, fadeMotionPath.Replace(directoryPath, ""), newAnimationClip.length, shouldImportAsOriginalWorkflow, true); AssetDatabase.CreateAsset(fadeMotion, fadeMotionPath); EditorUtility.SetDirty(fadeMotion); // Fade用モーションの参照をリストに追加 var directoryName = Path.GetDirectoryName(fadeMotionPath).ToString(); var modelDir = Path.GetDirectoryName(directoryName).ToString(); var modelName = Path.GetFileName(modelDir).ToString(); var fadeMotionListPath = Path.GetDirectoryName(directoryName).ToString() + "/" + modelName + ".fadeMotionList.asset"; var fadeMotions = AssetDatabase.LoadAssetAtPath <CubismFadeMotionList>(fadeMotionListPath); // 参照リスト作成 if (fadeMotions == null) { fadeMotions = ScriptableObject.CreateInstance <CubismFadeMotionList>(); fadeMotions.MotionInstanceIds = new int[0]; fadeMotions.CubismFadeMotionObjects = new CubismFadeMotionData[0]; AssetDatabase.CreateAsset(fadeMotions, fadeMotionListPath); } var instanceId = oldAnimationClip.GetInstanceID(); var motionIndex = Array.IndexOf(fadeMotions.MotionInstanceIds, instanceId); if (motionIndex != -1) { fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion; } else { motionIndex = fadeMotions.MotionInstanceIds.Length; Array.Resize(ref fadeMotions.MotionInstanceIds, motionIndex + 1); fadeMotions.MotionInstanceIds[motionIndex] = instanceId; Array.Resize(ref fadeMotions.CubismFadeMotionObjects, motionIndex + 1); fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion; } EditorUtility.SetDirty(fadeMotions); } for (var curveIndex = 0; curveIndex < motion3Json.Curves.Length; ++curveIndex) { var curve = motion3Json.Curves[curveIndex]; if (curve.Target == "PartOpacity") { if (Pose3Json.FadeInTime == 0.0f) { fadeMotion.ParameterIds[curveIndex] = curve.Id; fadeMotion.ParameterFadeInTimes[curveIndex] = Pose3Json.FadeInTime; fadeMotion.ParameterFadeOutTimes[curveIndex] = (curve.FadeOutTime < 0.0f) ? -1.0f : curve.FadeOutTime; fadeMotion.ParameterCurves[curveIndex] = new AnimationCurve(CubismMotion3Json.ConvertCurveSegmentsToKeyframes(curve.Segments)); } else { var poseFadeInTIme = (Pose3Json.FadeInTime < 0.0f) ? 0.5f : Pose3Json.FadeInTime; fadeMotion.ParameterIds[curveIndex] = curve.Id; fadeMotion.ParameterFadeInTimes[curveIndex] = poseFadeInTIme; fadeMotion.ParameterFadeOutTimes[curveIndex] = (curve.FadeOutTime < 0.0f) ? -1.0f : curve.FadeOutTime; var segments = curve.Segments; var segmentsCount = 2; for (var index = 2; index < curve.Segments.Length; index += 3) { // if current segment type is stepped and // next segment type is stepped or next segment is last segment // then convert segment type to liner. var currentSegmentTypeIsStepped = (curve.Segments[index] == 2); var currentSegmentIsLast = (index == (curve.Segments.Length - 3)); var nextSegmentTypeIsStepped = (currentSegmentIsLast) ? false : (curve.Segments[index + 3] == 2); var nextSegmentIsLast = (currentSegmentIsLast) ? false : ((index + 3) == (curve.Segments.Length - 3)); if (currentSegmentTypeIsStepped && (nextSegmentTypeIsStepped || nextSegmentIsLast)) { Array.Resize(ref segments, segments.Length + 3); segments[segmentsCount + 0] = 0; segments[segmentsCount + 1] = curve.Segments[index + 1]; segments[segmentsCount + 2] = curve.Segments[index - 1]; segments[segmentsCount + 3] = 0; segments[segmentsCount + 4] = curve.Segments[index + 1] + poseFadeInTIme; segments[segmentsCount + 5] = curve.Segments[index + 2]; segmentsCount += 6; } else if (curve.Segments[index] == 1) { segments[segmentsCount + 0] = curve.Segments[index + 0]; segments[segmentsCount + 1] = curve.Segments[index + 1]; segments[segmentsCount + 2] = curve.Segments[index + 2]; segments[segmentsCount + 3] = curve.Segments[index + 3]; segments[segmentsCount + 4] = curve.Segments[index + 4]; segments[segmentsCount + 5] = curve.Segments[index + 5]; segments[segmentsCount + 6] = curve.Segments[index + 6]; index += 4; segmentsCount += 7; } else { segments[segmentsCount + 0] = curve.Segments[index + 0]; segments[segmentsCount + 1] = curve.Segments[index + 1]; segments[segmentsCount + 2] = curve.Segments[index + 2]; segmentsCount += 3; } } fadeMotion.ParameterCurves[curveIndex] = new AnimationCurve(CubismMotion3Json.ConvertCurveSegmentsToKeyframes(segments)); } } } EditorUtility.SetDirty(fadeMotion); } #endif // Add expression controller. var expressionController = model.gameObject.GetComponent <CubismExpressionController>(); if (expressionController == null) { expressionController = model.gameObject.AddComponent <CubismExpressionController>(); } // Add fade controller. var motionFadeController = model.gameObject.GetComponent <CubismFadeController>(); if (motionFadeController == null) { motionFadeController = model.gameObject.AddComponent <CubismFadeController>(); } } // Initialize physics if JSON exists. var physics3JsonAsString = Physics3Json; if (!string.IsNullOrEmpty(physics3JsonAsString)) { var physics3Json = CubismPhysics3Json.LoadFrom(physics3JsonAsString); var physicsController = model.gameObject.GetComponent <CubismPhysicsController>(); if (physicsController == null) { physicsController = model.gameObject.AddComponent <CubismPhysicsController>(); } physicsController.Initialize(physics3Json.ToRig()); } var userData3JsonAsString = UserData3Json; if (!string.IsNullOrEmpty(userData3JsonAsString)) { var userData3Json = CubismUserData3Json.LoadFrom(userData3JsonAsString); var drawableBodies = userData3Json.ToBodyArray(CubismUserDataTargetType.ArtMesh); for (var i = 0; i < drawables.Length; ++i) { var index = GetBodyIndexById(drawableBodies, drawables[i].Id); if (index >= 0) { var tag = drawables[i].gameObject.GetComponent <CubismUserDataTag>(); if (tag == null) { tag = drawables[i].gameObject.AddComponent <CubismUserDataTag>(); } tag.Initialize(drawableBodies[index]); } } } if (model.gameObject.GetComponent <Animator>() == null) { model.gameObject.AddComponent <Animator>(); } // Make sure model is 'fresh' model.ForceUpdateNow(); return(model); }
public CubismModel ToModel(MaterialPicker pickMaterial, TexturePicker pickTexture, CompressedLive2D current, bool shouldImportAsOriginalWorkflow = false) { // Initialize model source and instantiate it. var mocAsBytes = Convert.FromBase64String(current.MocFile); if (mocAsBytes == null) { return(null); } var moc = CubismMoc.CreateFrom(mocAsBytes); var model = CubismModel.InstantiateFrom(moc); //init CubismModel3Json var modelJson = JsonUtility.FromJson <CubismModel3Json>(current.Model3Json); var references = modelJson.FileReferences; model.name = references.Moc.Replace(".moc3", ""); model.tag = "Player"; //make the texture 2D for attach the model data var modelTextures = new Texture2D[references.Textures.Length]; for (int index = 0; index < references.Textures.Length; index++) { modelTextures[index] = ReadPng(current.Textures[index].imageData); } #if UNITY_EDITOR // Add parameters and parts inspectors. model.gameObject.AddComponent <CubismParametersInspector>(); model.gameObject.AddComponent <CubismPartsInspector>(); #endif // Create renderers. var rendererController = model.gameObject.AddComponent <CubismRenderController>(); var renderers = rendererController.Renderers; var drawables = model.Drawables; // Initialize materials. for (var i = 0; i < renderers.Length; ++i) { renderers[i].Material = pickMaterial(modelJson, drawables[i]); } // Initialize textures. for (var i = 0; i < renderers.Length; ++i) { renderers[i].MainTexture = pickTexture(current, drawables[i], modelTextures); } rendererController.SortingMode = CubismSortingMode.BackToFrontOrder; // Initialize drawables. if (modelJson.HitAreas != null) { for (var i = 0; i < modelJson.HitAreas.Length; i++) { for (var j = 0; j < drawables.Length; j++) { if (drawables[j].Id == modelJson.HitAreas[i].Id) { // Add components for hit judgement to HitArea target Drawables. var hitDrawable = drawables[j].gameObject.AddComponent <CubismHitDrawable>(); hitDrawable.Name = modelJson.HitAreas[i].Name; drawables[j].gameObject.AddComponent <CubismRaycastable>(); break; } } } } // Initialize groups. var parameters = model.Parameters; for (var i = 0; i < parameters.Length; ++i) { if (IsParameterInGroup(modelJson, parameters[i], "EyeBlink")) { if (model.gameObject.GetComponent <CubismEyeBlinkController>() == null) { model.gameObject.AddComponent <CubismEyeBlinkController>(); } parameters[i].gameObject.AddComponent <CubismEyeBlinkParameter>(); } // Set up mouth parameters. if (IsParameterInGroup(modelJson, parameters[i], "LipSync")) { if (model.gameObject.GetComponent <CubismMouthController>() == null) { model.gameObject.AddComponent <CubismMouthController>(); } parameters[i].gameObject.AddComponent <CubismMouthParameter>(); } } // Add mask controller if required. for (var i = 0; i < drawables.Length; ++i) { if (!drawables[i].IsMasked) { continue; } // Add controller exactly once... model.gameObject.AddComponent <CubismMaskController>(); break; } // Add original workflow component if is original workflow. if (shouldImportAsOriginalWorkflow) { // Add cubism update manager. var updateaManager = model.gameObject.GetComponent <CubismUpdateController>(); if (updateaManager == null) { model.gameObject.AddComponent <CubismUpdateController>(); } // Add parameter store. var parameterStore = model.gameObject.GetComponent <CubismParameterStore>(); if (parameterStore == null) { parameterStore = model.gameObject.AddComponent <CubismParameterStore>(); } // Add pose controller. var poseController = model.gameObject.GetComponent <CubismPoseController>(); if (poseController == null) { poseController = model.gameObject.AddComponent <CubismPoseController>(); } // Add expression controller. var expressionController = model.gameObject.GetComponent <CubismExpressionController>(); if (expressionController == null) { expressionController = model.gameObject.AddComponent <CubismExpressionController>(); } // Add fade controller. var motionFadeController = model.gameObject.GetComponent <CubismFadeController>(); if (motionFadeController == null) { motionFadeController = model.gameObject.AddComponent <CubismFadeController>(); } } // Initialize physics if JSON exists. string physics3JsonAsString = current.Physics3Json; if (!string.IsNullOrEmpty(physics3JsonAsString)) { var physics3Json = CubismPhysics3Json.LoadFrom(physics3JsonAsString); var physicsController = model.gameObject.GetComponent <CubismPhysicsController>(); if (physicsController == null) { physicsController = model.gameObject.AddComponent <CubismPhysicsController>(); } physicsController.Initialize(physics3Json.ToRig()); } string userData3JsonAsString = current.UserData3Json; if (!string.IsNullOrEmpty(userData3JsonAsString)) { var userData3Json = CubismUserData3Json.LoadFrom(userData3JsonAsString); var drawableBodies = userData3Json.ToBodyArray(CubismUserDataTargetType.ArtMesh); for (var i = 0; i < drawables.Length; ++i) { var index = GetBodyIndexById(drawableBodies, drawables[i].Id); if (index >= 0) { var tag = drawables[i].gameObject.GetComponent <CubismUserDataTag>(); if (tag == null) { tag = drawables[i].gameObject.AddComponent <CubismUserDataTag>(); } tag.Initialize(drawableBodies[index]); } } } if (model.gameObject.GetComponent <Animator>() == null) { model.gameObject.AddComponent <Animator>(); } // Make sure model is 'fresh' model.ForceUpdateNow(); return(model); }
private void GenerateShaderInputControl(ShaderModelConstantRegister register) { string toolTipText = String.IsNullOrEmpty(register.Description) ? null : register.Description; TextBlock textBlock = new TextBlock { Foreground = Brushes.White, Margin = new Thickness(5), Inlines = { new Run { Foreground = (Brush)Application.Current.FindResource("HighlightBrush"), Text = register.RegisterName }, new Run { Text = String.Format(" : {0}", register.RegisterType.Name) }, }, ToolTip = toolTipText }; inputControlPanel.Children.Add(textBlock); Control control = null; if (register.RegisterType == typeof(Brush)) { control = new TexturePicker(register); } else if (register.RegisterType == typeof(double) || register.RegisterType == typeof(float)) { double minValue = Convert.ToDouble(register.MinValue); double maxValue = Convert.ToDouble(register.MaxValue); //double defaultValue = Double.Parse(register.DefaultValue.ToString(), NumberStyles.Any, null); double defaultValue = Convert.ToDouble(register.DefaultValue); control = new AdjustableSlider { Minimum = Math.Min(minValue, defaultValue), Maximum = Math.Max(maxValue, defaultValue), Value = defaultValue }; } else if (register.RegisterType == typeof(Point) || register.RegisterType == typeof(Vector) || register.RegisterType == typeof(Size)) { Point minValue = (Point)RegisterValueConverter.ConvertToUsualType(register.MinValue); Point maxValue = (Point)RegisterValueConverter.ConvertToUsualType(register.MaxValue); Point defaultValue = (Point)RegisterValueConverter.ConvertToUsualType(register.DefaultValue); control = new AdjustableSliderPair { Minimum = new Point(Math.Min(minValue.X, defaultValue.X), Math.Min(minValue.Y, defaultValue.Y)), Maximum = new Point(Math.Max(maxValue.X, defaultValue.X), Math.Max(maxValue.Y, defaultValue.Y)), Value = defaultValue }; } else if (register.RegisterType == typeof(Point3D) || register.RegisterType == typeof(Vector3D)) { Point3D minValue = (Point3D)RegisterValueConverter.ConvertToUsualType(register.MinValue); Point3D maxValue = (Point3D)RegisterValueConverter.ConvertToUsualType(register.MaxValue); Point3D defaultValue = (Point3D)RegisterValueConverter.ConvertToUsualType(register.DefaultValue); control = new AdjustableSliderTriplet { Minimum = new Point3D(Math.Min(minValue.X, defaultValue.X), Math.Min(minValue.Y, defaultValue.Y), Math.Min(minValue.Z, defaultValue.Z)), Maximum = new Point3D(Math.Max(maxValue.X, defaultValue.X), Math.Max(maxValue.Y, defaultValue.Y), Math.Max(maxValue.Z, defaultValue.Z)), Value = defaultValue }; } else if (register.RegisterType == typeof(Color)) { Color defaultValue = (Color)register.DefaultValue; //control = new Telerik.Windows.Controls.RadColorEditor //{ // HorizontalAlignment = HorizontalAlignment.Left, // SelectedColor = defaultValue //}; control = new AdjustableColor { HorizontalAlignment = HorizontalAlignment.Left, Value = defaultValue }; // ((control) as AdjustableColor).; //control = new TextBox //{ // Background = Brushes.LightYellow, // Width = 150, // HorizontalAlignment = HorizontalAlignment.Left, // Text = defaultValue.ToString() //}; } else if (register.RegisterType == typeof(Point4D)) { Point4D minValue = (Point4D)register.MinValue; Point4D maxValue = (Point4D)register.MaxValue; Point4D defaultValue = (Point4D)register.DefaultValue; control = new AdjustableSliderQuadruplet { Minimum = new Point4D(Math.Min(minValue.X, defaultValue.X), Math.Min(minValue.Y, defaultValue.Y), Math.Min(minValue.Z, defaultValue.Z), Math.Min(minValue.W, defaultValue.W)), Maximum = new Point4D(Math.Max(maxValue.X, defaultValue.X), Math.Max(maxValue.Y, defaultValue.Y), Math.Max(maxValue.Z, defaultValue.Z), Math.Max(maxValue.W, defaultValue.W)), Value = defaultValue }; } if (control != null) { control.Margin = new Thickness(15, 2, 25, 5); control.ToolTip = toolTipText; this.inputControlPanel.Children.Add(control); register.AffiliatedControl = control; } }
/// <summary> /// Instantiates a <see cref="CubismMoc">model source</see> and a <see cref="CubismModel">model</see>. /// </summary> /// <param name="pickMaterial">The material mapper to use.</param> /// <param name="pickTexture">The texture mapper to use.</param> /// <returns>The instantiated <see cref="CubismModel">model</see> on success; <see langword="null"/> otherwise.</returns> public CubismModel ToModel(MaterialPicker pickMaterial, TexturePicker pickTexture) { // Initialize model source and instantiate it. var mocAsBytes = Moc3; if (mocAsBytes == null) { return(null); } //キュービズムMoc生成 var moc = CubismMoc.CreateFrom(mocAsBytes); //モデル生成 var model = CubismModel.InstantiateFrom(moc); //モデル名設定 model.name = Path.GetFileNameWithoutExtension(FileReferences.Moc); #if UNITY_EDITOR // Add parameters and parts inspectors. model.gameObject.AddComponent <CubismParametersInspector>(); model.gameObject.AddComponent <CubismPartsInspector>(); #endif // CubismRenderControllerアタッチ var rendererController = model.gameObject.AddComponent <CubismRenderController>(); //レンダラー取得 var renderers = rendererController.Renderers; //ドローエイブル取得 var drawables = model.Drawables; // オーディオソースアタッチ model.gameObject.AddComponent <AudioSource>(); // マテリアルの初期化 for (var i = 0; i < renderers.Length; ++i) { renderers[i].Material = pickMaterial(this, drawables[i]); } // テクスチャの初期化 for (var i = 0; i < renderers.Length; ++i) { renderers[i].MainTexture = pickTexture(this, drawables[i]); } // グループの初期化 var parameters = model.Parameters; //パラメーターの読み込み、設定 for (var i = 0; i < parameters.Length; ++i) { if (IsParameterInGroup(parameters[i], "EyeBlink")) { if (model.gameObject.GetComponent <CubismEyeBlinkController>() == null) { model.gameObject.AddComponent <CubismEyeBlinkController>(); //上書きモードに設定 model.gameObject.GetComponent <CubismEyeBlinkController>().BlendMode = CubismParameterBlendMode.Override; } //まばたきが存在したら、瞬きコントローラ追加 if (model.gameObject.GetComponent <CubismAutoEyeBlinkInput>() == null) { model.gameObject.AddComponent <CubismAutoEyeBlinkInput>(); } parameters[i].gameObject.AddComponent <CubismEyeBlinkParameter>(); } // Set up mouth parameters. if (IsParameterInGroup(parameters[i], "LipSync")) { if (model.gameObject.GetComponent <CubismMouthController>() == null) { model.gameObject.AddComponent <CubismMouthController>(); //上書きモードに設定 model.gameObject.GetComponent <CubismMouthController>().BlendMode = CubismParameterBlendMode.Override; } if (model.gameObject.GetComponent <CubismAutoMouthInput>() == null) { model.gameObject.AddComponent <CubismAutoMouthInput>(); } parameters[i].gameObject.AddComponent <CubismMouthParameter>(); } } // 必要があれば、マスクコントローラーを読み込む for (var i = 0; i < drawables.Length; ++i) { if (!drawables[i].IsMasked) { continue; } // Add controller exactly once... model.gameObject.AddComponent <CubismMaskController>(); break; } // 物理演算ファイルの初期化 var physics3JsonAsString = Physics3Json; if (!string.IsNullOrEmpty(physics3JsonAsString)) { var physics3Json = CubismPhysics3Json.LoadFrom(physics3JsonAsString); var physicsController = model.gameObject.GetComponent <CubismPhysicsController>(); if (physicsController == null) { physicsController = model.gameObject.AddComponent <CubismPhysicsController>(); } physicsController.Initialize(physics3Json.ToRig()); } // ユーザーデータの初期化 var userData3JsonAsString = UserData3Json; if (!string.IsNullOrEmpty(userData3JsonAsString)) { var userData3Json = CubismUserData3Json.LoadFrom(userData3JsonAsString); var drawableBodies = userData3Json.ToBodyArray(CubismUserDataTargetType.ArtMesh); for (var i = 0; i < drawables.Length; ++i) { var index = GetBodyIndexById(drawableBodies, drawables[i].Id); if (index >= 0) { var tag = drawables[i].gameObject.GetComponent <CubismUserDataTag>(); if (tag == null) { tag = drawables[i].gameObject.AddComponent <CubismUserDataTag>(); } tag.Initialize(drawableBodies[index]); } } } //アニメーターコンポーネントの追加 if (model.gameObject.GetComponent <Animator>() == null) { model.gameObject.AddComponent <Animator>(); } //当たり判定クラスの追加 if (model.gameObject.GetComponent <CubismRaycaster>() == null) { model.gameObject.AddComponent <CubismRaycaster>(); } //目線追従クラスの追加 if (model.gameObject.GetComponent <CubismLookController>() == null) { var clc = model.gameObject.AddComponent <CubismLookController>(); } //目線追従クラスの追加 if (model.gameObject.GetComponent <CubismRenderController>() == null) { var clc = model.gameObject.AddComponent <CubismRenderController>(); } // Make sure model is 'fresh' model.ForceUpdateNow(); //モデルを返す return(model); }