diff --git a/AnimationGenerator.meta b/AnimationGenerator.meta new file mode 100644 index 0000000..e10abc3 --- /dev/null +++ b/AnimationGenerator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57650b478a7e5424faad710762f45b08 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AnimationGenerator/Editor.meta b/AnimationGenerator/Editor.meta new file mode 100644 index 0000000..2132e6b --- /dev/null +++ b/AnimationGenerator/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bfa5e045be516c4a85702fba4e2e519 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs b/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs new file mode 100644 index 0000000..11e1c9f --- /dev/null +++ b/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs @@ -0,0 +1,473 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +using UnityEngine; +using UnityEditor; +using UnityEditor.Animations; +using static VRC.SDK3.Avatars.Components.VRCAvatarDescriptor; +using VRC.SDK3.Avatars.Components; +using System.IO; +using VRC.SDK3.Avatars.ScriptableObjects; +using static VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionsMenu.Control; + +[CustomEditor(typeof(SnailMarker3AnimationCreator))] +public class SnailMarker3AnimationCreatorEditor : Editor +{ + private SnailMarker3AnimationCreator obj; + private GUIStyle errorStyle = new GUIStyle(); + private CustomAnimLayer fxLayer; + private AnimatorController fxController; + private VRCExpressionsMenu expressionMenu; + private VRCExpressionParameters expressionParams; + + //animation stuff + private AnimationClip eraseClip; + private AnimationClip drawClip; + private AnimationClip toggleOnClip; + private AnimationClip toggleOffClip; + + //Configuration Paramters: + public enum Hand { Left, Right } + public enum VRCGesture { Neutral, Fist, HandOpen, FingerPoint, Victory, RockNRoll, HandGun, ThumbsUp } + private Hand hand = Hand.Right; + private VRCGesture activateGesture = VRCGesture.FingerPoint; + private VRCGesture resetGesture = VRCGesture.HandOpen; + + public void OnEnable() + { + Debug.Log("OnEnable"); + errorStyle.normal.textColor = Color.red; + obj = target as SnailMarker3AnimationCreator; + + if (!findAvatarAndAnimationPath(obj.transform)) return; + findComponents(); + } + public override void OnInspectorGUI() + { + if (avatarDescriptor == null) + { + GUILayout.Label("Could not find VRC Avatar Descriptor on avatar.", errorStyle); + return; + } + + if(fxController == null || expressionParams == null || expressionMenu == null) { + GUILayout.Label("Avatar is missing some 3.0 stuff."); + if(GUILayout.Button("Setup 3.0 defaults")) { + ensureDefaults(); + } + } else { + GUILayout.Label("Select a location for the marker:"); + hand = (Hand)EditorGUILayout.EnumPopup("Hand:", hand); + activateGesture = (VRCGesture)EditorGUILayout.EnumPopup("Activate Gesture:", activateGesture); + resetGesture = (VRCGesture)EditorGUILayout.EnumPopup("Reset Gesture:", resetGesture); + + + GUILayout.Label("Select a location for the marker:"); + ShowMenuFoldout(avatarDescriptor.expressionsMenu, "Expressions Menu"); + } + } + + private HashSet expandedMenus = new HashSet(); + private void ShowMenuFoldout(VRCExpressionsMenu menu, string title) { + if(menu == null) return; + + bool b = expandedMenus.Contains(menu); + // Remove before we go any further, prevents infinite recursion on cyclic menus. + expandedMenus.Remove(menu); + + + if(! EditorGUILayout.Foldout(b, title, true)) { + return; + } + + EditorGUILayout.BeginVertical(); + GUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUI.indentLevel * 17); + if(menu.controls.Count < 8) { + if(GUILayout.Button("Add Marker Here", GUILayout.Width(130))){ + InstallMarker(ref menu); + } + } else { + GUILayout.Label("No room.", GUILayout.Width(130)); + } + GUILayout.EndHorizontal(); + + EditorGUI.indentLevel++; + foreach(var child in menu.controls) { + if(child.type == ControlType.SubMenu) { + ShowMenuFoldout(child.subMenu, child.name); + } + } + EditorGUI.indentLevel--; + EditorGUILayout.EndVertical(); + + // Okay, it's safe to add the menu back. + expandedMenus.Add(menu); + } + + //menu in this case is the chosen menu or submenu, in wich to add the marker. + private void InstallMarker(ref VRCExpressionsMenu menu) + { + ConfigureAnimationController(); + AddParameter(); + AddMarkerToMenu(ref menu); + //Finally destroy and cleanup. + Cleanup(); + } + + private void AddParameter() + { + for(int i = 0; i < expressionParams.parameters.Length; i++) + { + if (expressionParams.parameters[i].name == "ToggleMarker" || + expressionParams.parameters[i].name.Trim().Length == 0) + { + expressionParams.parameters[i].name = "ToggleMarker"; + return; + } + } + Debug.LogError("Could not create Avatar 3.0 parameter. You may be out of paramters."); + return; + } + private void AddMarkerToMenu(ref VRCExpressionsMenu menu) + { + var control = new VRCExpressionsMenu.Control(); + control.type = ControlType.Toggle; + control.name = "Toggle Marker"; + control.parameter = new VRCExpressionsMenu.Control.Parameter(); + control.parameter.name = "ToggleMarker"; + control.value = 1; + // control.icon // TODO + menu.controls.Add(control); + } + + Transform avatarTransform = null; + VRCAvatarDescriptor avatarDescriptor = null; + string animationPath; + + private bool findAvatarAndAnimationPath(Transform cur) + { + // Find the avatar root and record the animation path along the way. + avatarDescriptor = null; + avatarTransform = null; + string path = ""; + do + { + avatarDescriptor = cur.GetComponent(); + if (avatarDescriptor != null) + { + avatarTransform = cur; + break; + } + if (path.Length > 0) + path = cur.name + "/" + path; + else + path = cur.name; + cur = cur.parent; + } while (cur != null); + + if (avatarTransform != null) + { + animationPath = path; + Debug.Log("Animation path:" + animationPath); + return true; + } + + return false; + } + + private void findComponents() + { + fxLayer = avatarDescriptor.baseAnimationLayers.Where(layer => layer.type == AnimLayerType.FX).First(); + fxController = fxLayer.animatorController as AnimatorController; + + expressionMenu = avatarDescriptor.expressionsMenu; + expressionParams = avatarDescriptor.expressionParameters; + } + + private void ensureDefaults() + { + var obj = new SerializedObject(avatarDescriptor); + + obj.FindProperty("customizeAnimationLayers").boolValue = true; + obj.FindProperty("customExpressions").boolValue = true; + + // Find and set the FX property if necessary. + var baseAnimationLayers = obj.FindProperty("baseAnimationLayers.Array"); + var size = baseAnimationLayers.arraySize; + for (int i = 0; i < size; i++) + { + var layer = baseAnimationLayers.GetArrayElementAtIndex(i); + if ((AnimLayerType)(layer.FindPropertyRelative("type").enumValueIndex) != AnimLayerType.FX) + continue; + + var controllerProp = layer.FindPropertyRelative("animatorController"); + if (controllerProp.objectReferenceValue == null) + { + controllerProp.objectReferenceValue = CreateAssetFromTemplate("DefaultAnimatorController.controller"); + } + + layer.FindPropertyRelative("isDefault").boolValue = false; + break; + } + + var menu = obj.FindProperty("expressionsMenu"); + if(menu.objectReferenceValue == null) { + menu.objectReferenceValue = CreateAssetFromTemplate("DefaultMenu.asset"); + } + + var parameters = obj.FindProperty("expressionParameters"); + if(parameters.objectReferenceValue == null) { + parameters.objectReferenceValue = CreateAssetFromTemplate("DefaultParams.asset"); + } + + obj.ApplyModifiedProperties(); + + // revalidate + OnEnable(); + } + + + private string generatedAssetPath(string name) + { + return Path.Combine("Assets\\Snail\\Marker3.0\\Generated", avatarTransform.name, name); + } + private string generatedFilePath(string name) + { + return Path.Combine(generatedFolderPath(), name); + } + private string generatedFolderPath() + { + return Path.Combine(Application.dataPath, "Snail\\Marker3.0\\Generated\\", avatarDescriptor.name); + } + private string templateAssetPath(string name) + { + return Path.Combine("Assets\\Snail\\Marker3.0\\Templates", name); + } + private string generatedGestureName() + { + return (hand == Hand.Right) ? "GestureRight" : "GestureLeft"; + } + + private Object CreateAsset(Object asset, string name) + { + ensureGeneratedDirectory(); + string diskFile = generatedFilePath(name); + if (File.Exists(diskFile)) + { + if (!EditorUtility.DisplayDialog("Existing files", "Overwrite\n" + diskFile, "Yes", "No")) + throw new IOException("Rejected overwriting " + diskFile); + Debug.Log("Overwriting " + diskFile); + } + + AssetDatabase.CreateAsset(asset, generatedAssetPath(name)); + return asset; + } + + private T CreateAssetFromTemplate(string name) where T : Object + { + ensureGeneratedDirectory(); + string assetPath = generatedAssetPath(name); + string templatePath = templateAssetPath(name); + AssetDatabase.CopyAsset(templatePath, assetPath); + return AssetDatabase.LoadAssetAtPath(assetPath); + } + + private void ensureGeneratedDirectory() { + if (!Directory.Exists(generatedFolderPath())) + { + Directory.CreateDirectory(generatedFolderPath()); + } + } + + private void Cleanup() + { + // Remove this script from the avatar so that VRC is happy. + DestroyImmediate(obj.gameObject.GetComponent()); + } + + /******************************* + * Animations + *******************************/ + private void ConfigureAnimationController() + { + //Check and build the animation controller: + CreateParameters(); + CreateGestureLayer(); + CreateToggleLayer(); + } + + private void CreateParameters() + { + //find or create gestureRight + bool gestureParamFound = false; + for (int i = 0; i < fxController.parameters.Length; i++) + { + if (fxController.parameters[i].name == generatedGestureName()) + { + gestureParamFound = true; + } + } + if (!gestureParamFound) + { + fxController.AddParameter(generatedGestureName(), AnimatorControllerParameterType.Int); + } + //find or create markerToggle + bool toggleMarkerParamFound = false; + for (int i = 0; i < fxController.parameters.Length; i++) + { + if (fxController.parameters[i].name == "ToggleMarker") + { + toggleMarkerParamFound = true; + } + } + if (!toggleMarkerParamFound) + { + fxController.AddParameter("ToggleMarker", AnimatorControllerParameterType.Int); + } + } + private AnimatorControllerLayer FindLayer(string name) + { + AnimatorControllerLayer layer = null; + for (int i = 0; i < fxController.layers.Length; i++) + { + if (fxController.layers[i].name == name) + { + return fxController.layers[i]; + } + } + return layer; + } + private void CreateGestureLayer() + { + string layerName = generatedGestureName() + "Maker"; + AnimatorControllerLayer layer = FindLayer(layerName); + if (layer == null) + { + layer = new AnimatorControllerLayer(); + layer.name = layerName; + layer.defaultWeight = 1.0f; + layer.stateMachine = new AnimatorStateMachine(); + layer.stateMachine.name = layerName; + layer.stateMachine.hideFlags = HideFlags.HideInHierarchy; + if (AssetDatabase.GetAssetPath(fxController) != "") + AssetDatabase.AddObjectToAsset(layer.stateMachine, AssetDatabase.GetAssetPath(fxController)); + + AnimatorState idleState = layer.stateMachine.AddState("Idle"); + AnimatorState activateMarkerState = layer.stateMachine.AddState("Activate Marker"); + AnimatorState eraseAllState = layer.stateMachine.AddState("Erase All"); + for (int i = 0; i < 8; i++) + { + AnimatorStateTransition transition; + if (i == (int)activateGesture) + { + transition = layer.stateMachine.AddAnyStateTransition(activateMarkerState); + } + else if (i == (int)resetGesture) + { + transition = layer.stateMachine.AddAnyStateTransition(eraseAllState); + } + else + { + transition = layer.stateMachine.AddAnyStateTransition(idleState); + } + transition.AddCondition(AnimatorConditionMode.Equals, i, generatedGestureName()); + transition.hasExitTime = true; + transition.hasFixedDuration = true; + transition.duration = .1f; + transition.interruptionSource = TransitionInterruptionSource.Destination; + transition.canTransitionToSelf = false; + + } + + WriteGestureAnimations(); + activateMarkerState.motion = drawClip; + eraseAllState.motion = eraseClip; + fxController.AddLayer(layer); + } + } + + private void CreateToggleLayer() + { + string layerName = "ToggleMarker"; + AnimatorControllerLayer layer = FindLayer(layerName); + if (layer == null) + { + layer = new AnimatorControllerLayer(); + layer.name = layerName; + layer.stateMachine = new AnimatorStateMachine(); + layer.stateMachine.name = layerName; + layer.stateMachine.hideFlags = HideFlags.HideInHierarchy; + if (AssetDatabase.GetAssetPath(fxController) != "") + AssetDatabase.AddObjectToAsset(layer.stateMachine, AssetDatabase.GetAssetPath(fxController)); + + layer.blendingMode = AnimatorLayerBlendingMode.Override; + layer.defaultWeight = 1.0f; + + AnimatorState MarkerOffState = layer.stateMachine.AddState("MarkerOff"); + AnimatorState MarkerOnState = layer.stateMachine.AddState("MarkerOn"); + + AnimatorStateTransition transition = MarkerOffState.AddTransition(MarkerOnState); + transition.AddCondition(AnimatorConditionMode.Equals, 1, "ToggleMarker"); + transition.hasExitTime = false; + transition.hasFixedDuration = false; + transition.duration = 0; + transition.interruptionSource = TransitionInterruptionSource.Destination; + transition.canTransitionToSelf = false; + + transition = MarkerOnState.AddTransition(MarkerOffState); + transition.AddCondition(AnimatorConditionMode.Equals, 0, "ToggleMarker"); + transition.hasExitTime = false; + transition.hasFixedDuration = false; + transition.duration = 0; + transition.interruptionSource = TransitionInterruptionSource.Destination; + transition.canTransitionToSelf = false; + + WriteToggleAnimations(); + + MarkerOffState.motion = toggleOffClip; + MarkerOnState.motion = toggleOnClip; + fxController.AddLayer(layer); + } + } + private void WriteToggleAnimations() + { + float keyframe = 1F / 60; + + // Curve that sets a property to 1 over the course of 1 frame. + AnimationCurve curveOff = AnimationCurve.Linear(0, 0, keyframe, 0); + toggleOffClip = new AnimationClip(); + toggleOffClip.SetCurve(animationPath, typeof(TrailRenderer), "m_Enabled", curveOff); + CreateAsset(toggleOffClip, "MarkerOff.anim"); + + // Curve that sets a property to 0 over the course of 1 frame. + AnimationCurve curveOn = AnimationCurve.Linear(0, 1, keyframe, 1); + toggleOnClip = new AnimationClip(); + toggleOnClip.SetCurve(animationPath, typeof(TrailRenderer), "m_Enabled", curveOn); + CreateAsset(toggleOnClip, "MarkerOn.anim"); + + } + private void WriteGestureAnimations() + { + float keyframe = 1F / 60; + + // Curve that sets a property to 1 over the course of 1 frame. + AnimationCurve zeroCurve = AnimationCurve.Linear(0, 0, keyframe, 0); + AnimationClip erase = new AnimationClip(); + erase.SetCurve(animationPath, typeof(TrailRenderer), "m_Time", zeroCurve); + CreateAsset(erase, "EraseAll.anim"); + + // Curve that sets a property to 0 over the course of 1 frame. + AnimationCurve drawCurve = AnimationCurve.Linear(0, 1, keyframe, 1); + AnimationClip draw = new AnimationClip(); + draw.SetCurve(animationPath, typeof(TrailRenderer), "m_Emitting", drawCurve); + CreateAsset(draw, "Drawing.anim"); + + eraseClip = erase; + drawClip = draw; + } + /************************ + End Animations + *************************/ +} diff --git a/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs.meta b/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs.meta new file mode 100644 index 0000000..4290682 --- /dev/null +++ b/AnimationGenerator/Editor/SnailMarker3AnimationCreatorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a285e8f738508a24f8de46a10f54a20f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AnimationGenerator/SnailMarker3AnimationCreator.cs b/AnimationGenerator/SnailMarker3AnimationCreator.cs new file mode 100644 index 0000000..dbfb07f --- /dev/null +++ b/AnimationGenerator/SnailMarker3AnimationCreator.cs @@ -0,0 +1,8 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[RequireComponent(typeof(TrailRenderer))] +public class SnailMarker3AnimationCreator : MonoBehaviour { + +} diff --git a/AnimationGenerator/SnailMarker3AnimationCreator.cs.meta b/AnimationGenerator/SnailMarker3AnimationCreator.cs.meta new file mode 100644 index 0000000..d1121e9 --- /dev/null +++ b/AnimationGenerator/SnailMarker3AnimationCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d3ba90d5045c7f44b0cdb754bb1b3db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials.meta b/ExampleMaterials.meta new file mode 100644 index 0000000..ddf3b98 --- /dev/null +++ b/ExampleMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90f06a61e7971ba4aa6b7b561c91da53 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials/FlatColorTrail.mat b/ExampleMaterials/FlatColorTrail.mat new file mode 100644 index 0000000..0251d56 --- /dev/null +++ b/ExampleMaterials/FlatColorTrail.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FlatColorTrail + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.72404456, g: 0, b: 0.7924528, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/ExampleMaterials/FlatColorTrail.mat.meta b/ExampleMaterials/FlatColorTrail.mat.meta new file mode 100644 index 0000000..b370b64 --- /dev/null +++ b/ExampleMaterials/FlatColorTrail.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 12a8bc8a9b30268478ae60753d7b8423 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials/GradientTrail.mat b/ExampleMaterials/GradientTrail.mat new file mode 100644 index 0000000..ab6f2d9 --- /dev/null +++ b/ExampleMaterials/GradientTrail.mat @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: GradientTrail + m_Shader: {fileID: 4800000, guid: 1384d4a9608e5d64d94dfda5538c3792, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 0 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _texcoord: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + - __dirty: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _From: {r: 0, g: 0.0377028, b: 1, a: 0} + - _To: {r: 0.7924528, g: 0, b: 0.6955474, a: 0} diff --git a/ExampleMaterials/GradientTrail.mat.meta b/ExampleMaterials/GradientTrail.mat.meta new file mode 100644 index 0000000..3d2636a --- /dev/null +++ b/ExampleMaterials/GradientTrail.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73e570ffa6d7528428bf90266e4ad7ff +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials/GradientTrail.shader b/ExampleMaterials/GradientTrail.shader new file mode 100644 index 0000000..2b1b65b --- /dev/null +++ b/ExampleMaterials/GradientTrail.shader @@ -0,0 +1,57 @@ +// Made with Amplify Shader Editor +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "GradientTrail" +{ + Properties + { + _From("From", Color) = (0,0,0,0) + _To("To", Color) = (0,0,0,0) + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" } + Cull Back + CGPROGRAM + #pragma target 3.0 + #pragma surface surf Unlit keepalpha noshadow + struct Input + { + float2 uv_texcoord; + }; + + uniform float4 _From; + uniform float4 _To; + + inline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten ) + { + return half4 ( 0, 0, 0, s.Alpha ); + } + + void surf( Input i , inout SurfaceOutput o ) + { + float4 lerpResult4 = lerp( _From , _To , i.uv_texcoord.x); + o.Emission = lerpResult4.rgb; + o.Alpha = 1; + } + + ENDCG + } + CustomEditor "ASEMaterialInspector" +} +/*ASEBEGIN +Version=18200 +1920;0;1920;1018;960;504.5;1;True;False +Node;AmplifyShaderEditor.TextureCoordinatesNode;5;-746,234.5;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.ColorNode;2;-726,-89.5;Inherit;False;Property;_From;From;0;0;Create;True;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.ColorNode;3;-722,72.5;Inherit;False;Property;_To;To;1;0;Create;True;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.LerpOp;4;-403,148.5;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;0,0;Float;False;True;-1;2;ASEMaterialInspector;0;0;Unlit;GradientTrail;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Opaque;0.5;True;False;0;False;Opaque;;Geometry;All;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;False;0;0;False;-1;0;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;4;0;2;0 +WireConnection;4;1;3;0 +WireConnection;4;2;5;1 +WireConnection;0;2;4;0 +ASEEND*/ +//CHKSM=BED6C90BB9383B05BF2CAAD7F2065D1999648B0C \ No newline at end of file diff --git a/ExampleMaterials/GradientTrail.shader.meta b/ExampleMaterials/GradientTrail.shader.meta new file mode 100644 index 0000000..b7dfcab --- /dev/null +++ b/ExampleMaterials/GradientTrail.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1384d4a9608e5d64d94dfda5538c3792 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials/RainbowTrail.mat b/ExampleMaterials/RainbowTrail.mat new file mode 100644 index 0000000..94e308f --- /dev/null +++ b/ExampleMaterials/RainbowTrail.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RainbowTrail + m_Shader: {fileID: 4800000, guid: 12134baa25ba0f7469880130180abec4, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 0 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _texcoord: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + - __dirty: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/ExampleMaterials/RainbowTrail.mat.meta b/ExampleMaterials/RainbowTrail.mat.meta new file mode 100644 index 0000000..2c57392 --- /dev/null +++ b/ExampleMaterials/RainbowTrail.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afaf349ea57ca9d4d9a66efb52a2afd5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ExampleMaterials/RainbowTrail.shader b/ExampleMaterials/RainbowTrail.shader new file mode 100644 index 0000000..133f02f --- /dev/null +++ b/ExampleMaterials/RainbowTrail.shader @@ -0,0 +1,62 @@ +// Made with Amplify Shader Editor +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "Unlit/RainbowTrail" +{ + Properties + { + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" } + Cull Back + CGPROGRAM + #pragma target 3.0 + #pragma surface surf Unlit keepalpha addshadow fullforwardshadows + struct Input + { + float2 uv_texcoord; + }; + + + float3 HSVToRGB( float3 c ) + { + float4 K = float4( 1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0 ); + float3 p = abs( frac( c.xxx + K.xyz ) * 6.0 - K.www ); + return c.z * lerp( K.xxx, saturate( p - K.xxx ), c.y ); + } + + + inline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten ) + { + return half4 ( 0, 0, 0, s.Alpha ); + } + + void surf( Input i , inout SurfaceOutput o ) + { + float2 _Vector0 = float2(1,1); + float3 hsvTorgb1 = HSVToRGB( float3(i.uv_texcoord.x,_Vector0.x,_Vector0.y) ); + o.Emission = hsvTorgb1; + o.Alpha = 1; + } + + ENDCG + } + Fallback "Diffuse" + CustomEditor "ASEMaterialInspector" +} +/*ASEBEGIN +Version=18200 +1920;0;1920;1018;1160;501.5;1;False;False +Node;AmplifyShaderEditor.TextureCoordinatesNode;2;-424,-64.5;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.Vector2Node;3;-433,87.5;Inherit;False;Constant;_Vector0;Vector 0;0;0;Create;True;0;0;False;0;False;1,1;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.HSVToRGBNode;1;-202,-34.5;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;1,-81;Float;False;True;-1;2;ASEMaterialInspector;0;0;Unlit;Unlit/RainbowTrail;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Opaque;0.5;True;True;0;False;Opaque;;Geometry;All;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;0;0;False;-1;0;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;1;0;2;1 +WireConnection;1;1;3;1 +WireConnection;1;2;3;2 +WireConnection;0;2;1;0 +ASEEND*/ +//CHKSM=8E8C2C7B9179771A616C198932F4702F5F12FFB1 \ No newline at end of file diff --git a/ExampleMaterials/RainbowTrail.shader.meta b/ExampleMaterials/RainbowTrail.shader.meta new file mode 100644 index 0000000..1d27391 --- /dev/null +++ b/ExampleMaterials/RainbowTrail.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 12134baa25ba0f7469880130180abec4 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Generated.meta b/Generated.meta new file mode 100644 index 0000000..b35d1e8 --- /dev/null +++ b/Generated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab77388f1651d474ca7f71897b9e7c31 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Generated/Generated files show up here b/Generated/Generated files show up here new file mode 100644 index 0000000..e69de29 diff --git a/Generated/Generated files show up here.meta b/Generated/Generated files show up here.meta new file mode 100644 index 0000000..3dda931 --- /dev/null +++ b/Generated/Generated files show up here.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52a3ec2526d21cc469ebff1f4829f954 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Marker.prefab b/Marker.prefab new file mode 100644 index 0000000..0338176 --- /dev/null +++ b/Marker.prefab @@ -0,0 +1,141 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6578813026371332658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6578813026371332659} + - component: {fileID: 6578813026371332657} + - component: {fileID: 6578813026371332656} + m_Layer: 0 + m_Name: Marker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6578813026371332659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578813026371332658} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.0025, y: 0.0294, z: -0.0018} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!96 &6578813026371332657 +TrailRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578813026371332658} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: afaf349ea57ca9d4d9a66efb52a2afd5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Time: 10000000 + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.01 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 1 + shadowBias: 0.5 + generateLightingData: 0 + m_MinVertexDistance: 0.01 + m_Autodestruct: 0 + m_Emitting: 0 +--- !u!114 &6578813026371332656 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6578813026371332658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d3ba90d5045c7f44b0cdb754bb1b3db, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Marker.prefab.meta b/Marker.prefab.meta new file mode 100644 index 0000000..f66bf01 --- /dev/null +++ b/Marker.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b8cf755584cb92d4982bc6214ccc7899 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Marker3.unitypackage b/Marker3.unitypackage new file mode 100644 index 0000000..4d5a597 Binary files /dev/null and b/Marker3.unitypackage differ diff --git a/Marker3.unitypackage.meta b/Marker3.unitypackage.meta new file mode 100644 index 0000000..c9b63ab --- /dev/null +++ b/Marker3.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99e3fb0dc8dad3341a73eac7eccf62f1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates.meta b/Templates.meta new file mode 100644 index 0000000..0b1674b --- /dev/null +++ b/Templates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2eaa679d90352254bb99e02c9e6936fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates/DefaultAnimatorController.controller b/Templates/DefaultAnimatorController.controller new file mode 100644 index 0000000..fc60006 --- /dev/null +++ b/Templates/DefaultAnimatorController.controller @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DefaultAnimatorController + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107147732129565998} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &1107147732129565998 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: [] + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 0} diff --git a/Templates/DefaultAnimatorController.controller.meta b/Templates/DefaultAnimatorController.controller.meta new file mode 100644 index 0000000..8a68bad --- /dev/null +++ b/Templates/DefaultAnimatorController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c4bb0677af528d243974745fb9e132d7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates/DefaultMenu.asset b/Templates/DefaultMenu.asset new file mode 100644 index 0000000..9fd9b52 --- /dev/null +++ b/Templates/DefaultMenu.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: DefaultMenu + m_EditorClassIdentifier: + controls: [] diff --git a/Templates/DefaultMenu.asset.meta b/Templates/DefaultMenu.asset.meta new file mode 100644 index 0000000..fda8058 --- /dev/null +++ b/Templates/DefaultMenu.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7a509fdd1f07c4ebf45b79bfea5608 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates/DefaultParams.asset b/Templates/DefaultParams.asset new file mode 100644 index 0000000..c2312f3 --- /dev/null +++ b/Templates/DefaultParams.asset @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1506855854, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: DefaultParams + m_EditorClassIdentifier: + parameters: + - name: VRCEmote + valueType: 0 + - name: VRCFaceBlendH + valueType: 1 + - name: VRCFaceBlendV + valueType: 1 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 diff --git a/Templates/DefaultParams.asset.meta b/Templates/DefaultParams.asset.meta new file mode 100644 index 0000000..c09ba76 --- /dev/null +++ b/Templates/DefaultParams.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4529fd079e29c88479fa7ac0297ecbe3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates/MarkerMenu.asset b/Templates/MarkerMenu.asset new file mode 100644 index 0000000..d164cf2 --- /dev/null +++ b/Templates/MarkerMenu.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -340790334, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: MarkerMenu + m_EditorClassIdentifier: + controls: [] diff --git a/Templates/MarkerMenu.asset.meta b/Templates/MarkerMenu.asset.meta new file mode 100644 index 0000000..76db2a1 --- /dev/null +++ b/Templates/MarkerMenu.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ebe54cd8dad54045a0fb93d424a9923 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Templates/MarkerParameters.asset b/Templates/MarkerParameters.asset new file mode 100644 index 0000000..e81e5aa --- /dev/null +++ b/Templates/MarkerParameters.asset @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1506855854, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: MarkerParameters + m_EditorClassIdentifier: + parameters: + - name: VRCEmote + valueType: 0 + - name: VRCFaceBlendH + valueType: 1 + - name: VRCFaceBlendV + valueType: 1 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 + - name: + valueType: 0 diff --git a/Templates/MarkerParameters.asset.meta b/Templates/MarkerParameters.asset.meta new file mode 100644 index 0000000..ca457c1 --- /dev/null +++ b/Templates/MarkerParameters.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 358ffc409aa932a44bcbb9569ec30a63 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: