Initial Commit

This commit is contained in:
jellejurre
2025-07-19 01:03:02 +02:00
commit e7904e3140
304 changed files with 22521 additions and 0 deletions

8
AssetOrganizer.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c8eea97a2d91b3b4f829627b70886682
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7698f40b260788141b158264be2f08e9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,662 @@
using System;
using System.Collections;
using UnityEngine;
using UnityEditor;
using UnityEditor.Presets;
using UnityEditor.Animations;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using Object = UnityEngine.Object;
namespace DreadScripts.AssetOrganizer
{
public class AssetOrganizer : EditorWindow
{
#region Declarations
#region Constants
private const string PrefsKey = "AvatarAssetOrganizerSettings";
private static readonly OrganizeType[] organizeTypes =
{
new OrganizeType(0, "Animation", typeof(AnimationClip), typeof(BlendTree)),
new OrganizeType(1, "Controller", typeof(AnimatorController), typeof(AnimatorOverrideController)),
new OrganizeType(2, "Texture", typeof(Texture)),
new OrganizeType(3, "Material", typeof(Material)),
new OrganizeType(4, "Model", new string[] {".fbx",".obj", ".dae", ".3ds", ".dxf"}, typeof(Mesh)),
new OrganizeType(5, "Prefab", new string[] {".prefab"}, typeof(GameObject)),
new OrganizeType(6, "Audio", typeof(AudioClip)),
new OrganizeType(7, "Mask", typeof(AvatarMask)),
new OrganizeType(8, "Scene", typeof(SceneAsset)),
new OrganizeType(9, "Preset", typeof(Preset)),
new OrganizeType(10, "VRC", "VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionParameters","VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionsMenu"),
new OrganizeType(11, "Shader", typeof(Shader)),
new OrganizeType(12, "Script", new string[] {".dll"}, typeof(MonoScript)),
new OrganizeType(13, "Other", typeof(ScriptableObject))
};
private static readonly string[] mainTabs = {"Organizer", "Options"};
private static readonly string[] optionTabs = {"Folders", "Types"};
private enum OrganizeAction
{
Skip,
Move
//Removed till an intuitive way for user friendly GUID replacement option is implemented
//Copy
}
private enum SortOptions
{
AlphabeticalPath,
AlphabeticalAsset,
AssetType
}
#endregion
#region Automated Variables
private static int mainToolbarIndex;
private static int optionsToolbarIndex;
private static DependencyAsset[] assets;
private static List<string> createdFolders = new List<string>();
private Vector2 scrollview;
#endregion
#region Input
private static Object mainAsset;
private static string destinationPath;
[SerializeField] private List<CustomFolder> specialFolders;
[SerializeField] private OrganizeAction[] typeActions;
[SerializeField] private SortOptions sortByOption;
[SerializeField] private bool deleteEmptyFolders = true;
#endregion
#endregion
#region Methods
#region Main Methods
private void OnGUI()
{
scrollview = EditorGUILayout.BeginScrollView(scrollview);
mainToolbarIndex = GUILayout.Toolbar(mainToolbarIndex, mainTabs);
switch (mainToolbarIndex)
{
case 0:
DrawOrganizerTab();
break;
case 1:
DrawOptionsTab();
break;
}
DrawSeparator();
Credit();
EditorGUILayout.EndScrollView();
}
private void GetDependencyAssets()
{
destinationPath = AssetDatabase.GetAssetPath(mainAsset);
bool isFolder = AssetDatabase.IsValidFolder(destinationPath);
string[] assetsPath = isFolder ? GetAssetPathsInFolder(destinationPath).ToArray() : AssetDatabase.GetDependencies(destinationPath);
assets = assetsPath.Select(p => new DependencyAsset(p)).ToArray();
if (!isFolder) destinationPath = destinationPath.Replace('\\', '/').Substring(0, destinationPath.LastIndexOf('/'));
foreach (var a in assets)
{
string[] subFolders = a.path.Split('/');
bool setByFolder = false;
foreach (var f in specialFolders)
{
if (!f.active) continue;
if (subFolders.All(s => s != f.name)) continue;
a.action = f.action;
setByFolder = true;
break;
}
if (setByFolder) continue;
if (!TrySetAction(a))
a.associatedType = organizeTypes.Last();
}
switch (sortByOption)
{
case SortOptions.AlphabeticalPath:
assets = assets.OrderBy(a => a.path).ToArray();
break;
case SortOptions.AlphabeticalAsset:
assets = assets.OrderBy(a => a.asset.name).ToArray();
break;
case SortOptions.AssetType:
assets = assets.OrderBy(a => a.type.Name).ToArray();
break;
}
}
private void OrganizeAssets()
{
CheckFolders();
List<string> affectedFolders = new List<string>();
try
{
AssetDatabase.StartAssetEditing();
int count = assets.Length;
float progressPerAsset = 1f / count;
for (var i = 0; i < count; i++)
{
EditorUtility.DisplayProgressBar("Organizing", $"Organizing Assets ({i+1}/{count})", (i + 1) * progressPerAsset);
var a = assets[i];
string newPath = AssetDatabase.GenerateUniqueAssetPath($"{destinationPath}/{a.associatedType.name}/{Path.GetFileName(a.path)}");
switch (a.action)
{
default: case OrganizeAction.Skip: continue;
case OrganizeAction.Move:
AssetDatabase.MoveAsset(a.path, newPath);
affectedFolders.Add(Path.GetDirectoryName(a.path));
break;
/*case OrganizeAction.Copy:
AssetDatabase.CopyAsset(a.path, newPath);
break;*/
}
}
}
finally
{
EditorUtility.ClearProgressBar();
AssetDatabase.StopAssetEditing();
}
try
{
AssetDatabase.StartAssetEditing();
foreach (var folderPath in createdFolders.Concat(affectedFolders).Distinct().Where(DirectoryIsEmpty))
AssetDatabase.DeleteAsset(folderPath);
}
finally { AssetDatabase.StopAssetEditing(); }
EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(destinationPath));
assets = null;
destinationPath = null;
}
#endregion
#region GUI Methods
private void DrawOrganizerTab()
{
GUIStyle boxStyle = GUI.skin.GetStyle("box");
using (new GUILayout.HorizontalScope())
{
EditorGUI.BeginChangeCheck();
mainAsset = EditorGUILayout.ObjectField("Main Asset", mainAsset, typeof(Object), false);
if (EditorGUI.EndChangeCheck())
{
if (mainAsset)
{
destinationPath = AssetDatabase.GetAssetPath(mainAsset);
if (!AssetDatabase.IsValidFolder(destinationPath)) destinationPath = Path.GetDirectoryName(destinationPath).Replace('\\', '/');
}
assets = null;
}
using (new EditorGUI.DisabledScope(!mainAsset))
if (GUILayout.Button("Get Assets", GUILayout.Width(80)))
GetDependencyAssets();
}
destinationPath = AssetFolderPath(destinationPath, "Destination Folder");
if (assets != null)
{
DrawSeparator(4, 20);
var h = EditorGUIUtility.singleLineHeight;
var squareOptions = new GUILayoutOption[] { GUILayout.Width(h), GUILayout.Height(h) };
foreach (var a in assets)
{
using (new GUILayout.HorizontalScope(boxStyle))
{
GUILayout.Label(a.icon, squareOptions);
if (GUILayout.Button($"| {a.path}", GUI.skin.label))
EditorGUIUtility.PingObject(a.asset);
a.action = (OrganizeAction)EditorGUILayout.EnumPopup(a.action, GUILayout.Width(60));
}
}
if (GUILayout.Button("Organize Assets"))
OrganizeAssets();
}
}
private void DrawOptionsTab()
{
optionsToolbarIndex = GUILayout.Toolbar(optionsToolbarIndex, optionTabs);
switch (optionsToolbarIndex)
{
case 0:
DrawFolderOptions();
break;
case 1:
DrawTypeOptions();
break;
}
DrawSeparator();
using (new GUILayout.HorizontalScope("helpbox"))
{
deleteEmptyFolders = EditorGUILayout.Toggle(new GUIContent("Delete Empty Folders", "After moving assets, delete source folders if they're empty"), deleteEmptyFolders);
sortByOption = (SortOptions)EditorGUILayout.EnumPopup("Sort Search By", sortByOption);
}
}
private void DrawFolderOptions()
{
for (var i = 0; i < specialFolders.Count; i++)
{
var f = specialFolders[i];
using (new GUILayout.HorizontalScope("helpbox"))
{
using (new BGColoredScope(Color.green, Color.grey, f.active))
f.active = GUILayout.Toggle(f.active, f.active ? "Enabled" : "Disabled", GUI.skin.button, GUILayout.Width(100), GUILayout.Height(18));
using (new EditorGUI.DisabledScope(!f.active))
{
f.name = GUILayout.TextField(f.name);
f.action = (OrganizeAction) EditorGUILayout.EnumPopup(f.action, GUILayout.Width(60));
if (GUILayout.Button("X", GUILayout.Width(18), GUILayout.Height(18)))
specialFolders.RemoveAt(i);
}
}
}
if (GUILayout.Button("Add"))
specialFolders.Add(new CustomFolder());
}
private void DrawTypeOptions()
{
using (new GUILayout.HorizontalScope())
{
void DrawTypeGUI(OrganizeType t)
{
var icon = GUIContent.none;
if (t.associatedTypes.Length > 0)
icon = new GUIContent(AssetPreview.GetMiniTypeThumbnail(t.associatedTypes[0]));
using (new GUILayout.HorizontalScope())
{
GUILayout.Label(icon, GUILayout.Height(18), GUILayout.Width(18));
GUILayout.Label($"| {t.name}");
if (TryGetTypeAction(t, out _))
typeActions[t.actionIndex] = (OrganizeAction)EditorGUILayout.EnumPopup(typeActions[t.actionIndex], GUILayout.Width(60));
}
}
using (new GUILayout.VerticalScope("helpbox"))
{
for (int i = 0; i < organizeTypes.Length; i+=2)
DrawTypeGUI(organizeTypes[i]);
}
using (new GUILayout.VerticalScope("helpbox"))
{
for (int i = 1; i < organizeTypes.Length; i += 2)
DrawTypeGUI(organizeTypes[i]);
}
}
}
private static string AssetFolderPath(string variable, string title)
{
using (new GUILayout.HorizontalScope())
{
EditorGUILayout.TextField(title, variable);
if (GUILayout.Button("...", GUILayout.Width(30)))
{
var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty);
if (string.IsNullOrEmpty(dummyPath))
return variable;
string newPath = FileUtil.GetProjectRelativePath(dummyPath);
if (!newPath.StartsWith("Assets"))
{
Debug.LogWarning("New Path must be a folder within Assets!");
return variable;
}
variable = newPath;
}
}
return variable;
}
private static void DrawSeparator(int thickness = 2, int padding = 10)
{
Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(thickness + padding));
r.height = thickness;
r.y += padding / 2f;
r.x -= 2;
r.width += 6;
ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor);
EditorGUI.DrawRect(r, lineColor);
}
#endregion
#region Sub-Main Methods
[MenuItem("DreadTools/Asset Organizer", false, 36)]
private static void ShowWindow() => GetWindow<AssetOrganizer>(false, "Asset Organizer", true);
private bool TrySetAction(DependencyAsset a)
{
for (int i = 0; i < organizeTypes.Length; i++)
{
if (!organizeTypes[i].IsAppliedTo(a)) continue;
if (TryGetTypeAction(organizeTypes[i], out var action))
{
a.action = action;
a.associatedType = organizeTypes[i];
return true;
}
}
return false;
}
private bool TryGetTypeAction(OrganizeType type, out OrganizeAction action)
{
bool hasDoubleTried = false;
TryAgain:
try
{
action = typeActions[type.actionIndex];
return true;
}
catch (Exception)
{
if (hasDoubleTried) throw;
OrganizeAction[] newArray = new OrganizeAction[organizeTypes.Length];
for (int j = 0; j < newArray.Length; j++)
{
try { newArray[j] = typeActions[j]; }
catch { newArray[j] = OrganizeAction.Skip; }
}
Debug.LogWarning("Type Actions re-initialized due to a loading/serialization.");
typeActions = newArray;
hasDoubleTried = true;
goto TryAgain;
}
}
private static void CheckFolders()
{
if (!destinationPath.StartsWith("Assets/"))
destinationPath = "Assets/" + destinationPath;
ReadyPath(destinationPath);
createdFolders.Clear();
void CheckFolder(string name)
{
string path = $"{destinationPath}/{name}";
if (ReadyPath(path)) createdFolders.Add(path);
}
try
{
AssetDatabase.StartAssetEditing();
for (int i = 0; i < organizeTypes.Length; i++)
CheckFolder(organizeTypes[i].name);
}
finally { AssetDatabase.StopAssetEditing(); }
}
public static void DeleteIfEmptyFolder(string folderPath)
{
if (!AssetDatabase.IsValidFolder(folderPath))
folderPath = Path.GetDirectoryName(folderPath);
while (DirectoryIsEmpty(folderPath) && folderPath != "Assets")
{
var parentDirectory = Path.GetDirectoryName(folderPath);
FileUtil.DeleteFileOrDirectory(folderPath);
FileUtil.DeleteFileOrDirectory(folderPath + ".meta");
folderPath = parentDirectory;
}
}
public static bool DirectoryIsEmpty(string path) => !Directory.EnumerateFileSystemEntries(path).Any();
#endregion
#region Automated Methods
private void OnEnable()
{
string data = EditorPrefs.GetString(PrefsKey, JsonUtility.ToJson(this, false));
JsonUtility.FromJsonOverwrite(data, this);
if (!EditorPrefs.HasKey(PrefsKey))
{
//Default Folder based actions. Based on usual VRC assets.
specialFolders = new List<CustomFolder>
{
new CustomFolder("VRCSDK"),
new CustomFolder("_PoiyomiShaders"),
new CustomFolder("VRLabs"),
new CustomFolder("PumkinsAvatarTools"),
new CustomFolder("DreadScripts"),
new CustomFolder("Packages"),
new CustomFolder("Plugins"),
new CustomFolder("Editor")
};
//Default Type based Actions
typeActions = new OrganizeAction[]
{
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Move,
OrganizeAction.Skip,
OrganizeAction.Move,
OrganizeAction.Skip,
OrganizeAction.Skip,
OrganizeAction.Skip,
};
}
createdFolders = new List<string>();
}
private void OnDisable()
{
string data = JsonUtility.ToJson(this, false);
EditorPrefs.SetString(PrefsKey, data);
}
#endregion
#region Helper Methods
private static void Credit()
{
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel"))
Application.OpenURL("https://linktr.ee/Dreadrith");
}
}
private static bool ReadyPath(string folderPath)
{
if (Directory.Exists(folderPath)) return false;
Directory.CreateDirectory(folderPath);
AssetDatabase.ImportAsset(folderPath);
return true;
}
public static List<string> GetAssetPathsInFolder(string path, bool deep = true)
{
string[] fileEntries = Directory.GetFiles(path);
string[] subDirectories = deep ? AssetDatabase.GetSubFolders(path) : null;
List<string> list =
(from fileName in fileEntries
where !fileName.EndsWith(".meta")
select fileName.Replace('\\', '/')).ToList();
if (deep)
foreach (var sd in subDirectories)
list.AddRange(GetAssetPathsInFolder(sd));
return list;
}
#endregion
#endregion
#region Classes & Structs
[System.Serializable]
private class CustomFolder
{
public string name;
public bool active = true;
public OrganizeAction action;
public CustomFolder(){}
public CustomFolder(string newName, OrganizeAction action = OrganizeAction.Skip)
{
name = newName;
this.action = action;
}
}
private class DependencyAsset
{
public readonly Object asset;
public readonly string path;
public readonly Type type;
public readonly GUIContent icon;
public OrganizeAction action;
public OrganizeType associatedType;
public DependencyAsset(string path)
{
this.path = path;
asset = AssetDatabase.LoadAssetAtPath<Object>(path);
action = OrganizeAction.Skip;
type = asset.GetType();
icon = new GUIContent(AssetPreview.GetMiniTypeThumbnail(type), type.Name);
}
}
private readonly struct OrganizeType
{
public readonly int actionIndex;
public readonly string name;
public readonly Type[] associatedTypes;
private readonly string[] associatedExtensions;
public OrganizeType(int actionIndex, string name)
{
this.actionIndex = actionIndex;
this.name = name;
this.associatedTypes = Array.Empty<Type>();
this.associatedExtensions = Array.Empty<string>();
}
public OrganizeType(int actionIndex, string name, params string[] associatedTypes)
{
this.actionIndex = actionIndex;
this.name = name;
this.associatedTypes = new Type[associatedTypes.Length];
for (int i = 0; i < associatedTypes.Length; i++)
this.associatedTypes[i] = System.Type.GetType(associatedTypes[i]);
this.associatedExtensions = Array.Empty<string>();
}
public OrganizeType(int actionIndex, string name, params Type[] associatedTypes)
{
this.actionIndex = actionIndex;
this.name = name;
this.associatedTypes = associatedTypes;
this.associatedExtensions = Array.Empty<string>();
}
public OrganizeType(int actionIndex, string name, string[] associatedExtensions, params string[] associatedTypes)
{
this.actionIndex = actionIndex;
this.name = name;
this.associatedTypes = new Type[associatedTypes.Length];
for (int i = 0; i < associatedTypes.Length; i++)
this.associatedTypes[i] = System.Type.GetType(associatedTypes[i]);
this.associatedExtensions = associatedExtensions;
}
public OrganizeType(int actionIndex, string name, string[] associatedExtensions, params Type[] associatedTypes)
{
this.actionIndex = actionIndex;
this.name = name;
int count = associatedTypes.Length;
this.associatedTypes = associatedTypes;
this.associatedExtensions = associatedExtensions;
}
public bool IsAppliedTo(DependencyAsset a)
{
bool applies = a.type != null &&
(associatedTypes.Any(t => t != null && (a.type == t || a.type.IsSubclassOf(t)))
|| associatedExtensions.Any(e => !string.IsNullOrWhiteSpace(e) && a.path.EndsWith(e)));
return applies;
}
}
private class BGColoredScope : System.IDisposable
{
private readonly Color ogColor;
public BGColoredScope(Color setColor)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = setColor;
}
public BGColoredScope(Color setColor, bool isActive)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = isActive ? setColor : ogColor;
}
public BGColoredScope(Color active, Color inactive, bool isActive)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = isActive ? active : inactive;
}
public BGColoredScope(int selectedIndex, params Color[] colors)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = colors[selectedIndex];
}
public void Dispose()
{
GUI.backgroundColor = ogColor;
}
}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c3350e00f0c1769488b502a2a4f77a48
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
{
"name": "com.dreadscripts.assetorganizer.Editor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ffecb479d42e80945a3b21adb02b71e4
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

21
AssetOrganizer/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9587cb3598e7645408cf231bd10e0beb
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

22
AssetOrganizer/README.md Normal file
View File

@@ -0,0 +1,22 @@
# Asset Organizer
Reorganizes Prefab, Scene or Folder's dependency assets into their own sorted folders
### [Download From Here](https://vpm.dreadscripts.com/)
## Features
- Organize assets in your project based on their types or custom folders.
- Define custom folder actions for specific asset types.
- Choose from various sorting options to manage your assets effectively.
- Delete empty folders automatically after organizing assets.
## How to Use
1. Open the Unity Editor.
2. Navigate to `DreadTools > Asset Organizer` in the top menu.
3. Choose the "Organizer" tab to organize assets based on their types or custom folders.
4. Use the "Options" tab to configure folder actions, type actions, and sorting options.
5. Click "Get Assets" to select a main asset and gather its dependencies.
6. Adjust the organization settings as needed.
7. Click "Organize Assets" to apply the changes.
### Thank You
If you enjoy Asset Organizer, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)!

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 293a57234d624b74ab4a7fbe07d0ac19
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,17 @@
{
"name": "com.dreadscripts.assetorganizer",
"displayName": "DreadScripts - AssetOrganizer",
"version": "1.0.1",
"description": "Reorganizes Prefab, Scene or Folder's dependency assets into their own sorted folders.",
"gitDependencies": {},
"vpmDependencies": {},
"author": {
"name": "Dreadrith",
"email": "dreadscripts@gmail.com",
"url": "https://www.dreadrith.com"
},
"legacyFolders": {},
"legacyFiles": {},
"type": "tool",
"unity": "2019.4"
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e4bc2cfdad5430543a82759af2a714dc
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
AutoBounds.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d3dd19a6bc8656345af033917af670f4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
AutoBounds/Editor.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c6fc63526d0ac084981a6d4acbeff746
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,92 @@
using UnityEngine;
using UnityEditor;
//Made by Dreadrith#3238
//Discord: https://discord.gg/ZsPfrGn
//Github: https://github.com/Dreadrith/DreadScripts
//Gumroad: https://gumroad.com/dreadrith
//Ko-fi: https://ko-fi.com/dreadrith
namespace DreadScripts.AutoBounds
{
public class AutoBounds
{
private const float boundsPercentIncrease = 25;
//Sets bounds to auto-calculated dimensions starting from the target
[MenuItem("DreadTools/Utility/AutoBounds/Auto")]
private static void CalculateBounds()
{
//Get Selection
GameObject go = Selection.activeGameObject;
if (!go) return;
//Check for animator and to use hips instead of target as root
//Always using target as root may make the bounds follow improperly
Animator ani = go.GetComponent<Animator>();
bool isHuman = ani && ani.avatar && ani.isHuman;
Transform rootBone = isHuman ? ani.GetBoneTransform(HumanBodyBones.Hips) ?? go.transform : go.transform;
//Get child renderers including disabled
var renderers = go.GetComponentsInChildren<SkinnedMeshRenderer>(true);
//Get Max Extent by getting the biggest dimension
//Avatars can rotate their armature around meaning this dimension can go in any direction, so reuse it for every dimension
//Probably not the best logic or calculation but it usually works
float maxExtent = 0;
foreach (var r in renderers)
{
if (!r.sharedMesh) continue;
Transform currentRootBone = r.rootBone ?? r.transform;
var currentExtent = GetMaxAxis(rootBone.InverseTransformPoint(currentRootBone.position)) + GetMaxAxis(r.sharedMesh.bounds.size);
if (maxExtent < currentExtent) maxExtent = currentExtent;
}
//If human, hips should stay the center
//Otherwise, center the bounds vertically based on current dimensions
Vector3 center = new Vector3(0, isHuman ? 0 : maxExtent / 2, 0);
//Increase area by percentage for safe measure
maxExtent *= 1 + boundsPercentIncrease / 100;
Vector3 extents = new Vector3(maxExtent, maxExtent, maxExtent);
//Set auto calculated bounds starting from target as root
SetBounds(go.transform, rootBone, new Bounds(center, extents));
}
//Sets sampled bounds from target starting from top most parent of target
[MenuItem("DreadTools/Utility/AutoBounds/Sample")]
private static void SampleBounds()
{
//Get Selection
GameObject go = Selection.activeGameObject;
if (!go) return;
//Get renderer for sampling
SkinnedMeshRenderer sampleRenderer = go.GetComponent<SkinnedMeshRenderer>();
if (!sampleRenderer)
{
Debug.LogWarning("No skinned mesh renderer on selected gameobject.");
return;
}
//Set the samples bounds start from the top most parent
SetBounds(go.transform.root, sampleRenderer.rootBone, sampleRenderer.bounds);
}
//Sets all children skinned mesh renderers of the root to the given bounds
private static void SetBounds(Transform root, Transform rootbone, Bounds myBounds)
{
foreach (var r in root.GetComponentsInChildren<SkinnedMeshRenderer>(true))
{
r.rootBone = rootbone;
r.localBounds = myBounds;
EditorUtility.SetDirty(r);
}
}
private static float GetMaxAxis(Vector3 v) => Mathf.Max(v.x, v.y, v.z);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b593cd90629c1ec408e9482136c2ce62
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
{
"name": "AutoBoundsEditor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9ba96ad25be5a4649abd6919a2505e50
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

26
AutoBounds/How to use.txt Normal file
View File

@@ -0,0 +1,26 @@
Made by Dreadrith#3238
Discord: https://discord.gg/ZsPfrGn
Github: https://github.com/Dreadrith/DreadScripts
Gumroad: https://gumroad.com/dreadrith
Ko-fi: https://ko-fi.com/dreadrith
Menu items can be found in the top left corner of the Unity Editor window
[DreadTools > Utility > AutoBounds]
===========================================================================
[Automatic]
This will set all the skinned mesh renderers of the target to the same automatically calculated bounds and sets the hip/root bone as the target.
1- Select the root of your avatar.
2- Press the menu item: [DreadTools > Utility > AutoBounds > Auto]
============================================================================
[Sample]
This will set all the skinned mesh renderers that are children to the top most parent of the target to the same bounds and root bone as the target.
1- Select the target that you want to sample from.
2- Press the menu item: [DreadTools > Utility > AutoBounds > Sample]
============================================================================

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 101f95a936983c24e93978d6b5194335
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

21
AutoBounds/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

7
AutoBounds/LICENSE.meta Normal file
View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7a9e3c6636b709a4ba2456e06fa37dc5
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

23
AutoBounds/README.md Normal file
View File

@@ -0,0 +1,23 @@
# AutoBounds
AutoBounds's purpose is to make easier to set the bounds of skinned mesh renderers so that they don't disappear in your peripherals especially when the avatar is not in a standing pose
# How To Use
Menu items can be found in the top left corner of the Unity Editor window
[DreadTools > Utility > AutoBounds]
## Automatic
This will set all the skinned mesh renderers of the target to the same automatically calculated bounds and sets the hip/root bone as the target.
1- Select the root of your avatar.
2- Press the menu item: [DreadTools > Utility > AutoBounds > Auto]
## Sample
This will set all the skinned mesh renderers that are children to the top most parent of the target to the same bounds and root bone as the target.
1- Select the target that you want to sample from.
2- Press the menu item: [DreadTools > Utility > AutoBounds > Sample]
### Before
[<img src="https://raw.githubusercontent.com/Dreadrith/AutoBounds/main/_media/Before.png">]()
### After
[<img src="https://raw.githubusercontent.com/Dreadrith/AutoBounds/main/_media/After.png">]()

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f82691f766015f24a92f2952e70e2aea
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
AutoBounds/_media.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dd6bbcd0b5d172d47a2fb8b30c225eeb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
AutoBounds/_media/After.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: b4d4eec8e21c87f47b20228e1ed0e320
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: 654e762dad0af114c9f148942ba2b372
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

23
AutoBounds/package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "com.dreadscripts.tool.autobounds",
"displayName": "AutoBounds",
"version": "1.0.0",
"unity": "2019.4",
"description": "Editor script to help setting the bounds of skinned mesh renderers.",
"keywords": [
"Dreadrith",
"DreadScripts",
"DreadTools",
"Editor",
"Utility",
"Renderers"
],
"author": {
"name": "Dreadrith",
"email": "dreadscripts@gmail.com",
"url": "https://github.com/Dreadrith"
},
"legacyFolders": {
"Assets\\DreadScripts\\Utility\\Editor\\AutoBounds": "97d295ac00bde904b83106bff682f8b6"
}
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 57512e319d5fa5d4f948b525f1c016af
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Better-Unity.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9c58042552f45a5439a61e9c16711da7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

2
Better-Unity/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.meta

View File

@@ -0,0 +1,15 @@
{
"name": "BetterUnityEditor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,86 @@
using UnityEngine;
using UnityEditor;
using System.IO;
//Adds 3 new Assets context menu items: Copy, Cut & Paste
namespace BetterUnity
{
public class CopyCutPaste
{
private static bool copy;
private static string[] _tempGUID;
private static string[] assetsGUID;
[MenuItem("Assets/Copy", false, 20)]
private static void Copy()
{
copy = true;
assetsGUID = _tempGUID;
}
[MenuItem("Assets/Cut", false, 20)]
private static void Cut()
{
copy = false;
assetsGUID = _tempGUID;
}
[MenuItem("Assets/Paste", false, 20)]
private static void Paste()
{
string folderPath = AssetDatabase.GetAssetPath(Selection.activeObject);
Move(folderPath, assetsGUID, copy);
}
public static void Move(string destination, string[] assetsGUID, bool copy)
{
if (!string.IsNullOrEmpty(Path.GetExtension(destination)) && !AssetDatabase.IsValidFolder(destination))
destination = Path.GetDirectoryName(destination);
try
{
AssetDatabase.StartAssetEditing();
foreach (string s in assetsGUID)
{
string filePath = AssetDatabase.GUIDToAssetPath(s);
string fileName = Path.GetFileName(filePath);
if (copy)
{
AssetDatabase.CopyAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName));
}
else
{
if (destination + "/" + fileName != filePath)
AssetDatabase.MoveAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName));
}
}
}
catch(System.Exception e) { Debug.LogError(e);}
finally
{
AssetDatabase.StopAssetEditing();
}
}
[MenuItem("Assets/Copy", true, 20)]
[MenuItem("Assets/Cut", true, 20)]
private static bool ValidateSelect()
{
_tempGUID = Selection.assetGUIDs;
return _tempGUID.Length > 0;
}
[MenuItem("Assets/Paste", true, 20)]
private static bool ValidateMove()
{
return (assetsGUID != null && assetsGUID.Length > 0 && Selection.activeObject);
}
}
}

View File

@@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class CopyGUID : MonoBehaviour
{
[MenuItem("Assets/Copy GUID")]
private static void CopyGUIDMethod()
{
if (Selection.assetGUIDs.Length > 0)
EditorGUIUtility.systemCopyBuffer = Selection.assetGUIDs[0];
}
}

View File

@@ -0,0 +1,36 @@
using UnityEditor;
using System.IO;
//Adds new context menu item: Assets > Create > Text File
//Creates a new text file in the destination folder
namespace BetterUnity
{
public class CreateTxt
{
[MenuItem("Assets/Create/Text File", false, 20)]
private static void CreateMyHeckingTextFile()
{
//Get the path of what was used on right click
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
//If using Unity's toolbar context menu. There may be no selection. So use the main Assets folder.
if (string.IsNullOrWhiteSpace(path)) path = "Assets";
//If it's a folder, use it. If it's a file, get the parent folder. Name it "New Text File".
string txtPath = (AssetDatabase.IsValidFolder(path) ? path : Path.GetDirectoryName(path)) + "/New Text File.txt";
//Make it unique
txtPath = AssetDatabase.GenerateUniqueAssetPath(txtPath);
//Create it and Dispose of the StreamWriter
File.CreateText(txtPath).Dispose();
//Import it
AssetDatabase.ImportAsset(txtPath);
//Highlight it
EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(txtPath));
}
}
}

