mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-04-27 23:08:58 +08:00
feat: remove override target from ShapeChanger and MaterialSetter
This commit is contained in:
parent
e5279dda88
commit
792b34da5f
@ -3,7 +3,6 @@
|
||||
<ui:VisualElement name="root-box">
|
||||
<ui:VisualElement name="group-box">
|
||||
<ed:PropertyField binding-path="m_inverted" label="reactive_object.inverse" class="ndmf-tr"/>
|
||||
<ed:PropertyField binding-path="m_targetRenderer" label="reactive_object.shape-changer.target-renderer" name="TargetRenderer" class="ndmf-tr"/>
|
||||
|
||||
<ui:VisualElement name="ListViewContainer">
|
||||
<ui:ListView virtualization-method="DynamicHeight"
|
||||
|
@ -31,7 +31,6 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
root.Bind(serializedObject);
|
||||
|
||||
var listView = root.Q<ListView>("Shapes");
|
||||
root.Q<PropertyField>("TargetRenderer").RegisterValueChangeCallback(_ => listView.RefreshItems());
|
||||
|
||||
listView.showBoundCollectionSize = false;
|
||||
listView.virtualizationMethod = CollectionVirtualizationMethod.DynamicHeight;
|
||||
|
@ -28,44 +28,14 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
|
||||
var f_material_index = uxml.Q<DropdownField>("f-material-index");
|
||||
|
||||
var f_object = uxml.Q<ObjectField>("f-object");
|
||||
f_object.objectType = typeof(Renderer);
|
||||
f_object.allowSceneObjects = true;
|
||||
var f_object = uxml.Q<PropertyField>("f-object");
|
||||
|
||||
var f_target_object = uxml.Q<ObjectField>("f-obj-target-object");
|
||||
var f_reference_path = uxml.Q<TextField>("f-obj-ref-path");
|
||||
|
||||
f_object.RegisterValueChangedCallback(evt =>
|
||||
f_object.RegisterValueChangeCallback(evt =>
|
||||
{
|
||||
var gameObj = (evt.newValue as Renderer)?.gameObject;
|
||||
|
||||
if (gameObj == null)
|
||||
{
|
||||
f_target_object.value = null;
|
||||
f_reference_path.value = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
var path = RuntimeUtil.AvatarRootPath(gameObj);
|
||||
|
||||
f_reference_path.value = path;
|
||||
if (path == "")
|
||||
{
|
||||
f_target_object.value = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
f_target_object.value = gameObj;
|
||||
}
|
||||
}
|
||||
|
||||
EditorApplication.delayCall += UpdateMaterialDropdown;
|
||||
});
|
||||
UpdateMaterialDropdown();
|
||||
|
||||
f_target_object.RegisterValueChangedCallback(_ => UpdateVisualTarget());
|
||||
f_reference_path.RegisterValueChangedCallback(_ => UpdateVisualTarget());
|
||||
|
||||
// Link dropdown to material index field
|
||||
var f_material_index_int = uxml.Q<IntegerField>("f-material-index-int");
|
||||
f_material_index_int.RegisterValueChangedCallback(evt =>
|
||||
@ -83,35 +53,19 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
|
||||
return uxml;
|
||||
|
||||
void UpdateVisualTarget()
|
||||
{
|
||||
var setter = property.serializedObject.targetObject as ModularAvatarMaterialSetter;
|
||||
var renderer = GetTargetRenderer(AvatarObjectReference.Get(property.FindPropertyRelative("Object")));
|
||||
var overrideRenderer = GetTargetRenderer(setter?.targetRenderer.Get(setter));
|
||||
|
||||
f_object.SetEnabled(overrideRenderer == null);
|
||||
f_object.SetValueWithoutNotify(overrideRenderer ?? renderer);
|
||||
|
||||
Renderer GetTargetRenderer(GameObject obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
return obj?.GetComponent<Renderer>();
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateMaterialDropdown()
|
||||
{
|
||||
var setter = property.serializedObject.targetObject as ModularAvatarMaterialSetter;
|
||||
var sharedMaterials = GetSharedMaterials(AvatarObjectReference.Get(property.FindPropertyRelative("Object")));
|
||||
var overrideSharedMaterials = GetSharedMaterials(setter?.targetRenderer.Get(setter));
|
||||
var toggledObject = AvatarObjectReference.Get(property.FindPropertyRelative("Object"));
|
||||
Material[] sharedMaterials;
|
||||
try
|
||||
{
|
||||
sharedMaterials = toggledObject?.GetComponent<Renderer>()?.sharedMaterials;
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
sharedMaterials = null;
|
||||
}
|
||||
|
||||
sharedMaterials = overrideSharedMaterials ?? sharedMaterials;
|
||||
if (sharedMaterials != null)
|
||||
{
|
||||
var matCount = sharedMaterials.Length;
|
||||
@ -155,18 +109,6 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
f_material_index.formatListItemCallback = _ => "<Missing Renderer>";
|
||||
f_material_index.formatSelectedValueCallback = f_material_index.formatListItemCallback;
|
||||
}
|
||||
|
||||
Material[] GetSharedMaterials(GameObject obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
return obj?.GetComponent<Renderer>()?.sharedMaterials;
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,9 @@
|
||||
<UXML xmlns:ui="UnityEngine.UIElements" xmlns:ed="UnityEditor.UIElements">
|
||||
<ui:VisualElement class="toggled-object-editor">
|
||||
<ui:VisualElement class="horizontal">
|
||||
<!--<ed:PropertyField binding-path="Object" label="" name="f-object" class="f-object"/>-->
|
||||
<ed:ObjectField label="" name="f-object" class="f-object"/>
|
||||
<ed:PropertyField binding-path="Object" label="" name="f-object" class="f-object"/>
|
||||
<ui:DropdownField name="f-material-index" binding-path="MaterialIndex"/>
|
||||
|
||||
<ui:VisualElement style="display:none">
|
||||
<ui:TextField binding-path="Object.referencePath" label="" name="f-obj-ref-path"/>
|
||||
<ed:ObjectField name="f-obj-target-object" binding-path="Object.targetObject"/>
|
||||
<ed:IntegerField binding-path="MaterialIndex" name="f-material-index-int"/>
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
|
@ -1,102 +0,0 @@
|
||||
#region
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
{
|
||||
public class AddShapePopup : PopupWindowContent
|
||||
{
|
||||
private const string Root = "Packages/nadena.dev.modular-avatar/Editor/Inspector/ShapeChanger/";
|
||||
const string UxmlPath = Root + "AddShapePopup.uxml";
|
||||
const string UssPath = Root + "ShapeChangerStyles.uss";
|
||||
|
||||
private VisualElement _elem;
|
||||
private ScrollView _scrollView;
|
||||
|
||||
public AddShapePopup(ModularAvatarShapeChanger changer)
|
||||
{
|
||||
if (changer == null) return;
|
||||
var target = changer.targetRenderer.Get(changer)?.GetComponent<SkinnedMeshRenderer>();
|
||||
if (target == null || target.sharedMesh == null) return;
|
||||
|
||||
var alreadyRegistered = changer.Shapes.Select(c => c.ShapeName).ToHashSet();
|
||||
|
||||
var keys = new List<string>();
|
||||
for (int i = 0; i < target.sharedMesh.blendShapeCount; i++)
|
||||
{
|
||||
var name = target.sharedMesh.GetBlendShapeName(i);
|
||||
if (alreadyRegistered.Contains(name)) continue;
|
||||
|
||||
keys.Add(name);
|
||||
}
|
||||
|
||||
var uss = AssetDatabase.LoadAssetAtPath<StyleSheet>(UssPath);
|
||||
var uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(UxmlPath);
|
||||
|
||||
_elem = uxml.CloneTree();
|
||||
_elem.styleSheets.Add(uss);
|
||||
Localization.UI.Localize(_elem);
|
||||
|
||||
_scrollView = _elem.Q<ScrollView>("scroll-view");
|
||||
|
||||
if (keys.Count > 0)
|
||||
{
|
||||
_scrollView.contentContainer.Clear();
|
||||
|
||||
foreach (var key in keys)
|
||||
{
|
||||
var container = new VisualElement();
|
||||
container.AddToClassList("add-shape-row");
|
||||
|
||||
Button btn = default;
|
||||
btn = new Button(() =>
|
||||
{
|
||||
AddShape(changer, key);
|
||||
container.RemoveFromHierarchy();
|
||||
});
|
||||
btn.text = "+";
|
||||
container.Add(btn);
|
||||
|
||||
var label = new Label(key);
|
||||
container.Add(label);
|
||||
|
||||
_scrollView.contentContainer.Add(container);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddShape(ModularAvatarShapeChanger changer, string key)
|
||||
{
|
||||
Undo.RecordObject(changer, "Add Shape");
|
||||
|
||||
changer.Shapes.Add(new ChangedShape()
|
||||
{
|
||||
Object = new(),
|
||||
ShapeName = key,
|
||||
ChangeType = ShapeChangeType.Delete,
|
||||
Value = 100
|
||||
});
|
||||
|
||||
PrefabUtility.RecordPrefabInstancePropertyModifications(changer);
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect rect)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnOpen()
|
||||
{
|
||||
editorWindow.rootVisualElement.Clear();
|
||||
editorWindow.rootVisualElement.Add(_elem);
|
||||
//editorWindow.rootVisualElement.Clear();
|
||||
|
||||
//editorWindow.rootVisualElement.Add(new Label("Hello, World!"));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a8351fafb3740918363f60365adfeda
|
||||
timeCreated: 1717205112
|
@ -1,11 +0,0 @@
|
||||
<UXML xmlns:ui="UnityEngine.UIElements">
|
||||
<ui:VisualElement class="add-shape-popup">
|
||||
<ui:VisualElement class="add-shape-popup">
|
||||
<ui:Label text="Select Blendshape"/>
|
||||
<ui:VisualElement class="vline"/>
|
||||
<ui:ScrollView show-horizontal-scroller="false" name="scroll-view">
|
||||
<ui:Label text="<none remaining>" class="placeholder"/>
|
||||
</ui:ScrollView>
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
</UXML>
|
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6753a7b3eae1416cb04786cf53778c33
|
||||
timeCreated: 1717205258
|
@ -29,44 +29,14 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
|
||||
var f_shape_name = uxml.Q<DropdownField>("f-shape-name");
|
||||
|
||||
var f_object = uxml.Q<ObjectField>("f-object");
|
||||
f_object.objectType = typeof(SkinnedMeshRenderer);
|
||||
f_object.allowSceneObjects = true;
|
||||
var f_object = uxml.Q<PropertyField>("f-object");
|
||||
|
||||
var f_target_object = uxml.Q<ObjectField>("f-obj-target-object");
|
||||
var f_reference_path = uxml.Q<TextField>("f-obj-ref-path");
|
||||
|
||||
f_object.RegisterValueChangedCallback(evt =>
|
||||
f_object.RegisterValueChangeCallback(evt =>
|
||||
{
|
||||
var gameObj = (evt.newValue as SkinnedMeshRenderer)?.gameObject;
|
||||
|
||||
if (gameObj == null)
|
||||
{
|
||||
f_target_object.value = null;
|
||||
f_reference_path.value = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
var path = RuntimeUtil.AvatarRootPath(gameObj);
|
||||
|
||||
f_reference_path.value = path;
|
||||
if (path == "")
|
||||
{
|
||||
f_target_object.value = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
f_target_object.value = gameObj;
|
||||
}
|
||||
}
|
||||
|
||||
EditorApplication.delayCall += UpdateShapeDropdown;
|
||||
});
|
||||
UpdateShapeDropdown();
|
||||
|
||||
f_target_object.RegisterValueChangedCallback(_ => UpdateVisualTarget());
|
||||
f_reference_path.RegisterValueChangedCallback(_ => UpdateVisualTarget());
|
||||
|
||||
uxml.Q<PropertyField>("f-change-type").RegisterCallback<ChangeEvent<string>>(
|
||||
e =>
|
||||
{
|
||||
@ -83,56 +53,27 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
|
||||
return uxml;
|
||||
|
||||
void UpdateVisualTarget()
|
||||
{
|
||||
var changer = property.serializedObject.targetObject as ModularAvatarShapeChanger;
|
||||
var renderer = GetTargetRenderer(AvatarObjectReference.Get(property.FindPropertyRelative("Object")));
|
||||
var overrideRenderer = GetTargetRenderer(changer?.targetRenderer.Get(changer));
|
||||
|
||||
f_object.SetEnabled(overrideRenderer == null);
|
||||
f_object.SetValueWithoutNotify(overrideRenderer ?? renderer);
|
||||
|
||||
SkinnedMeshRenderer GetTargetRenderer(GameObject obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
return obj?.GetComponent<SkinnedMeshRenderer>();
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateShapeDropdown()
|
||||
{
|
||||
var changer = property.serializedObject.targetObject as ModularAvatarShapeChanger;
|
||||
var shapeNames = GetShapeNames(AvatarObjectReference.Get(property.FindPropertyRelative("Object")));
|
||||
var overrideShapeNames = GetShapeNames(changer?.targetRenderer.Get(changer));
|
||||
|
||||
f_shape_name.SetEnabled(overrideShapeNames != null || shapeNames != null);
|
||||
f_shape_name.choices = overrideShapeNames ?? shapeNames ?? new();
|
||||
|
||||
f_shape_name.formatListItemCallback = name => f_shape_name.enabledSelf ? name : "<Missing SkinnedMeshRenderer>";
|
||||
f_shape_name.formatSelectedValueCallback = f_shape_name.formatListItemCallback;
|
||||
|
||||
List<string> GetShapeNames(GameObject obj)
|
||||
var targetObject = AvatarObjectReference.Get(property.FindPropertyRelative("Object"));
|
||||
List<string> shapeNames;
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
var mesh = obj?.GetComponent<SkinnedMeshRenderer>()?.sharedMesh;
|
||||
if (mesh == null) return null;
|
||||
|
||||
return Enumerable.Range(0, mesh.blendShapeCount)
|
||||
.Select(x => mesh.GetBlendShapeName(x))
|
||||
.ToList();
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var mesh = targetObject?.GetComponent<SkinnedMeshRenderer>()?.sharedMesh;
|
||||
shapeNames = mesh == null ? null : Enumerable.Range(0, mesh.blendShapeCount)
|
||||
.Select(x => mesh.GetBlendShapeName(x))
|
||||
.ToList();
|
||||
}
|
||||
catch (MissingComponentException e)
|
||||
{
|
||||
shapeNames = null;
|
||||
}
|
||||
|
||||
f_shape_name.SetEnabled(shapeNames != null);
|
||||
f_shape_name.choices = shapeNames ?? new();
|
||||
|
||||
f_shape_name.formatListItemCallback = name => shapeNames != null ? name : "<Missing SkinnedMeshRenderer>";
|
||||
f_shape_name.formatSelectedValueCallback = f_shape_name.formatListItemCallback;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,8 @@
|
||||
<UXML xmlns:ui="UnityEngine.UIElements" xmlns:ed="UnityEditor.UIElements">
|
||||
<ui:VisualElement class="changed-shape-editor">
|
||||
<ui:VisualElement class="horizontal">
|
||||
<!--<ed:PropertyField binding-path="Object" label="" name="f-object" class="f-object"/>-->
|
||||
<ed:ObjectField label="" name="f-object" class="f-object"/>
|
||||
<ed:PropertyField binding-path="Object" label="" name="f-object" class="f-object"/>
|
||||
<ed:PropertyField binding-path="ChangeType" label="" name="f-change-type"/>
|
||||
|
||||
<ui:VisualElement style="display:none">
|
||||
<ui:TextField binding-path="Object.referencePath" label="" name="f-obj-ref-path"/>
|
||||
<ed:ObjectField name="f-obj-target-object" binding-path="Object.targetObject"/>
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
<ui:VisualElement class="horizontal">
|
||||
<ui:DropdownField name="f-shape-name" binding-path="ShapeName"/>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<ui:VisualElement name="root-box">
|
||||
<ui:VisualElement name="group-box">
|
||||
<ed:PropertyField binding-path="m_inverted" label="reactive_object.inverse" class="ndmf-tr"/>
|
||||
<ed:PropertyField binding-path="m_targetRenderer" label="reactive_object.shape-changer.target-renderer" name="TargetRenderer" class="ndmf-tr"/>
|
||||
|
||||
<ui:VisualElement name="ListViewContainer">
|
||||
<ui:ListView virtualization-method="DynamicHeight"
|
||||
|
@ -35,7 +35,6 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
root.Bind(serializedObject);
|
||||
|
||||
var listView = root.Q<ListView>("Shapes");
|
||||
root.Q<PropertyField>("TargetRenderer").RegisterValueChangeCallback(_ => listView.RefreshItems());
|
||||
|
||||
listView.showBoundCollectionSize = false;
|
||||
listView.virtualizationMethod = CollectionVirtualizationMethod.DynamicHeight;
|
||||
@ -44,18 +43,7 @@ namespace nadena.dev.modular_avatar.core.editor.ShapeChanger
|
||||
var field_addButton = typeof(BaseListView).GetField("m_AddButton", NonPublic | Instance);
|
||||
var addButton = (Button)field_addButton.GetValue(listView);
|
||||
|
||||
addButton.clickable = new Clickable(() =>
|
||||
{
|
||||
var changer = target as ModularAvatarShapeChanger;
|
||||
if (changer.targetRenderer.Get(changer) != null)
|
||||
{
|
||||
PopupWindow.Show(addButton.worldBound, new AddShapePopup(changer));
|
||||
}
|
||||
else
|
||||
{
|
||||
OpenAddWindow();
|
||||
}
|
||||
});
|
||||
addButton.clickable = new Clickable(OpenAddWindow);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
@ -251,6 +251,5 @@
|
||||
"ma_info.param_usage_ui.no_data": "[ NO DATA ]",
|
||||
"reactive_object.inverse": "Inverse Condition",
|
||||
"reactive_object.material-setter.set-to": "Set material to: ",
|
||||
"reactive_object.shape-changer.target-renderer": "Target Renderer for all",
|
||||
"menuitem.misc.add_toggle": "Add toggle"
|
||||
}
|
@ -247,6 +247,5 @@
|
||||
"ma_info.param_usage_ui.no_data": "[ NO DATA ]",
|
||||
"reactive_object.inverse": "条件を反転",
|
||||
"reactive_object.material-setter.set-to": "変更先のマテリアル ",
|
||||
"reactive_object.shape-changer.target-renderer": "操作するレンダラーの一括指定",
|
||||
"menuitem.misc.add_toggle": "トグルを追加"
|
||||
}
|
@ -250,6 +250,5 @@
|
||||
"ma_info.param_usage_ui.no_data": "【無資訊】",
|
||||
"reactive_object.inverse": "反轉條件",
|
||||
"reactive_object.material-setter.set-to": "將材質設定為:",
|
||||
"reactive_object.shape-changer.target-renderer": "所有目標 Renderer",
|
||||
"menuitem.misc.add_toggle": "新增開關"
|
||||
}
|
@ -15,11 +15,9 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
foreach (var changer in changers)
|
||||
{
|
||||
var overrideRenderer = changer.targetRenderer.Get(changer)?.GetComponent<SkinnedMeshRenderer>();
|
||||
|
||||
foreach (var shape in changer.Shapes)
|
||||
{
|
||||
var renderer = overrideRenderer ?? shape.Object.Get(changer)?.GetComponent<SkinnedMeshRenderer>();
|
||||
var renderer = shape.Object.Get(changer)?.GetComponent<SkinnedMeshRenderer>();
|
||||
if (renderer == null) continue;
|
||||
|
||||
var mesh = renderer.sharedMesh;
|
||||
@ -91,11 +89,9 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
if (setter.Objects == null) continue;
|
||||
|
||||
var overrideRenderer = setter.targetRenderer.Get(setter)?.GetComponent<Renderer>();
|
||||
|
||||
foreach (var obj in setter.Objects)
|
||||
{
|
||||
var renderer = overrideRenderer ?? obj.Object.Get(setter)?.GetComponent<Renderer>();
|
||||
var renderer = obj.Object.Get(setter)?.GetComponent<Renderer>();
|
||||
if (renderer == null || renderer.sharedMaterials.Length < obj.MaterialIndex) continue;
|
||||
|
||||
var key = new TargetProp
|
||||
|
@ -39,14 +39,11 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
bool active = context.ActiveAndEnabled(setter) && (mami == null || menuItemPreview.IsEnabledForPreview(mami));
|
||||
if (active == context.Observe(setter, t => t.Inverted)) continue;
|
||||
|
||||
var overrideTarget = context.Observe(setter, c => c.targetRenderer.Get(setter));
|
||||
var overrideRenderer = context.GetComponent<Renderer>(overrideTarget);
|
||||
|
||||
var objs = context.Observe(setter, s => s.Objects.Select(o => (o.Object.Get(s), o.Material, o.MaterialIndex)).ToList(), (x, y) => x.SequenceEqual(y));
|
||||
|
||||
foreach (var (obj, mat, index) in objs)
|
||||
{
|
||||
var renderer = overrideRenderer ?? context.GetComponent<Renderer>(obj);
|
||||
var renderer = context.GetComponent<Renderer>(obj);
|
||||
if (renderer == null) continue;
|
||||
|
||||
var matCount = context.Observe(renderer, r => r.sharedMaterials.Length);
|
||||
@ -114,14 +111,11 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
foreach (var setter in _setters)
|
||||
{
|
||||
var overrideTarget = context.Observe(setter, c => c.targetRenderer.Get(setter));
|
||||
var overrideRenderer = context.GetComponent<Renderer>(overrideTarget);
|
||||
|
||||
var objs = context.Observe(setter, s => s.Objects.Select(o => (o.Object.Get(s), o.Material, o.MaterialIndex)).ToList(), (x, y) => x.SequenceEqual(y));
|
||||
|
||||
foreach (var (obj, mat, index) in objs)
|
||||
{
|
||||
var renderer = overrideRenderer ?? context.GetComponent<Renderer>(obj);
|
||||
var renderer = context.GetComponent<Renderer>(obj);
|
||||
if (renderer != original) continue;
|
||||
|
||||
if (index <= mats.Length)
|
||||
|
@ -49,14 +49,11 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
bool active = ctx.ActiveAndEnabled(changer) && (mami == null || menuItemPreview.IsEnabledForPreview(mami));
|
||||
if (active == ctx.Observe(changer, t => t.Inverted)) continue;
|
||||
|
||||
var overrideTarget = ctx.Observe(changer, c => c.targetRenderer.Get(changer));
|
||||
var overrideRenderer = ctx.GetComponent<SkinnedMeshRenderer>(overrideTarget);
|
||||
|
||||
var shapes = ctx.Observe(changer, c => c.Shapes.Select(s => (s.Object.Get(c), s.ShapeName, s.ChangeType, s.Value)).ToList(), Enumerable.SequenceEqual);
|
||||
|
||||
foreach (var (target, name, type, value) in shapes)
|
||||
{
|
||||
var renderer = overrideRenderer ?? ctx.GetComponent<SkinnedMeshRenderer>(target);
|
||||
var renderer = ctx.GetComponent<SkinnedMeshRenderer>(target);
|
||||
if (renderer == null) continue;
|
||||
|
||||
if (!groups.TryGetValue(renderer, out var group))
|
||||
@ -112,14 +109,11 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
foreach (var changer in _changers)
|
||||
{
|
||||
var overrideTarget = context.Observe(changer, c => c.targetRenderer.Get(changer));
|
||||
var overrideRenderer = context.GetComponent<SkinnedMeshRenderer>(overrideTarget);
|
||||
|
||||
var shapes = context.Observe(changer, c => c.Shapes.Select(s => (s.Object.Get(c), s.ShapeName, s.ChangeType, s.Value)).ToList(), Enumerable.SequenceEqual);
|
||||
|
||||
foreach (var (target, name, type, value) in shapes)
|
||||
{
|
||||
var renderer = overrideRenderer ?? context.GetComponent<SkinnedMeshRenderer>(target);
|
||||
var renderer = context.GetComponent<SkinnedMeshRenderer>(target);
|
||||
if (renderer != original) continue;
|
||||
|
||||
var index = mesh.GetBlendShapeIndex(name);
|
||||
@ -147,16 +141,13 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
|
||||
foreach (var changer in _changers)
|
||||
{
|
||||
var overrideTarget = context.Observe(changer, c => c.targetRenderer.Get(changer));
|
||||
var overrideRenderer = context.GetComponent<SkinnedMeshRenderer>(overrideTarget);
|
||||
|
||||
var shapes = context.Observe(changer, c => c.Shapes.Select(s => (s.Object.Get(c), s.ShapeName, s.ChangeType, s.Value)).ToList(), Enumerable.SequenceEqual);
|
||||
|
||||
foreach (var (target, name, type, value) in shapes)
|
||||
{
|
||||
if (type != ShapeChangeType.Delete) continue;
|
||||
|
||||
var renderer = overrideRenderer ?? context.GetComponent<SkinnedMeshRenderer>(target);
|
||||
var renderer = context.GetComponent<SkinnedMeshRenderer>(target);
|
||||
if (renderer != original) continue;
|
||||
|
||||
var index = mesh.GetBlendShapeIndex(name);
|
||||
|
@ -32,10 +32,6 @@ namespace nadena.dev.modular_avatar.core
|
||||
|
||||
public class ModularAvatarMaterialSetter : ReactiveComponent
|
||||
{
|
||||
[SerializeField] private AvatarObjectReference m_targetRenderer = new();
|
||||
|
||||
public AvatarObjectReference targetRenderer => m_targetRenderer;
|
||||
|
||||
[SerializeField] private List<MaterialSwitchObject> m_objects = new();
|
||||
|
||||
public List<MaterialSwitchObject> Objects
|
||||
@ -46,7 +42,6 @@ namespace nadena.dev.modular_avatar.core
|
||||
|
||||
public override void ResolveReferences()
|
||||
{
|
||||
m_targetRenderer?.Get(this);
|
||||
foreach (var obj in m_objects)
|
||||
{
|
||||
obj.Object?.Get(this);
|
||||
|
@ -49,11 +49,6 @@ namespace nadena.dev.modular_avatar.core
|
||||
[HelpURL("https://modular-avatar.nadena.dev/docs/reference/shape-changer?lang=auto")]
|
||||
public class ModularAvatarShapeChanger : ReactiveComponent
|
||||
{
|
||||
[SerializeField] [FormerlySerializedAs("targetRenderer")]
|
||||
private AvatarObjectReference m_targetRenderer = new();
|
||||
|
||||
public AvatarObjectReference targetRenderer => m_targetRenderer;
|
||||
|
||||
[SerializeField] [FormerlySerializedAs("Shapes")]
|
||||
private List<ChangedShape> m_shapes = new();
|
||||
|
||||
@ -65,7 +60,6 @@ namespace nadena.dev.modular_avatar.core
|
||||
|
||||
public override void ResolveReferences()
|
||||
{
|
||||
m_targetRenderer?.Get(this);
|
||||
foreach (var shape in m_shapes)
|
||||
{
|
||||
shape.Object?.Get(this);
|
||||
|
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5cbd8e75a444d04e924fad2229100dc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,31 +0,0 @@
|
||||
using modular_avatar_tests;
|
||||
using nadena.dev.modular_avatar.core.editor;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ShapeChangerTests
|
||||
{
|
||||
public class TargetRenderer : TestBase
|
||||
{
|
||||
[Test]
|
||||
public void SetTargetRenderers()
|
||||
{
|
||||
var root = CreatePrefab("TargetRenderer.prefab");
|
||||
AvatarProcessor.ProcessAvatar(root);
|
||||
|
||||
var smrA = root.transform.Find("Mesh_A").GetComponent<SkinnedMeshRenderer>();
|
||||
var smrB = root.transform.Find("Mesh_B").GetComponent<SkinnedMeshRenderer>();
|
||||
var sharedMeshA = smrA.sharedMesh;
|
||||
var sharedMeshB = smrB.sharedMesh;
|
||||
|
||||
Assert.AreEqual(100.0f, smrA.GetBlendShapeWeight(sharedMeshA.GetBlendShapeIndex("key1")), 0.1f);
|
||||
Assert.AreEqual(0.0f, smrB.GetBlendShapeWeight(sharedMeshB.GetBlendShapeIndex("key1")), 0.1f);
|
||||
|
||||
Assert.AreEqual(0.0f, smrA.GetBlendShapeWeight(sharedMeshA.GetBlendShapeIndex("key2")), 0.1f);
|
||||
Assert.AreEqual(100.0f, smrB.GetBlendShapeWeight(sharedMeshB.GetBlendShapeIndex("key2")), 0.1f);
|
||||
|
||||
Assert.AreEqual(100.0f, smrA.GetBlendShapeWeight(sharedMeshA.GetBlendShapeIndex("key3")), 0.1f);
|
||||
Assert.AreEqual(0.0f, smrB.GetBlendShapeWeight(sharedMeshB.GetBlendShapeIndex("key3")), 0.1f);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c352bef3b7d609439ea97ec53cd4736
|
||||
timeCreated: 1719194190
|
@ -1,580 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2598725701317979415
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1861262250770563182}
|
||||
- component: {fileID: 8866671501173891171}
|
||||
m_Layer: 0
|
||||
m_Name: ShapeChanger_TargetRenderer
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1861262250770563182
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2598725701317979415}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8936933457054072598}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8866671501173891171
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2598725701317979415}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2db441f589c3407bb6fb5f02ff8ab541, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_inverted: 0
|
||||
m_targetRenderer:
|
||||
referencePath: Mesh_A
|
||||
targetObject: {fileID: 1811153483672793302}
|
||||
m_shapes:
|
||||
- Object:
|
||||
referencePath:
|
||||
targetObject: {fileID: 0}
|
||||
ShapeName: key1
|
||||
ChangeType: 1
|
||||
Value: 100
|
||||
--- !u!1 &3168344021053006676
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8933180929913504256}
|
||||
- component: {fileID: 2529637401272473252}
|
||||
m_Layer: 0
|
||||
m_Name: Both
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8933180929913504256
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3168344021053006676}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8936933457054072598}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2529637401272473252
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3168344021053006676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2db441f589c3407bb6fb5f02ff8ab541, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_inverted: 0
|
||||
m_targetRenderer:
|
||||
referencePath: Mesh_A
|
||||
targetObject: {fileID: 1811153483672793302}
|
||||
m_shapes:
|
||||
- Object:
|
||||
referencePath: Mesh_B
|
||||
targetObject: {fileID: 4473282960748435466}
|
||||
ShapeName: key3
|
||||
ChangeType: 1
|
||||
Value: 100
|
||||
--- !u!1 &4036354067233245060
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2790466593341208730}
|
||||
- component: {fileID: 2142433132622532481}
|
||||
m_Layer: 0
|
||||
m_Name: ChangedShape_Object
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2790466593341208730
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4036354067233245060}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8936933457054072598}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2142433132622532481
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4036354067233245060}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2db441f589c3407bb6fb5f02ff8ab541, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_inverted: 0
|
||||
m_targetRenderer:
|
||||
referencePath:
|
||||
targetObject: {fileID: 0}
|
||||
m_shapes:
|
||||
- Object:
|
||||
referencePath: Mesh_B
|
||||
targetObject: {fileID: 4473282960748435466}
|
||||
ShapeName: key2
|
||||
ChangeType: 1
|
||||
Value: 100
|
||||
--- !u!1 &6855505756433160176
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8936933457054072598}
|
||||
- component: {fileID: 6580323041906195452}
|
||||
- component: {fileID: 146169679456758165}
|
||||
- component: {fileID: 5146811121193962360}
|
||||
m_Layer: 0
|
||||
m_Name: TargetRenderer
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8936933457054072598
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6855505756433160176}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1.0024816, y: 0.25853348, z: -0.63345385}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1861262250770563182}
|
||||
- {fileID: 2790466593341208730}
|
||||
- {fileID: 8933180929913504256}
|
||||
- {fileID: 1326682634762807916}
|
||||
- {fileID: 3845963625508864688}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!95 &6580323041906195452
|
||||
Animator:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6855505756433160176}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!114 &146169679456758165
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6855505756433160176}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Name:
|
||||
ViewPosition: {x: 0, y: 1.6, z: 0.2}
|
||||
Animations: 0
|
||||
ScaleIPD: 1
|
||||
lipSync: 0
|
||||
lipSyncJawBone: {fileID: 0}
|
||||
lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1}
|
||||
lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1}
|
||||
VisemeSkinnedMesh: {fileID: 0}
|
||||
MouthOpenBlendShapeName: Facial_Blends.Jaw_Down
|
||||
VisemeBlendShapes: []
|
||||
unityVersion:
|
||||
portraitCameraPositionOffset: {x: 0, y: 0, z: 0}
|
||||
portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139}
|
||||
networkIDs: []
|
||||
customExpressions: 0
|
||||
expressionsMenu: {fileID: 0}
|
||||
expressionParameters: {fileID: 0}
|
||||
enableEyeLook: 0
|
||||
customEyeLookSettings:
|
||||
eyeMovement:
|
||||
confidence: 0.5
|
||||
excitement: 0.5
|
||||
leftEye: {fileID: 0}
|
||||
rightEye: {fileID: 0}
|
||||
eyesLookingStraight:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyesLookingUp:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyesLookingDown:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyesLookingLeft:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyesLookingRight:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyelidType: 0
|
||||
upperLeftEyelid: {fileID: 0}
|
||||
upperRightEyelid: {fileID: 0}
|
||||
lowerLeftEyelid: {fileID: 0}
|
||||
lowerRightEyelid: {fileID: 0}
|
||||
eyelidsDefault:
|
||||
upper:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
lower:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyelidsClosed:
|
||||
upper:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
lower:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyelidsLookingUp:
|
||||
upper:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
lower:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyelidsLookingDown:
|
||||
upper:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
lower:
|
||||
linked: 1
|
||||
left: {x: 0, y: 0, z: 0, w: 0}
|
||||
right: {x: 0, y: 0, z: 0, w: 0}
|
||||
eyelidsSkinnedMesh: {fileID: 0}
|
||||
eyelidsBlendshapes:
|
||||
customizeAnimationLayers: 0
|
||||
baseAnimationLayers:
|
||||
- isEnabled: 0
|
||||
type: 0
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
- isEnabled: 0
|
||||
type: 4
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
- isEnabled: 0
|
||||
type: 5
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
specialAnimationLayers:
|
||||
- isEnabled: 0
|
||||
type: 6
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
- isEnabled: 0
|
||||
type: 7
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
- isEnabled: 0
|
||||
type: 8
|
||||
animatorController: {fileID: 0}
|
||||
mask: {fileID: 0}
|
||||
isDefault: 1
|
||||
AnimationPreset: {fileID: 0}
|
||||
animationHashSet: []
|
||||
autoFootsteps: 1
|
||||
autoLocomotion: 1
|
||||
collider_head:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_torso:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_footR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_footL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_handR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_handL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerIndexL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerMiddleL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerRingL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerLittleL:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerIndexR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerMiddleR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerRingR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
collider_fingerLittleR:
|
||||
isMirrored: 1
|
||||
state: 0
|
||||
transform: {fileID: 0}
|
||||
radius: 0
|
||||
height: 0
|
||||
position: {x: 0, y: 0, z: 0}
|
||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
--- !u!114 &5146811121193962360
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6855505756433160176}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
launchedFromSDKPipeline: 0
|
||||
completedSDKPipeline: 0
|
||||
blueprintId:
|
||||
contentType: 0
|
||||
assetBundleUnityVersion:
|
||||
fallbackStatus: 0
|
||||
--- !u!1001 &1577363430154308999
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 8936933457054072598}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -3887185075125053422, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_DirtyAABB
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Mesh_A
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
--- !u!4 &1326682634762807916 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
m_PrefabInstance: {fileID: 1577363430154308999}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &1811153483672793302 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
m_PrefabInstance: {fileID: 1577363430154308999}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &3662872316644877659
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 8936933457054072598}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -3887185075125053422, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_DirtyAABB
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Mesh_B
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
--- !u!4 &3845963625508864688 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
m_PrefabInstance: {fileID: 3662872316644877659}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &4473282960748435466 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: cd28f61dacdc2424d951194ff69ba154, type: 3}
|
||||
m_PrefabInstance: {fileID: 3662872316644877659}
|
||||
m_PrefabAsset: {fileID: 0}
|
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58df708603764094397a824d9c030c9b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
x
Reference in New Issue
Block a user