View File

@@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
//Copy the path from the root transform to the target GameObject
namespace BetterUnity
{
public class GOCopyPath
{
private const bool log = true;
[MenuItem("GameObject/Copy Path", false, -1000)]
private static void GameObjectCopyPath()
{
var go = Selection.activeGameObject;
if (!go)
{
Debug.LogWarning("No GameObject selected");
return;
}
string path = AnimationUtility.CalculateTransformPath(go.transform, go.transform.root);
if (log) Debug.Log("Path: " + path);
GUIUtility.systemCopyBuffer = path;
}
}
}

View File

@@ -0,0 +1,134 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;
//Replicates Unity's Transform Inspector but adds new Context Menu to each field.
//Allows you to Copy, Paste and Reset any transform field individually.
namespace BetterUnity
{
[CanEditMultipleObjects]
[CustomEditor(typeof(Transform))]
public class TransformEditor : Editor
{
private static System.Type RotationGUIType;
private static MethodInfo RotationGUIEnableMethod;
private static MethodInfo DrawRotationGUIMethod;
private object rotationGUI;
private SerializedProperty m_LocalPosition;
private SerializedProperty m_LocalRotation;
private SerializedProperty m_LocalScale;
private static Vector3 copiedValues;
private static bool hasCopiedValues;
private static int contextChoice;
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(m_LocalPosition, positionContent);
Rect posRect = GUILayoutUtility.GetLastRect();
DrawRotationGUIMethod.Invoke(rotationGUI, null);
Rect rotRect = GUILayoutUtility.GetLastRect();
EditorGUILayout.PropertyField(m_LocalScale, scaleContent);
Rect scaleRect = GUILayoutUtility.GetLastRect();
serializedObject.ApplyModifiedProperties();
Event e = Event.current;
Vector2 m = e.mousePosition;
if (e.type == EventType.ContextClick)
{
contextChoice = 0;
if (posRect.Contains(m)) contextChoice = 1;
if (rotRect.Contains(m)) contextChoice = 2;
if (scaleRect.Contains(m)) contextChoice = 3;
if (contextChoice > 0)
{
GenericMenu myMenu = new GenericMenu();
myMenu.AddItem(new GUIContent("Copy"), false, CopyFieldValues);
myMenu.AddItem(new GUIContent("Paste"), false, hasCopiedValues ? new GenericMenu.MenuFunction(PasteFieldValues) : null);
myMenu.AddItem(new GUIContent("Reset"), false, ResetFieldValues);
myMenu.ShowAsContext();
}
}
}
private void ResetFieldValues()
{
switch (contextChoice)
{
case 1:
m_LocalPosition.vector3Value = Vector3.zero;
break;
case 2:
m_LocalRotation.quaternionValue = new Quaternion();
break;
case 3:
m_LocalScale.vector3Value = Vector3.one;
break;
}
serializedObject.ApplyModifiedProperties();
}
private void CopyFieldValues()
{
hasCopiedValues = true;
switch (contextChoice)
{
case 1: copiedValues = m_LocalPosition.vector3Value;
break;
case 2:
copiedValues = m_LocalRotation.quaternionValue.eulerAngles;
break;
case 3:
copiedValues = m_LocalScale.vector3Value;
break;
}
}
private void PasteFieldValues()
{
switch (contextChoice)
{
case 1:
m_LocalPosition.vector3Value = copiedValues;
break;
case 2:
var tempQuaternion = new Quaternion {eulerAngles = copiedValues};
m_LocalRotation.quaternionValue = tempQuaternion;
break;
case 3:
m_LocalScale.vector3Value = copiedValues ;
break;
}
serializedObject.ApplyModifiedProperties();
}
private void OnEnable()
{
if (RotationGUIType == null) RotationGUIType = System.Type.GetType("UnityEditor.TransformRotationGUI, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
if (RotationGUIEnableMethod == null) RotationGUIEnableMethod = RotationGUIType.GetMethod("OnEnable", BindingFlags.Public | BindingFlags.Instance);
if (DrawRotationGUIMethod == null) DrawRotationGUIMethod = RotationGUIType.GetMethod("RotationField", Array.Empty<System.Type>());
m_LocalPosition = serializedObject.FindProperty("m_LocalPosition");
m_LocalRotation = serializedObject.FindProperty("m_LocalRotation");
m_LocalScale = serializedObject.FindProperty("m_LocalScale");
if (rotationGUI == null) rotationGUI = Activator.CreateInstance(RotationGUIType);
RotationGUIEnableMethod.Invoke(rotationGUI, new object[] {m_LocalRotation, rotationContent});
}
private GUIContent positionContent = new GUIContent("Position", "The local position of this GameObject relative to the parent.");
private GUIContent rotationContent = new GUIContent("Rotation", "The local rotation of this GameObject relative to the parent.");
private GUIContent scaleContent = new GUIContent("Scale", "The local scaling of this GameObject relative to the parent.");
private const string floatingPointWarning = "Due to floating-point precision limitations, it is recommended to bring the world coordinates of the GameObject within a smaller range.";
}
}

21
Better-Unity/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

37
Better-Unity/README.md Normal file
View File

@@ -0,0 +1,37 @@
# Better-Unity
Built on Unity 2019.4.31f1.<br>
Collection of editor scripts that aim to overall facilitate and improve usage of Unity Editor.
Download:
<a href=https://github.com/Dreadrith/Better-Unity/releases/download/v1.0.0/Better-Unity_v1.0.0.unitypackage>Unity Package</a> -
<a href=https://github.com/Dreadrith/Better-Unity/releases/download/v1.0.0/Better-Unity_v1.0.0.zip>Zip (VPM Compatible)</a>
<details>
<summary><b>CopyCutPaste</b></summary>
Adds 3 new Assets context menu items: Copy, Cut & Paste
</details>
<details>
<summary><b>CreateTxt</b></summary>
Adds a new Assets context menu item: Create > Text File<br>
Allows you to instantly create a text file in the targeted folder
</details>
<details>
<summary><b>Transform Editor</b></summary>
Replicates Unity's Transform Inspector but adds a Context Menu to each field.<br>
Allows you to Copy, Paste and Reset any transform field individually.
</details>
<details>
<summary><b>GOCopy Path</b></summary>
Adds a new GameObject context menu item: GameObject > Copy Path.<br>
Allows you to Copy the path From the root to the target GameObject.
</details>
<details>
<summary><b>CopyGUID</b></summary>
Adds a new Assets context menu item: Copy GUID.<br>
Copies the GUID of the selected Asset to the clipboard.
</details>

23
Better-Unity/package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "com.dreadscripts.tool.betterunity",
"displayName": "DreadTools - Better Unity",
"version": "1.0.0",
"unity": "2019.4",
"description": "Editor scripts to improve the Unity Editor.",
"keywords": [
"Dreadrith",
"DreadScripts",
"DreadTools",
"Editor",
"Utility",
"Enhancement"
],
"author": {
"name": "Dreadrith",
"email": "dreadscripts@gmail.com",
"url": "https://github.com/Dreadrith"
},
"legacyFolders": {
"Assets\\DreadScripts\\Better Unity": "a09203517043c5344b527754b22a4eac"
}
}

8
CameraUtility.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 71b402fd2933a4b478281f4cf11967be
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 904e122b4614a8c439caa37312b0704d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,52 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace DreadScripts.CameraUtility
{
public class CameraUtility
{
private const float SCENE_PIVOT_OFFSET = 1;
[MenuItem("DreadTools/Utility/Camera/Snap Scene To Game")]
public static void SnapSceneViewToGame()
{
if (!TryGetGameCamera(out Camera gc)) return;
SceneView view = SceneView.lastActiveSceneView;
if (YellowLog(view == null, "No Scene View found")) return;
Undo.RecordObject(view, "Snap STG");
view.LookAtDirect(gc.transform.position, gc.transform.rotation, SCENE_PIVOT_OFFSET/2);
view.pivot = gc.transform.position + gc.transform.forward * SCENE_PIVOT_OFFSET;
}
[MenuItem("DreadTools/Utility/Camera/Snap Game To Scene")]
public static void SnapGameViewToScene()
{
if (!TryGetGameCamera(out Camera gc)) return;
if (!TryGetSceneCamera(out Camera sc)) return;
Undo.RecordObject(gc.transform, "Snap GTS");
gc.transform.SetPositionAndRotation(sc.transform.position, sc.transform.rotation);
}
private static bool TryGetGameCamera(out Camera gameCamera)
{
gameCamera = Camera.main ?? Object.FindObjectOfType<Camera>();
return !YellowLog(!gameCamera, "No Camera found in scene");
}
private static bool TryGetSceneCamera(out Camera sceneCamera)
{
sceneCamera = SceneView.lastActiveSceneView?.camera;
return !YellowLog(!sceneCamera, "No Scene View found");
}
private static bool YellowLog(bool condition, string msg)
{
if (condition) Debug.LogWarning($"<color=yellow>[CameraUtility] {msg}</color>");
return condition;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e230c2bf340461c46939efc284f6bf22
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
{
"name": "com.dreadscripts.camerautility.Editor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: acb80353a76f6c0488836f3e26ef1785
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

21
CameraUtility/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c6d418ac183680543906fe0d17a02a3a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

16
CameraUtility/README.md Normal file
View File

@@ -0,0 +1,16 @@
# Camera Utility
### [Download From Here](https://vpm.dreadscripts.com/)
![image](https://i.imgur.com/5fow365.gif)
## Features
- Snap the Scene view to the position and rotation of the Game view camera or vice versa.
## How to Use
1. Open the Unity Editor.
2. Navigate to `DreadTools > Utility > Camera` in the top menu.
3. Choose either "Snap Scene To Game" or "Snap Game To Scene" to synchronize views accordingly.
### Thank You
If you enjoy Camera Utility, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)!

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: df3ef724ecd912644ab09c0dd1490ca1
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,17 @@
{
"name": "com.dreadscripts.camerautility",
"displayName": "DreadScripts - CameraUtility",
"version": "1.0.1",
"description": "Simple menu item to snap Game View to Scene View or vice versa.",
"gitDependencies": {},
"vpmDependencies": {},
"author": {
"name": "Dreadrith",
"email": "dreadscripts@gmail.com",
"url": "https://www.dreadrith.com"
},
"legacyFolders": {},
"legacyFiles": {},
"type": "tool",
"unity": "2019.4"
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c08baa384bf219b4494368267dea3617
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
CopyCutPaste.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f0694de95b2b93b4f825ec371ddbff0f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
CopyCutPaste/Editor.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 214b8dfd44e5d9240b993faa65d5bd17
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,84 @@
using UnityEngine;
using UnityEditor;
using System.IO;
namespace DreadScripts.CopyCutPaste
{
public class CopyCutPaste
{
private static bool copy;
private static string[] _tempGUID;
private static string[] assetsGUID;
[MenuItem("Assets/Copy", false, 20)]
private static void Copy()
{
copy = true;
assetsGUID = _tempGUID;
}
[MenuItem("Assets/Cut", false, 20)]
private static void Cut()
{
copy = false;
assetsGUID = _tempGUID;
}
[MenuItem("Assets/Paste", false, 20)]
private static void Paste()
{
string folderPath = AssetDatabase.GetAssetPath(Selection.activeObject);
Move(folderPath, assetsGUID, copy);
}
public static void Move(string destination, string[] assetsGUID, bool copy)
{
if (!string.IsNullOrEmpty(Path.GetExtension(destination)) && !AssetDatabase.IsValidFolder(destination))
destination = Path.GetDirectoryName(destination);
try
{
AssetDatabase.StartAssetEditing();
foreach (string s in assetsGUID)
{
string filePath = AssetDatabase.GUIDToAssetPath(s);
string fileName = Path.GetFileName(filePath);
if (copy)
{
AssetDatabase.CopyAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName));
}
else
{
if (destination + "/" + fileName != filePath)
AssetDatabase.MoveAsset(filePath, AssetDatabase.GenerateUniqueAssetPath(destination + "/" + fileName));
}
}
}
catch(System.Exception e) { Debug.LogError(e);}
finally
{
AssetDatabase.StopAssetEditing();
}
}
[MenuItem("Assets/Copy", true, 20)]
[MenuItem("Assets/Cut", true, 20)]
private static bool ValidateSelect()
{
_tempGUID = Selection.assetGUIDs;
return _tempGUID.Length > 0;
}
[MenuItem("Assets/Paste", true, 20)]
private static bool ValidateMove()
{
return (assetsGUID != null && assetsGUID.Length > 0 && Selection.activeObject);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e426aee4657d89e48be7f5d84c4adbdd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
{
"name": "com.dreadscripts.copycutpaste.Editor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 76bf5f01c2ff3744eab2e7b22276e902
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

21
CopyCutPaste/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b549fccaaa3640d439317f3d4c5e43ba
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

7
CopyCutPaste/README.md Normal file
View File

@@ -0,0 +1,7 @@
# CopyCutPaste
Adds 3 much needed buttons to Unity assets: Copy, Cut, and Paste. Does what's expected.
### [Download From Here](https://vpm.dreadscripts.com/)
### Thank You
If you enjoy CopyCutPaste, please consider [supporting me ♡](https://ko-fi.com/Dreadrith)!

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b36388504e24a824fa514d38dbf5b32c
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

17
CopyCutPaste/package.json Normal file
View File

@@ -0,0 +1,17 @@
{
"name": "com.dreadscripts.copycutpaste",
"displayName": "DreadScripts - CopyCutPaste",
"version": "1.0.1",
"description": "Adds 3 much needed buttons to Unity assets: Copy, Cut, and Paste.",
"gitDependencies": {},
"vpmDependencies": {},
"author": {
"name": "Dreadrith",
"email": "dreadscripts@gmail.com",
"url": "https://www.dreadrith.com"
},
"legacyFolders": {},
"legacyFiles": {},
"type": "tool",
"unity": "2019.4"
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 97bb26747222b3d4f96722ba6c1fb318
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
LimbControl.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6a4b9dbdf0cee554da296d547d86a5d1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

30
LimbControl/CHANGELOG.md Normal file
View File

@@ -0,0 +1,30 @@
(v1.1.2)
--------
- [Misc] Defined minimal unity version
- [Misc] Renamed package to say DreadScripts instead of DreadTools
(v1.1.1)
--------
- [Fix] Fixed Package importing to project root instead of Packages
- [Fix] Fixed Package causing upload to throw errors due to Editor namespace
(v1.1.0)
--------
- [Feature] Limb Control will now also temporarily activate with control menu is open
- [Improvement] Limb Control now uses 0 parameter memory! Woo!
- [Fix] Fixed a few issues with pathing
- [UI] Reworked some UI
- [Misc] All Parameters renamed to use slash pathing. i.e: LC/RightArm/Toggle
- [Misc] Placed Add Tracking submenu after limb control like it's supposed to have been
- [Misc] Layers and States are now organized rather than default and have empty clips.
- [Misc] Some general code cleanup
(v1.0.3)
--------
- [Improvement] Max Parameter Cost is now detected automatically
- [Change] Modified folder name and paths from 'Limb Control' to 'LimbControl'
- [Change] Moved script to editor folder and removed unnecessary '#if UNITY_EDITOR'
(v1.0.2)
--------
- Initial Changelog creation

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f912695042cde8d49b2b38efd30fd2bc
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,34 @@
Made by Dreadrith#3238
Discord Server: https://discord.gg/ZsPfrGn
## Feature Release
Window found under DreadTools > Limb Control
Limb Control allows the control of limbs through Puppet Control with a few clicks.
Desktop users, you've got power now! Half body users, Kick those people that say you dun got legs!
Setup:
- Set your Avatar Descriptor
- Select the limbs to control
- Press Add Control
- Done!
By default, each selected limb is a separate control and is controlled separately.
Use "Same Control" to make the selected limbs be controlled using the same control.
Use "Custom BlendTree" to change the way the limbs move by setting your own BlendTree.
Add Tracking: Adds another Submenu to the Expression Menu which allows Enabling/Disabling tracking on limbs.
Utilizes the integer values from 244 to 255, integer may be reused for other purposes.
## Information about the feature
- Toggling a Limb control "On" sets the limb to Animation and enables its ability to be controlled using the "Control" puppet menu.
- Toggling a Limb control "Off" sets the limb to Tracking and disables the ability to control it using the "Control" puppet menu.
- Limb Control works during normal movement, emote animation and while sitting.
## Information about the script
- Duplicates Base, Action and Sitting controllers if they exist. Creates new ones if they don't.
- Creates a new Expression Menu and/or Expression Parameters if they don't exist.
- Adds Submenu controls to the main Expression Menu. Fails if full.
- Creates new assets at the chosen asset path in the window.

8
LimbControl/Editor.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2be2d83291a64544eb311808c71ae551
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,938 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using VRC.SDK3.Avatars.Components;
using UnityEditor.Animations;
using VRC.SDK3.Avatars.ScriptableObjects;
using System;
using System.Linq;
using System.IO;
using System.Text.RegularExpressions;
using Object = UnityEngine.Object;
using static DreadScripts.LimbControl.LimbControl.CustomGUI;
using UnityEditor.SceneManagement;
using UnityEngine.Networking;
namespace DreadScripts.LimbControl
{
public class LimbControl : EditorWindow
{
private const string LAYER_TAG = "Limb Control";
public static VRCAvatarDescriptor avatar;
public static bool useSameParameter;
public static bool useCustomTree;
public static bool addTracking;
public static bool addRightArm, addLeftArm, addRightLeg, addLeftLeg;
public static BlendTree customTree;
private static string assetPath;
private static AnimationClip emptyClip;
private static Vector2 scroll;
[MenuItem("DreadTools/Limb Control", false, 566)]
public static void ShowWindow()
{
GetWindow<LimbControl>("Limb Control").titleContent.image = EditorGUIUtility.IconContent("AvatarMask Icon").image;
}
public void OnGUI()
{
bool isValid = true;
scroll = EditorGUILayout.BeginScrollView(scroll);
using (new GUILayout.VerticalScope(EditorStyles.helpBox))
{
avatar = (VRCAvatarDescriptor)EditorGUILayout.ObjectField(Content.avatarContent, avatar, typeof(VRCAvatarDescriptor), true);
isValid &= avatar;
}
EditorGUILayout.Space();
using (new GUILayout.VerticalScope(GUI.skin.box))
{
DrawTitle("Control Limbs", "Choose which Limbs to control in your menu");
using (new GUILayout.HorizontalScope())
{
DrawColoredButton(ref addLeftArm, "Left Arm");
DrawColoredButton(ref addRightArm, "Right Arm");
}
using (new GUILayout.HorizontalScope())
{
DrawColoredButton(ref addLeftLeg, "Left Leg");
DrawColoredButton(ref addRightLeg, "Right Leg");
}
DrawColoredButton(ref addTracking, Content.trackingContent);
EditorGUILayout.Space();
}
using (new GUILayout.VerticalScope(GUI.skin.box))
{
DrawTitle("Extra", "To Add to or Modify Limb Control");
bool canCombineControl = Convert.ToInt32(addRightArm) + Convert.ToInt32(addLeftArm) + Convert.ToInt32(addLeftLeg) + Convert.ToInt32(addRightLeg) > 1;
if (!canCombineControl) useSameParameter = false;
using (new EditorGUI.DisabledScope(!canCombineControl))
DrawColoredButton(ref useSameParameter, Content.sameControlContent);
if (!useCustomTree) DrawColoredButton(ref useCustomTree, Content.customTreeContent);
else
{
using (new GUILayout.HorizontalScope())
{
using (new BGColoredScope(useCustomTree))
useCustomTree = GUILayout.Toggle(useCustomTree, string.Empty, EditorStyles.toolbarButton, GUILayout.Width(18), GUILayout.Height(18));
customTree = (BlendTree)EditorGUILayout.ObjectField(customTree, typeof(BlendTree), false);
}
}
}
EditorGUILayout.Space();
EditorGUILayout.Space();
GUILayout.Label(new GUIContent("Required Memory: 0!","Limb Control only needs VRC's IK sync and no parameter syncing!"), EditorStyles.centeredGreyMiniLabel);
isValid &= addLeftArm || addLeftLeg || addRightArm || addRightLeg || addTracking;
using (new GUILayout.HorizontalScope())
{
using (new BGColoredScope(isValid))
using(new EditorGUI.DisabledScope(!isValid))
if (GUILayout.Button("Apply Limb Control", Content.comicallyLargeButton, GUILayout.Height(32)))
InitAddControl(!(addLeftArm || addLeftLeg || addRightArm || addRightLeg));
using (new BGColoredScope(Color.red))
using (new EditorGUI.DisabledScope(!avatar))
if (GUILayout.Button(Content.iconTrash,new GUIStyle(GUI.skin.button) {padding=new RectOffset()},GUILayout.Width(40),GUILayout.Height(32)))
if (EditorUtility.DisplayDialog("Remove Limb Control", "Remove Limb Control from " + avatar.gameObject.name + "?\nThis action can't be reverted.", "Remove", "Cancel"))
RemoveLimbControl();
}
DrawSeparator();
assetPath = AssetFolderPath(assetPath, "Generated Assets", "LimbControlSavePath");
Credit();
EditorGUILayout.EndScrollView();
}
private static string folderPath;
private static void InitAddControl(bool onlyTracking=false)
{
if (avatar.expressionsMenu)
{
int cCost = (!onlyTracking ? 1 : 0) + (addTracking ? 1 : 0);
if (onlyTracking && !avatar.expressionsMenu.controls.Any(c => c.name == "Limb Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu))
{
cCost -= 1;
}
if (addTracking && !avatar.expressionsMenu.controls.Any(c => c.name == "Tracking Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu))
{
cCost -= 1;
}
if ( 8 - (avatar.expressionsMenu.controls.Count + cCost) < 0)
{
Debug.LogError("Expression Menu can't contain more than 8 controls!");
return;
}
}
ReadyPath(assetPath);
folderPath = AssetDatabase.GenerateUniqueAssetPath($"{assetPath}/{ValidatePath(avatar.gameObject.name)}");
ReadyPath(folderPath);
emptyClip = Resources.Load<AnimationClip>("Animations/LC_EmptyClip");
AnimatorController myLocomotion = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base);
if (!myLocomotion)
myLocomotion = Resources.Load<AnimatorController>("Animations/LC_BaseLocomotion");
myLocomotion = CopyAssetAndReturn<AnimatorController>(myLocomotion, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + myLocomotion.name + ".controller"));
SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base, myLocomotion);
if (onlyTracking) goto AddTrackingJump;
AnimatorController myAction = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action);
if (!myAction)
{
myAction = new AnimatorController() { name = "LC_BaseAction" };
AssetDatabase.CreateAsset(myAction, folderPath + "/" + myAction.name + ".controller");
myAction.AddLayer("Base Layer");
}
else
myAction = CopyAssetAndReturn<AnimatorController>(myAction, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + myAction.name + ".controller"));
SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action, myAction);
AnimatorController mySitting = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting);
if (!mySitting)
mySitting = Resources.Load<AnimatorController>("Animations/LC_BaseSitting");
mySitting = CopyAssetAndReturn<AnimatorController>(mySitting, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + mySitting.name + ".controller"));
SetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting, mySitting);
AvatarMask GetNewMask(string n)
{
AvatarMask newMask = new AvatarMask() { name = n };
for (int i = 0; i < 13; i++)
{
newMask.SetHumanoidBodyPartActive((AvatarMaskBodyPart)i, false);
}
AssetDatabase.CreateAsset(newMask, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + newMask.name + ".mask"));
return newMask;
}
AvatarMask myMask = null;
if (useSameParameter)
myMask = GetNewMask("LC_MixedMask");
GetBaseTree();
void DoControl(bool isRight, bool isArm)
{
string direction = isRight? "Right" : "Left";
string limbName = isArm ? "Arm" : "Leg";
string fullName = direction + limbName;
if (!useSameParameter)
myMask = GetNewMask($"LC_{fullName}Mask");
myMask.SetHumanoidBodyPartActive((AvatarMaskBodyPart)Enum.Parse(typeof(AvatarMaskBodyPart), fullName, true), true);
if (!useSameParameter)
AddControl(myMask, customTree, $"LC/{fullName}");
}
if (addRightArm) DoControl(true, true);
if (addRightLeg) DoControl(true, false);
if (addLeftLeg) DoControl(false, false);
if (addLeftArm) DoControl(false, true);
if (useSameParameter)
{
string newBaseParameter = "Mixed";
if (avatar.expressionParameters)
newBaseParameter = GenerateUniqueString(newBaseParameter, s => avatar.expressionParameters.parameters.All(p => p.name != s));
AddControl(myMask, customTree, $"LC/{newBaseParameter}");
}
Debug.Log("<color=green>[Limb Control]</color> Added Limb Control successfully!");
AddTrackingJump:
if (addTracking) AddTracking(myLocomotion);
}
public static void AddControl(AvatarMask mask, BlendTree tree, string baseparameter)
{
var tempParameter = $"{baseparameter}/Temp";
var toggleParameter = $"{baseparameter}/Toggle";
var treeParameter1 = $"{baseparameter}/X";
var treeParameter2 = $"{baseparameter}/Y";
avatar.customExpressions = true;
avatar.customizeAnimationLayers = true;
VRCExpressionsMenu myMenu = avatar.expressionsMenu;
VRCExpressionParameters myParams = avatar.expressionParameters;
if (!myMenu)
myMenu = ReplaceMenu(avatar, folderPath);
if (!myParams)
myParams = ReplaceParameters(avatar, folderPath);
VRCExpressionsMenu mainMenu = myMenu.controls.Find(c => c.name == "Limb Control" && c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu)?.subMenu;
if (mainMenu == null)
{
mainMenu = CreateInstance<VRCExpressionsMenu>();
mainMenu.controls = new List<VRCExpressionsMenu.Control>();
AddControls(myMenu, new List<VRCExpressionsMenu.Control>() { new VRCExpressionsMenu.Control() { name = "Limb Control", type = VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = mainMenu, icon = Resources.Load<Texture2D>("Icons/LC_HandWaving") } });
AssetDatabase.CreateAsset(mainMenu, folderPath + "/LC_LimbControlMainMenu.asset");
}
VRCExpressionsMenu mySubmenu = Resources.Load<VRCExpressionsMenu>("LC_LimbControlMenu");
var subMenuPath = $"{folderPath}/{ValidateName(baseparameter)} Control Menu.asset";
mySubmenu = CopyAssetAndReturn(mySubmenu, subMenuPath);
mySubmenu.controls[0].value = 1;
mySubmenu.controls[0].parameter = new VRCExpressionsMenu.Control.Parameter() { name = toggleParameter };
VRCExpressionsMenu.Control.Parameter[] subParameters = new VRCExpressionsMenu.Control.Parameter[2];
subParameters[0] = new VRCExpressionsMenu.Control.Parameter { name = treeParameter1 };
subParameters[1] = new VRCExpressionsMenu.Control.Parameter() { name = treeParameter2 };
mySubmenu.controls[1].parameter = new VRCExpressionsMenu.Control.Parameter(){name = tempParameter };
mySubmenu.controls[1].subParameters = subParameters;
EditorUtility.SetDirty(mySubmenu);
var indStart = toggleParameter.IndexOf('/')+1;
var indEnd = toggleParameter.LastIndexOf('/');
if (indStart == indEnd)
indStart = 0;
if (indEnd == 0)
indEnd = toggleParameter.Length;
var midName = toggleParameter.Substring(indStart, indEnd - indStart);
var finalName = midName.Aggregate(string.Empty, (result, next) =>
{
if (char.IsUpper(next) && result.Length > 0)
result += ' ';
return result + next;
});
VRCExpressionsMenu.Control newControl = new VRCExpressionsMenu.Control
{
type = VRCExpressionsMenu.Control.ControlType.SubMenu,
name = finalName,
subMenu = mySubmenu
};
AddControls(mainMenu, new List<VRCExpressionsMenu.Control>() { newControl });
AddParameters(myParams, new List<VRCExpressionParameters.Parameter>() {
new VRCExpressionParameters.Parameter(){ name = tempParameter, saved = false, valueType = VRCExpressionParameters.ValueType.Bool, networkSynced = false, defaultValue = 0 },
new VRCExpressionParameters.Parameter(){ name = toggleParameter,saved = true, valueType = VRCExpressionParameters.ValueType.Bool, networkSynced = false, defaultValue = 0 },
new VRCExpressionParameters.Parameter(){ name = treeParameter1, saved = true, valueType = VRCExpressionParameters.ValueType.Float, networkSynced = false, defaultValue = 0 },
new VRCExpressionParameters.Parameter(){ name = treeParameter2, saved = true, valueType = VRCExpressionParameters.ValueType.Float, networkSynced = false, defaultValue = 0 }
});
BlendTree myTree = CopyAssetAndReturn<BlendTree>(tree, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + tree.name + ".blendtree"));
myTree.blendParameter = treeParameter1;
myTree.blendParameterY = treeParameter2;
EditorUtility.SetDirty(myTree);
void AddLimbLayer(AnimatorController controller, bool setTracking)
{
ReadyParameter(controller, tempParameter, AnimatorControllerParameterType.Bool);
ReadyParameter(controller, toggleParameter, AnimatorControllerParameterType.Bool);
ReadyParameter(controller, treeParameter1, AnimatorControllerParameterType.Float);
ReadyParameter(controller, treeParameter2, AnimatorControllerParameterType.Float);
AnimatorControllerLayer newLayer = AddLayer(controller, toggleParameter, 1, mask);
AddTag(newLayer, LAYER_TAG);
AnimatorState firstState = newLayer.stateMachine.AddState("Idle", new Vector3(30, 160));
AnimatorState secondState = newLayer.stateMachine.AddState("Control", new Vector3(30, 210));
firstState.motion = emptyClip;
secondState.motion = myTree;
if (setTracking)
{
VRCAnimatorTrackingControl trackingControl = firstState.AddStateMachineBehaviour<VRCAnimatorTrackingControl>();
VRCAnimatorTrackingControl trackingControl2 = secondState.AddStateMachineBehaviour<VRCAnimatorTrackingControl>();
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.Head))
{
trackingControl.trackingHead = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingHead = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.Body))
{
trackingControl.trackingHip = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingHip = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightArm))
{
trackingControl.trackingRightHand = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingRightHand = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftArm))
{
trackingControl.trackingLeftHand = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingLeftHand = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightFingers))
{
trackingControl.trackingRightFingers = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingRightFingers = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftFingers))
{
trackingControl.trackingLeftFingers = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingLeftFingers = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.RightLeg))
{
trackingControl.trackingRightFoot = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingRightFoot = VRCAnimatorTrackingControl.TrackingType.Animation;
}
if (mask.GetHumanoidBodyPartActive(AvatarMaskBodyPart.LeftLeg))
{
trackingControl.trackingLeftFoot = VRCAnimatorTrackingControl.TrackingType.Tracking;
trackingControl2.trackingLeftFoot = VRCAnimatorTrackingControl.TrackingType.Animation;
}
}
var t = firstState.AddTransition(secondState, false);
t.duration = 0.15f;
t.AddCondition(AnimatorConditionMode.If, 0, toggleParameter);
t = firstState.AddTransition(secondState, false);
t.duration = 0.15f;
t.AddCondition(AnimatorConditionMode.If, 0, tempParameter);
t = secondState.AddTransition(firstState, false);
t.duration = 0.15f;
t.AddCondition(AnimatorConditionMode.IfNot, 0, toggleParameter);
t.AddCondition(AnimatorConditionMode.IfNot, 0, tempParameter);
}
AnimatorController myLocomotion = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base);
AddLimbLayer(myLocomotion, true);
AnimatorController myAction = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Action);
AddLimbLayer(myAction, false);
AnimatorController mySitting = GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting);
AddLimbLayer(mySitting, false);
EditorUtility.SetDirty(avatar);
EditorSceneManager.MarkAllScenesDirty();
}
private static void AddTracking(AnimatorController c)
{
ReadyParameter(c, "LC/Tracking Control", AnimatorControllerParameterType.Int);
VRCExpressionsMenu myMenu = avatar.expressionsMenu;
VRCExpressionParameters myParams = avatar.expressionParameters;
if (!myMenu)
myMenu = ReplaceMenu(avatar, folderPath);
if (!myParams)
myParams = ReplaceParameters(avatar, folderPath);
VRCExpressionsMenu trackingMenu = Resources.Load<VRCExpressionsMenu>("LC_TrackingMainMenu");
trackingMenu = ReplaceMenu(trackingMenu, folderPath, true);
AddControls(myMenu, new List<VRCExpressionsMenu.Control>() { new VRCExpressionsMenu.Control() {name="Tracking Control", type= VRCExpressionsMenu.Control.ControlType.SubMenu, subMenu = trackingMenu, icon = Resources.Load<Texture2D>("Icons/LC_RnR") } });
AddParameters(myParams, new List<VRCExpressionParameters.Parameter>() { new VRCExpressionParameters.Parameter() { name = "LC/Tracking Control", saved = false, valueType = VRCExpressionParameters.ValueType.Int, networkSynced = false } });
AnimatorControllerLayer newLayer = AddLayer(c, "LC/Tracking Control", 0);
AddTag(newLayer, LAYER_TAG);
AnimatorStateMachine m = newLayer.stateMachine;
AnimatorState HoldState = m.AddState("Hold", new Vector3(260, 120));
HoldState.motion = emptyClip;
m.exitPosition = new Vector3(760, 120);
Vector3 startIndex = new Vector3(510, -140);
Vector3 GetNextPos()
{
startIndex += new Vector3(0, 40);
return startIndex;
}
void AddTrackingState(string propertyName,string partName, int toggleValue)
{
AnimatorState enableState = m.AddState(partName + " On", GetNextPos());
AnimatorState disableState = m.AddState(partName + " Off", GetNextPos());
enableState.motion = disableState.motion = emptyClip;
InstantTransition(HoldState, enableState).AddCondition(AnimatorConditionMode.Equals, toggleValue, "LC/Tracking Control");
InstantExitTransition(enableState).AddCondition(AnimatorConditionMode.NotEqual, toggleValue, "LC/Tracking Control");
InstantTransition(HoldState, disableState).AddCondition(AnimatorConditionMode.Equals, toggleValue+1, "LC/Tracking Control");
InstantExitTransition(disableState).AddCondition(AnimatorConditionMode.NotEqual, toggleValue+1, "LC/Tracking Control");
void setSObject(SerializedObject o, int v)
{
o.FindProperty(propertyName).enumValueIndex = v;
o.ApplyModifiedPropertiesWithoutUndo();
}
setSObject(new SerializedObject(enableState.AddStateMachineBehaviour<VRCAnimatorTrackingControl>()), 1);
setSObject(new SerializedObject(disableState.AddStateMachineBehaviour<VRCAnimatorTrackingControl>()), 2);
}
AddTrackingState("trackingHead", "Head", 254);
AddTrackingState("trackingRightHand", "Right Hand", 252);
AddTrackingState("trackingLeftHand", "Left Hand", 250);
AddTrackingState("trackingHip", "Hip", 248);
AddTrackingState("trackingRightFoot", "Right Foot", 246);
AddTrackingState("trackingLeftFoot", "Left Foot", 244);
Debug.Log("<color=green>[Limb Control]</color> Added Tracking Control successfully!");
}
private static void RemoveLimbControl()
{
Debug.Log("Removing Limb Control from " + avatar.gameObject.name);
void RemoveControl(AnimatorController c)
{
if (!c)
return;
for (int i=c.layers.Length-1;i>=0;i--)
{
if (HasTag(c.layers[i], LAYER_TAG))
{
Debug.Log("Removed Layer " + c.layers[i].name+" from "+c.name);
c.RemoveLayer(i);
}
}
for (int i=c.parameters.Length-1;i>=0;i--)
{
if (c.parameters[i].name.StartsWith("LC/"))
{
Debug.Log("Removed Parameter " + c.parameters[i].name + " from " + c.name);
c.RemoveParameter(i);
}
}
}
RemoveControl(GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Base));
RemoveControl(GetPlayableLayer(avatar,VRCAvatarDescriptor.AnimLayerType.Action));
RemoveControl(GetPlayableLayer(avatar, VRCAvatarDescriptor.AnimLayerType.Sitting));
if (avatar.expressionsMenu)
{
for (int i = avatar.expressionsMenu.controls.Count - 1; i >= 0; i--)
{
if (avatar.expressionsMenu.controls[i].name == "Limb Control")
{
Debug.Log("Removed Limb Control Submenu from Expression Menu");
avatar.expressionsMenu.controls.RemoveAt(i);
EditorUtility.SetDirty(avatar.expressionsMenu);
continue;
}
if (avatar.expressionsMenu.controls[i].name == "Tracking Control")
{
Debug.Log("Removed Tracking Control Submenu from Expression Menu");
avatar.expressionsMenu.controls.RemoveAt(i);
EditorUtility.SetDirty(avatar.expressionsMenu);
continue;
}
}
}
if (avatar.expressionParameters)
{
for (int i=avatar.expressionParameters.parameters.Length-1;i>=0;i--)
{
if (avatar.expressionParameters.parameters[i].name.StartsWith("LC/"))
{
Debug.Log("Removed " + avatar.expressionParameters.parameters[i].name + " From Expression Parameters");
ArrayUtility.RemoveAt(ref avatar.expressionParameters.parameters, i);
}
}
EditorUtility.SetDirty(avatar.expressionParameters);
}
Debug.Log("Finished removing Limb Control!");
}
private void OnEnable()
{
if (avatar == null) avatar = FindObjectOfType<VRCAvatarDescriptor>();
assetPath = EditorPrefs.GetString("LimbControlPath", "Assets/DreadScripts/LimbControl/Generated Assets");
GetBaseTree();
}
private static void GetBaseTree()
{
if (!customTree || !useCustomTree)
customTree = Resources.Load<BlendTree>("Animations/LC_NormalBlendTree");
}
#region GUI Methods
private static void DrawColoredButton(ref bool toggle, string label) => DrawColoredButton(ref toggle, new GUIContent(label));
private static void DrawColoredButton(ref bool toggle, GUIContent label)
{
using (new BGColoredScope(toggle))
toggle = GUILayout.Toggle(toggle, label, EditorStyles.toolbarButton);
}
private static void DrawTitle(string title, string tooltip = "")
{
using (new GUILayout.HorizontalScope("in bigtitle"))
{
bool hasTooltip = !string.IsNullOrEmpty(tooltip);
if (hasTooltip) GUILayout.Space(21);
GUILayout.Label(title, Content.styleTitle);
if (hasTooltip) GUILayout.Label(new GUIContent(Content.iconHelp){tooltip = tooltip}, GUILayout.Width(18));
}
}
private static void Credit()
{
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button("Made By Dreadrith#3238", "boldlabel"))
Application.OpenURL("https://linktr.ee/Dreadrith");
}
}
#endregion
#region DSHelper Methods
private static AnimatorController GetPlayableLayer(VRCAvatarDescriptor avi, VRCAvatarDescriptor.AnimLayerType type)
{
for (var i = 0; i < avi.baseAnimationLayers.Length; i++)
if (avi.baseAnimationLayers[i].type == type)
return GetController(avi.baseAnimationLayers[i].animatorController);
for (var i = 0; i < avi.specialAnimationLayers.Length; i++)
if (avi.specialAnimationLayers[i].type == type)
return GetController(avi.specialAnimationLayers[i].animatorController);
return null;
}
private static bool SetPlayableLayer(VRCAvatarDescriptor avi, VRCAvatarDescriptor.AnimLayerType type,RuntimeAnimatorController ani)
{
for (var i = 0; i < avi.baseAnimationLayers.Length; i++)
if (avi.baseAnimationLayers[i].type == type)
{
if (ani)
avi.customizeAnimationLayers = true;
avi.baseAnimationLayers[i].isDefault = !ani;
avi.baseAnimationLayers[i].animatorController = ani;
EditorUtility.SetDirty(avi);
return true;
}
for (var i = 0; i < avi.specialAnimationLayers.Length; i++)
if (avi.specialAnimationLayers[i].type == type)
{
if (ani)
avi.customizeAnimationLayers = true;
avi.specialAnimationLayers[i].isDefault = !ani;
avi.specialAnimationLayers[i].animatorController = ani;
EditorUtility.SetDirty(avi);
return true;
}
return false;
}
private static AnimatorController GetController(RuntimeAnimatorController controller)
{
return AssetDatabase.LoadAssetAtPath<AnimatorController>(AssetDatabase.GetAssetPath(controller));
}
private static AnimatorStateTransition InstantTransition(AnimatorState state, AnimatorState destination)
{
var t = state.AddTransition(destination, false);
t.duration = 0;
return t;
}
private static AnimatorStateTransition InstantExitTransition(AnimatorState state)
{
var t = state.AddExitTransition(false);
t.duration = 0;
return t;
}
private static void AddTag(AnimatorControllerLayer layer, string tag)
{
if (HasTag(layer, tag)) return;
var t = layer.stateMachine.AddAnyStateTransition((AnimatorState)null);
t.isExit = true;
t.mute = true;
t.name = tag;
}
private static bool HasTag(AnimatorControllerLayer layer, string tag)
{
return layer.stateMachine.anyStateTransitions.Any(t => t.isExit && t.mute && t.name == tag);
}
private static AnimatorControllerLayer AddLayer(AnimatorController controller, string name, float defaultWeight, AvatarMask mask = null)
{
var newLayer = new AnimatorControllerLayer
{
name = name,
defaultWeight = defaultWeight,
avatarMask = mask,
stateMachine = new AnimatorStateMachine
{
name = name,
hideFlags = HideFlags.HideInHierarchy,
entryPosition = new Vector3(50, 120),
anyStatePosition = new Vector3(50, 80),
exitPosition = new Vector3(50, 40),
},
};
AssetDatabase.AddObjectToAsset(newLayer.stateMachine, controller);
controller.AddLayer(newLayer);
return newLayer;
}
private static void ReadyParameter(AnimatorController controller, string parameter, AnimatorControllerParameterType type)
{
if (!GetParameter(controller, parameter, out _))
controller.AddParameter(parameter, type);
}
private static bool GetParameter(AnimatorController controller, string parameter, out int index)
{
index = -1;
for (int i = 0; i < controller.parameters.Length; i++)
{
if (controller.parameters[i].name == parameter)
{
index = i;
return true;
}
}
return false;
}
private static void ReadyPath(string folderPath)
{
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
AssetDatabase.ImportAsset(folderPath);
}
}
internal static string ValidatePath(string path)
{
string regexFolderReplace = Regex.Escape(new string(Path.GetInvalidPathChars()));
path = path.Replace('\\', '/');
if (path.IndexOf('/') > 0)
path = string.Join("/", path.Split('/').Select(s => Regex.Replace(s, $@"[{regexFolderReplace}]", "-")));
return path;
}
internal static string ValidateName(string name)
{
string regexFileReplace = Regex.Escape(new string(Path.GetInvalidFileNameChars()));
return string.IsNullOrEmpty(name) ? "Unnamed" : Regex.Replace(name, $@"[{regexFileReplace}]", "-");
}
private static T CopyAssetAndReturn<T>(string path, string newpath) where T : Object
{
if (path != newpath)
AssetDatabase.CopyAsset(path, newpath);
return AssetDatabase.LoadAssetAtPath<T>(newpath);
}
internal static T CopyAssetAndReturn<T>(T obj, string newPath) where T : Object
{
string assetPath = AssetDatabase.GetAssetPath(obj);
Object mainAsset = AssetDatabase.LoadMainAssetAtPath(assetPath);
if (!mainAsset) return null;
if (obj != mainAsset)
{
T newAsset = Object.Instantiate(obj);
AssetDatabase.CreateAsset(newAsset, newPath);
return newAsset;
}
AssetDatabase.CopyAsset(assetPath, newPath);
return AssetDatabase.LoadAssetAtPath<T>(newPath);
}
private static VRCExpressionParameters ReplaceParameters(VRCAvatarDescriptor avi, string folderPath)
{
avi.customExpressions = true;
if (avi.expressionParameters)
{
avi.expressionParameters = CopyAssetAndReturn<VRCExpressionParameters>(avi.expressionParameters, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + avi.expressionParameters.name + ".asset"));
return avi.expressionParameters;
}
var assetPath = folderPath + "/" + avi.gameObject.name + " Parameters.asset";
var newParameters = ScriptableObject.CreateInstance<VRCExpressionParameters>();
newParameters.parameters = Array.Empty<VRCExpressionParameters.Parameter>();
AssetDatabase.CreateAsset(newParameters, AssetDatabase.GenerateUniqueAssetPath(assetPath));
AssetDatabase.ImportAsset(assetPath);
avi.expressionParameters = newParameters;
avi.customExpressions = true;
return newParameters;
}
private static VRCExpressionsMenu ReplaceMenu(VRCExpressionsMenu menu, string folderPath, bool deep = true, Dictionary<VRCExpressionsMenu, VRCExpressionsMenu> copyDict = null)
{
VRCExpressionsMenu newMenu;
if (!menu)
return null;
if (copyDict == null)
copyDict = new Dictionary<VRCExpressionsMenu, VRCExpressionsMenu>();
if (copyDict.ContainsKey(menu))
newMenu = copyDict[menu];
else
{
newMenu = CopyAssetAndReturn<VRCExpressionsMenu>(menu, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + menu.name + ".asset"));
copyDict.Add(menu, newMenu);
if (!deep) return newMenu;
foreach (var c in newMenu.controls.Where(c => c.type == VRCExpressionsMenu.Control.ControlType.SubMenu && c.subMenu != null))
{
c.subMenu = ReplaceMenu(c.subMenu, folderPath, true, copyDict);
}
EditorUtility.SetDirty(newMenu);
}
return newMenu;
}
private static VRCExpressionsMenu ReplaceMenu(VRCAvatarDescriptor avi, string folderPath, bool deep = false)
{
avi.customExpressions = true;
if (avi.expressionsMenu)
{
avi.expressionsMenu = ReplaceMenu(avi.expressionsMenu, folderPath, deep);
return avi.expressionsMenu;
}
var newMenu = ScriptableObject.CreateInstance<VRCExpressionsMenu>();
newMenu.controls = new List<VRCExpressionsMenu.Control>();
AssetDatabase.CreateAsset(newMenu, AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + avi.gameObject.name + " Menu.asset"));
avi.expressionsMenu = newMenu;
avi.customExpressions = true;
return newMenu;
}
private static void AddControls(VRCExpressionsMenu target, List<VRCExpressionsMenu.Control> newCons)
{
foreach (var c in newCons)
target.controls.Add(c);
EditorUtility.SetDirty(target);
}
private static void AddParameters(VRCExpressionParameters target, List<VRCExpressionParameters.Parameter> newParams)
{
target.parameters = target.parameters == null || target.parameters.Length <= 0 ? newParams.ToArray() : target.parameters.Concat(newParams).ToArray();
EditorUtility.SetDirty(target);
AssetDatabase.WriteImportSettingsIfDirty(AssetDatabase.GetAssetPath(target));
}
private static string GenerateUniqueString(string s, System.Func<string, bool> check)
{
if (check(s))
return s;
int suffix = 0;
int.TryParse(s.Substring(s.Length - 2, 2), out int d);
if (d >= 0)
suffix = d;
if (suffix > 0) s = suffix > 9 ? s.Substring(0, s.Length - 2) : s.Substring(0, s.Length - 1);
s = s.Trim();
suffix++;
string newString = s + " " + suffix;
while (!check(newString))
{
suffix++;
newString = s + " " + suffix;
}
return newString;
}
#endregion
internal static class CustomGUI
{
internal static class Content
{
internal static GUIContent iconTrash = new GUIContent(EditorGUIUtility.IconContent("TreeEditor.Trash")) { tooltip = "Remove Limb Control from Avatar" };
internal static GUIContent iconError = new GUIContent(EditorGUIUtility.IconContent("console.warnicon.sml")) { tooltip = "Not enough memory available in Expression Parameters!" };
internal static GUIContent iconHelp = new GUIContent(EditorGUIUtility.IconContent("UnityEditor.InspectorWindow"));
internal static GUIContent
customTreeContent = new GUIContent("Use Custom BlendTree", "Set a custom BlendTree to change the way the limbs move"),
avatarContent = new GUIContent("Avatar Descriptor", "Drag and Drop your avatar here."),
trackingContent = new GUIContent("Add Tracking Control", "Add a SubMenu that allows the individual Enable/Disable of limb tracking"),
sameControlContent = new GUIContent("Use Same Control", "Selected limbs will be controlled together using the same single control");
internal static GUIStyle styleTitle = new GUIStyle(GUI.skin.label) {alignment = TextAnchor.MiddleCenter, fontSize = 14, fontStyle = FontStyle.Bold};
internal static GUIStyle comicallyLargeButton = new GUIStyle(GUI.skin.button) {fontSize = 16, fontStyle = FontStyle.Bold};
}
internal sealed class BGColoredScope : System.IDisposable
{
private readonly Color ogColor;
public BGColoredScope(Color setColor)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = setColor;
}
public BGColoredScope(bool isActive)
{
ogColor = GUI.backgroundColor;
GUI.backgroundColor = isActive ? Color.green : Color.grey;
}
public void Dispose() => GUI.backgroundColor = ogColor;
}
internal static string AssetFolderPath(string variable, string title, string prefKey)
{
using (new GUILayout.HorizontalScope())
{
using (new EditorGUI.DisabledScope(true))
EditorGUILayout.TextField(title, variable);
if (GUILayout.Button("...", GUILayout.Width(30)))
{
var dummyPath = EditorUtility.OpenFolderPanel(title, AssetDatabase.IsValidFolder(variable) ? variable : "Assets", string.Empty);
if (string.IsNullOrEmpty(dummyPath))
return variable;
string newPath = FileUtil.GetProjectRelativePath(dummyPath);
if (!newPath.StartsWith("Assets"))
{
Debug.LogWarning("New Path must be a folder within Assets!");
return variable;
}
newPath = ValidatePath(newPath);
variable = newPath;
EditorPrefs.SetString(prefKey, variable);
}
}
return variable;
}
internal static void DrawSeparator(int thickness = 2, int padding = 10)
{
Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(thickness + padding));
r.height = thickness;
r.y += padding / 2f;
r.x -= 2;
r.width += 6;
ColorUtility.TryParseHtmlString(EditorGUIUtility.isProSkin ? "#595959" : "#858585", out Color lineColor);
EditorGUI.DrawRect(r, lineColor);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 546c21cd2ef473f469fc09e9f17df7be
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
{
"name": "com.dreadscripts.limbcontrol.Editor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f3eaebd95cc4e8a4cb3f2daeb810aaef
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

21
LimbControl/LICENSE.md Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Dreadrith
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8fbe7850af5ea0d42969e2bac72e238c
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

14
LimbControl/README.md Normal file
View File

@@ -0,0 +1,14 @@
Showcase | Setup
:-------------------------:|:-------------------------:
[![Limb Control](https://img.youtube.com/vi/eJMprLDaUJI/0.jpg)](https://youtu.be/eJMprLDaUJI) | [![Limb Setup](https://img.youtube.com/vi/BbhiZaY9-Ns/0.jpg)](https://youtu.be/BbhiZaY9-Ns)
# Limb Control
<b>Feature Release</b>
--------------------
<b>Limb Control</b> allows you to control your limbs through Puppet Control with a few clicks.
Desktop users, you've got power now! Half body users, Kick those people that say you dun got legs!
Using "Same Control" makes the selected limbs be controlled using the same Puppet control.
You can also set your own BlendTree to move your limbs the way you want them to!
Besides that, you can also add <b>Tracking Control</b> which allows you toggle individual parts' tracking.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e046f0c7ae4ff704db06aa9ec88a8283
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9e976a03ce46a1c47a66ef4d37694f03
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bf73b754ebe397541abc7a18767d78bd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,410 @@
%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: LC_BaseLocomotion
serializedVersion: 5
m_AnimatorParameters:
- m_Name: VelocityX
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: VelocityY
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: VelocityZ
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: AngularY
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Grounded
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Upright
m_Type: 1
m_DefaultFloat: 1
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Seated
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: AFK
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: TrackingType
m_Type: 3
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Locomotion
m_StateMachine: {fileID: 110700000}
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 &110700000
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Locomotion
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 1102577115747224770}
m_Position: {x: 324, y: 192, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102611737556091544}
m_Position: {x: 324, y: -144, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102781996838665776}
m_Position: {x: 324, y: 36, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 24, y: -60, z: 0}
m_EntryPosition: {x: 24, y: -144, z: 0}
m_ExitPosition: {x: 1776, y: -252, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1102611737556091544}
--- !u!114 &114022255662586678
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b658310f3202fc64aac64aa6e603b79a, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &114161388611585310
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 2
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114186363907183432
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114389411411105514
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 2
trackingLeftHand: 2
trackingRightHand: 2
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114592321216657706
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 1
trackingLeftFoot: 1
trackingRightFoot: 1
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114860979276583244
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 1
trackingLeftFoot: 1
trackingRightFoot: 1
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!1101 &1101015495729127544
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: Upright
m_EventTreshold: 0.41
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102577115747224770}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.5
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101069751804321926
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: Upright
m_EventTreshold: 0.7
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102611737556091544}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101267269745335784
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: Upright
m_EventTreshold: 0.43
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102781996838665776}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.5
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101557312258220082
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: Upright
m_EventTreshold: 0.68
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102781996838665776}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.5
m_TransitionOffset: 0
m_ExitTime: 0
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &1102577115747224770
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Prone
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101267269745335784}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 20600000, guid: 667633d86ecc9c0408e81156d77d9a83, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102611737556091544
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Standing
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101557312258220082}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 20600000, guid: b7ff0bc6ae31ce4458992fa6ce9f6897, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102781996838665776
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Crouching
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101015495729127544}
- {fileID: 1101069751804321926}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 20600000, guid: 1fe93258fe621c344be8713451c5104f, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: debbf9a84fe0fd34ba7d73b6789e13c6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,793 @@
%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: LC_BaseSitting
serializedVersion: 5
m_AnimatorParameters:
- m_Name: Seated
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: AvatarVersion
m_Type: 3
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Sitting
m_StateMachine: {fileID: 1107681706011699772}
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!114 &114008585218972436
MonoBehaviour:
m_ObjectHideFlags: 1
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: 141706016, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
m_Name:
m_EditorClassIdentifier:
enterPoseSpace: 0
fixedDelay: 1
delayTime: 0
debugString:
--- !u!114 &114022255662586678
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b658310f3202fc64aac64aa6e603b79a, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &114147142126113726
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3}
m_Name:
m_EditorClassIdentifier:
disableLocomotion: 0
disableLeftHandTrack: 0
disableRightHandTrack: 0
disableHip3pt: 0
disableAutoWalk: 0
disableHipTrackFbt: 0
disableRightFootTrack: 0
disableLeftFootTrack: 0
disableHeadTrack: 1
disableAll: 0
setViewPoint: 0
delayTime: 0
DebugName: SitDown
--- !u!114 &114147305607324078
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3}
m_Name:
m_EditorClassIdentifier:
disableLocomotion: 0
disableLeftHandTrack: 0
disableRightHandTrack: 0
disableHip3pt: 1
disableAutoWalk: 1
disableHipTrackFbt: 1
disableRightFootTrack: 1
disableLeftFootTrack: 1
disableHeadTrack: 0
disableAll: 1
setViewPoint: 1
delayTime: 0.21
DebugName: SittingV2
--- !u!114 &114159394839152826
MonoBehaviour:
m_ObjectHideFlags: 1
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: 1658034022, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
setView: 1
delayTime: 0.21
debugString:
applied: 0
--- !u!114 &114451134694153264
MonoBehaviour:
m_ObjectHideFlags: 3
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114530651618753848
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: 82154fcd59363fa4aa5ceb410dfa0cc0, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &114532836840147502
MonoBehaviour:
m_ObjectHideFlags: 1
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 2
trackingLeftHand: 2
trackingRightHand: 2
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!114 &114548198012850600
MonoBehaviour:
m_ObjectHideFlags: 1
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: 1876060101, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
enterPoseSpace: 1
fixedDelay: 1
delayTime: 0.21
debugString:
--- !u!114 &114681529930865528
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3}
m_Name:
m_EditorClassIdentifier:
disableLocomotion: 0
disableLeftHandTrack: 0
disableRightHandTrack: 0
disableHip3pt: 0
disableAutoWalk: 0
disableHipTrackFbt: 0
disableRightFootTrack: 0
disableLeftFootTrack: 0
disableHeadTrack: 0
disableAll: 0
setViewPoint: 0
delayTime: 0
DebugName: GetUp
--- !u!114 &114710780056594672
MonoBehaviour:
m_ObjectHideFlags: 3
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: 141706016, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
m_Name:
m_EditorClassIdentifier:
enterPoseSpace: 1
fixedDelay: 1
delayTime: 0.51
debugString:
--- !u!114 &114768730629577578
MonoBehaviour:
m_ObjectHideFlags: 3
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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3}
m_Name:
m_EditorClassIdentifier:
disableLocomotion: 1
disableLeftHandTrack: 0
disableRightHandTrack: 0
disableHip3pt: 1
disableAutoWalk: 1
disableHipTrackFbt: 1
disableRightFootTrack: 1
disableLeftFootTrack: 1
disableHeadTrack: 0
disableAll: 0
setViewPoint: 1
delayTime: 0
DebugName: SitLoop
--- !u!114 &114803473576782264
MonoBehaviour:
m_ObjectHideFlags: 1
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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 1
trackingLeftFoot: 1
trackingRightFoot: 1
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
trackingMouth: 0
debugString:
--- !u!114 &114804564424020894
MonoBehaviour:
m_ObjectHideFlags: 1
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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 0
trackingLeftFoot: 0
trackingRightFoot: 0
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
trackingMouth: 0
debugString:
--- !u!114 &114820903061213562
MonoBehaviour:
m_ObjectHideFlags: 1
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: 1658034022, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
setView: 0
delayTime: 0
debugString:
applied: 0
--- !u!114 &114875782908073470
MonoBehaviour:
m_ObjectHideFlags: 1
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: -646210727, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 2
trackingLeftHand: 2
trackingRightHand: 2
trackingHip: 2
trackingLeftFoot: 2
trackingRightFoot: 2
trackingLeftFingers: 1
trackingRightFingers: 1
trackingEyes: 1
trackingMouth: 1
debugString:
--- !u!114 &114897624052543500
MonoBehaviour:
m_ObjectHideFlags: 1
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: 11500000, guid: b6969d45d27693b4fac97c750e8b2a3f, type: 3}
m_Name:
m_EditorClassIdentifier:
disableLocomotion: 0
disableLeftHandTrack: 0
disableRightHandTrack: 0
disableHip3pt: 0
disableAutoWalk: 0
disableHipTrackFbt: 0
disableRightFootTrack: 0
disableLeftFootTrack: 0
disableHeadTrack: 0
disableAll: 0
setViewPoint: 0
delayTime: 0
DebugName: RestoreTracking
--- !u!114 &114938240376977580
MonoBehaviour:
m_ObjectHideFlags: 1
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: 1876060101, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
enterPoseSpace: 0
fixedDelay: 1
delayTime: 0
debugString:
--- !u!114 &114977321789056526
MonoBehaviour:
m_ObjectHideFlags: 1
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: 292304312, guid: 661092b4961be7145bfbe56e1e62337b, type: 3}
m_Name:
m_EditorClassIdentifier:
trackingHead: 1
trackingLeftHand: 1
trackingRightHand: 1
trackingHip: 1
trackingLeftFoot: 1
trackingRightFoot: 1
trackingLeftFingers: 0
trackingRightFingers: 0
trackingEyes: 0
debugString:
--- !u!1101 &1101090626813726064
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102286624050114800}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.5
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101163680668272054
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 0}
m_Solo: 0
m_Mute: 0
m_IsExit: 1
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101181580859197468
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: AvatarVersion
m_EventTreshold: 3
- m_ConditionMode: 1
m_ConditionEvent: Seated
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102753656758336688}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101459797441652132
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102398980834643402}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101633722343387124
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: Seated
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 0}
m_Solo: 0
m_Mute: 0
m_IsExit: 1
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101808702802395124
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: Seated
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102320304955423218}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 1
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1101861624235594360
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: AvatarVersion
m_EventTreshold: 2
- m_ConditionMode: 1
m_ConditionEvent: Seated
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1102695531508929512}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.2
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &1102286624050114800
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: PoseSpace
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101459797441652132}
m_StateMachineBehaviours:
- {fileID: 114710780056594672}
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102320304955423218
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: RestoreTracking
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101163680668272054}
m_StateMachineBehaviours:
- {fileID: 114803473576782264}
- {fileID: 114008585218972436}
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102398980834643402
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: UpperBodyTracked
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101808702802395124}
m_StateMachineBehaviours:
- {fileID: 114804564424020894}
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102560665265379622
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: VersionSwitch
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101861624235594360}
- {fileID: 1101181580859197468}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102695531508929512
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: DisableTracking
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101090626813726064}
m_StateMachineBehaviours:
- {fileID: 114875782908073470}
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 91e5518865a04934b82b8aba11398609, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1102753656758336688
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: V2Seated
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1101633722343387124}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 970f39cfa8501c741b71ad9eefeeb83d, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &1107681706011699772
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Sitting
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 1102695531508929512}
m_Position: {x: 204, y: 348, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102320304955423218}
m_Position: {x: 1104, y: 348, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102398980834643402}
m_Position: {x: 804, y: 348, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102286624050114800}
m_Position: {x: 504, y: 348, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102560665265379622}
m_Position: {x: 96, y: 204, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102753656758336688}
m_Position: {x: 612, y: 156, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 36, y: 24, z: 0}
m_EntryPosition: {x: 36, y: 108, z: 0}
m_ExitPosition: {x: 1428, y: 348, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1102560665265379622}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b74b69dfec89e1446bfaa06ca5348385
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,53 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_EmptyClip
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves: []
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings: []
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 1
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 0
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves: []
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b5662ee04470f6548a6eca8c22b5978f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,89 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!206 &20600000
BlendTree:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalBlendTree
m_Childs:
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: 957a79874e541c94fa0a22d5a3eb66d1, type: 2}
m_Threshold: 0
m_Position: {x: 1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: b3217facd16fc78479f2f5251ba1317b, type: 2}
m_Threshold: 1
m_Position: {x: -1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: 0b880ee47bdaa5647b9d77b72fc6629d, type: 2}
m_Threshold: 2
m_Position: {x: 0, y: 1}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: ef27a02dbff4e004ab901b486706bf52, type: 2}
m_Threshold: 3
m_Position: {x: 0, y: -1}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: 0624707b131b6a7489374321542a64fb, type: 2}
m_Threshold: 4
m_Position: {x: 0, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: 2fd72ee6ef7304a48a7cdd3c00d6c995, type: 2}
m_Threshold: 5
m_Position: {x: -0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: 3e83eeab1a70d58449135e6d00218565, type: 2}
m_Threshold: 6
m_Position: {x: -0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: da26a77912f71474c8b219df419ed18c, type: 2}
m_Threshold: 7
m_Position: {x: 0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 7400000, guid: cf10e7275768e674b8b617f850413c64, type: 2}
m_Threshold: 8
m_Position: {x: 0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: VelocityX
m_Mirror: 0
m_BlendParameter: LArmX
m_BlendParameterY: LArmY
m_MinThreshold: 0
m_MaxThreshold: 8
m_UseAutomaticThresholds: 0
m_NormalizedBlendValues: 0
m_BlendType: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 763573ff00d82be4ca9f14d41fa23ff9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 20600000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 06adb0c1615a4b844b0ca46f64d5140f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,683 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalDown
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.286
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.297
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.802
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.286
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.297
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.802
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.5494506
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.5494506
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 90
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 93
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 91
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 92
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 94
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 81
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 82
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 83
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 85
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 84
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 71
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 63
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 74
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 66
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.286
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.297
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.802
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.286
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.297
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.802
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.5494506
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.5494506
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ef27a02dbff4e004ab901b486706bf52
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,818 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalDownLeft
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.637
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.495
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.736
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.062
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.095
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.385
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.011
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.2967033
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4945055
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.31868133
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.32967034
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.12087912
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 90
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 93
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 91
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 92
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 94
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 81
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 82
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 83
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 85
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 84
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 66
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 63
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 64
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 74
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 71
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 72
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 73
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.637
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.495
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.736
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.062
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.095
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.385
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.011
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.2967033
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4945055
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.31868133
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.32967034
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.12087912
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2fd72ee6ef7304a48a7cdd3c00d6c995
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,818 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalDownRight
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.062
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.095
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.385
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.011
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.637
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.495
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.736
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.2967033
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4945055
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.32967034
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.31868133
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.12087912
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 90
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 93
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 91
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 92
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 94
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 81
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 82
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 83
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 84
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 85
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 74
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 71
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 72
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 66
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 64
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 63
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 65
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.062
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.095
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.385
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.011
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.637
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.495
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.736
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.143
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.2967033
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4945055
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.32967034
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.31868133
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.12087912
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cf10e7275768e674b8b617f850413c64
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,773 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalLeft
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.043956038
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.63736266
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.000000005567467
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.3736264
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.34065935
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.62637365
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.37362635
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.14285713
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.5824176
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.6813187
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.16483517
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 90
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 91
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 93
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 92
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 94
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 81
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 82
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 84
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 71
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 72
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 73
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 74
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 63
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 64
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 65
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 66
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.043956038
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.63736266
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.000000005567467
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.3736264
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.34065935
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.62637365
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.37362635
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.14285713
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.5824176
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.6813187
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.16483517
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b3217facd16fc78479f2f5251ba1317b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,773 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LC_NormalRight
serializedVersion: 6
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.34065935
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.043956038
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.63736266
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.3736264
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.000000005567467
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.5824176
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.6813187
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.16483517
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.62637365
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.37362635
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.14285713
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 90
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 91
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 93
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 81
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 82
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 83
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 84
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 85
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 71
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 72
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 73
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 74
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 63
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 64
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 65
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 66
script: {fileID: 0}
typeID: 95
customType: 8
isPPtrCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.4
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.34065935
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.043956038
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Down-Up
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.63736266
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.3736264
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Arm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.000000005567467
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Forearm Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.5824176
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.6813187
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0.16483517
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Right Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.62637365
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Front-Back
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.37362635
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: -0.14285713
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Upper Leg Twist In-Out
path:
classID: 95
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: Left Lower Leg Stretch
path:
classID: 95
script: {fileID: 0}
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 957a79874e541c94fa0a22d5a3eb66d1
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More