Upload project files

This commit is contained in:
Misaki
2024-09-16 00:08:10 +09:00
commit 0a4745662a
218 changed files with 13387 additions and 0 deletions

View File

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

View File

@@ -0,0 +1,112 @@
using Misaki.ArtTool;
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(Cloner))]
public class ClonerEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
private Cloner dataSource;
private void OnEnable()
{
dataSource = target as Cloner;
}
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = dataSource;
var effectorListView = visualAsset.Q<ListView>("effectors-listview");
//effectorListView.itemsAdded += EffectorListView_itemsAdded;
effectorListView.itemsRemoved += EffectorListView_itemsRemoved;
effectorListView.Q<ObjectField>().RegisterValueChangedCallback(e =>
{
if (e.newValue is EffectorBase effector)
{
effector.propertyChanged += dataSource.OnPropertyChanged;
}
else if (e.previousValue is EffectorBase oldEffector)
{
oldEffector.propertyChanged -= dataSource.OnPropertyChanged;
}
});
visualAsset.Q<Button>("generate-button").clicked += () =>
{
dataSource.GeneratePoints();
};
visualAsset.Q<Button>("instantiate-button").clicked += () =>
{
dataSource.InstantiateGameObjectOnPoints();
};
visualAsset.Q<Button>("clear-button").clicked += () =>
{
dataSource.Clear();
};
var renderModeDropdown = visualAsset.Q<DropdownField>("render-mode-dropdown");
renderModeDropdown.RegisterValueChangedCallback(e =>
{
if (renderModeDropdown.index == Convert.ToInt32(dataSource.isRenderInstancing))
{
return;
}
dataSource.Clear(false, true);
});
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var cloner = serializedObject.targetObject as Cloner;
if (cloner.autoGenerate)
{
cloner.GeneratePoints();
cloner.InstantiateGameObjectOnPoints();
}
}
//private void EffectorListView_itemsAdded(IEnumerable<int> items)
//{
// foreach (var index in items)
// {
// dataSource.effectors[index].effector.propertyChanged += dataSource.OnPropertyChanged;
// }
//}
private void EffectorListView_itemsRemoved(IEnumerable<int> items)
{
foreach (var index in items)
{
var effector = dataSource.effectors[index].effector;
if (effector == null)
{
return;
}
effector.propertyChanged -= dataSource.OnPropertyChanged;
}
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: 6364cd8b79a48ff46945173d68fc9c0b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: b50bdd76b3da1304680078fd04b276c5,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,84 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.Cloner, Misaki.ArtTool" style="flex-grow: 1;">
<engine:VisualElement>
<engine:Label text="Input Objects" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
<engine:Label text="Object" enable-rich-text="false" style="flex-grow: 1; margin-left: 28px; font-size: 9px; -unity-text-align: middle-left;" />
<engine:Label text="Frequncy" enable-rich-text="false" name="Label" style="width: 50px; font-size: 9px; -unity-text-align: middle-left;" />
</engine:VisualElement>
<engine:ListView reorderable="true" reorder-mode="Animated" show-border="true" show-add-remove-footer="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/InputObjectItemView.uxml?fileID=9197481963319205126&amp;guid=af925948194d82c44a565c55d8ce0de8&amp;type=3#InputObjectItemView" name="input-objects-listview" binding-source-selection-mode="AutoAssign">
<Bindings>
<engine:DataBinding property="itemsSource" data-source-path="inputObjects" binding-mode="TwoWay" />
</Bindings>
</engine:ListView>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement style="flex-grow: 0;">
<engine:Label text="Cloner" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
<engine:EnumField label="Distribution Mode" value="Grid" type="Misaki.ArtTool.DistributionMode, Misaki.ArtTool" name="distribution-mode">
<Bindings>
<engine:DataBinding property="value" data-source-path="distributionMode" binding-mode="TwoWay" />
</Bindings>
</engine:EnumField>
<engine:DropdownField label="Clone Mode" index="0" choices="Iterate,Random" tooltip="Need to regenerate the points when changing the clone mode">
<Bindings>
<engine:DataBinding property="index" data-source-path="isRandomDistribution" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:UnsignedIntegerField label="Seed" value="123456" tooltip="Need to regenerate the points to let seed work properly">
<Bindings>
<engine:DataBinding property="value" data-source-path="seed" binding-mode="TwoWay" />
<engine:DataBinding property="style.display" data-source-path="isRandomDistribution" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:UnsignedIntegerField>
<engine:DropdownField label="Auto Generate" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="autoGenerate" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:DropdownField label="Render Mode" choices="Gameobject,Instancing" index="0" name="render-mode-dropdown">
<Bindings>
<engine:DataBinding property="index" data-source-path="isRenderInstancing" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement style="flex-grow: 0;">
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
<editor:PropertyField name="spline-parameter-property" binding-path="splineDistributionSetting" />
<editor:PropertyField name="linear-parameter-property" binding-path="linearDistributionSetting" />
<editor:PropertyField name="grid-parameter-property" binding-path="gridDistributionSetting" />
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Effectors" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:ListView reorderable="true" reorder-mode="Animated" show-border="true" show-add-remove-footer="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/EffectorItemTemplate.uxml?fileID=9197481963319205126&amp;guid=9a72cc6a25b7e104991d25d5c2458b81&amp;type=3#EffectorItemTemplate" name="effectors-listview" binding-source-selection-mode="AutoAssign">
<Bindings>
<engine:DataBinding property="itemsSource" data-source-path="effectors" binding-mode="TwoWay" />
</Bindings>
</engine:ListView>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement style="flex-grow: 0;">
<engine:Label text="Debug" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
<engine:EnumField label="Debug Mode" value="Center" type="Misaki.ArtTool.DebugMode, Misaki.ArtTool">
<Bindings>
<engine:DataBinding property="value" data-source-path="debugMode" binding-mode="TwoWay" />
</Bindings>
</engine:EnumField>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Command" class="SubHeader" />
<engine:Button text="Generate Points" name="generate-button" />
<engine:Button text="Instantiate GameObject" name="instantiate-button" />
<engine:Button text="Clear" name="clear-button" />
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b50bdd76b3da1304680078fd04b276c5
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,24 @@
.SubHeader {
margin-bottom: 6px;
-unity-font-style: bold;
font-size: 12px;
margin-top: 8px;
}
.PropertyContainer {
flex-grow: 0;
margin-left: 8px;
}
.Header {
-unity-font-style: bold;
margin-top: 16px;
margin-bottom: 12px;
font-size: 14px;
}
.SmallHeader {
margin-top: 6px;
margin-bottom: 4px;
-unity-font-style: bold;
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 216b892cd94cc624da01dc4947facdcb
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
disableValidation: 0

View File

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

View File

@@ -0,0 +1,34 @@
using Misaki.ArtTool;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(PlainEffector))]
public class PlainEffectorEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = serializedObject.targetObject;
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var plainEffector = serializedObject.targetObject as PlainEffector;
plainEffector.propertyChanged.Invoke(plainEffector, null);
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: caa823f123cfb7349a1e8a1529978383
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: 5b5f086164d34b04d88b57abdb546075,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,102 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.PlainEffector, Misaki.ArtTool" style="flex-grow: 1;">
<engine:VisualElement>
<engine:Label text="Effector" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:EnumField label="Transform Space" value="Center" type="Misaki.ArtTool.TransformSpace, Misaki.ArtTool">
<Bindings>
<engine:DataBinding property="value" data-source-path="transformSpace" binding-mode="TwoWay" />
</Bindings>
</engine:EnumField>
<engine:DropdownField label="Position" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnablePosition" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:Vector3Field label="Position Offset">
<Bindings>
<engine:DataBinding property="value" data-source-path="position" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
</Bindings>
</engine:Vector3Field>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnablePosition" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
<engine:DropdownField label="Rotation" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnableRotation" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:Vector3Field label="Rotation Offset">
<Bindings>
<engine:DataBinding property="value" data-source-path="rotation" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
</Bindings>
</engine:Vector3Field>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnableRotation" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
<engine:DropdownField label="Scale" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnableScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:DropdownField label="Absolute Scale" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="isAbsoluteScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:DropdownField label="Uniform Scale" choices="Disable,Enable" index="1">
<Bindings>
<engine:DataBinding property="index" data-source-path="isUniformScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:Vector3Field label="Scale Offset" value="1,1,1">
<Bindings>
<engine:DataBinding property="value" data-source-path="scale" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="InverseBoolToDisplayConverter" />
</Bindings>
</engine:Vector3Field>
<engine:FloatField label="Scale Offset" value="1">
<Bindings>
<engine:DataBinding property="value" data-source-path="uniformScale" binding-mode="TwoWay" />
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:FloatField>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnableScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Fields" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
</engine:VisualElement>
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&amp;guid=d432ee1ae85c33d4abf54b61fc8a45f5&amp;type=3#FieldItemTemplate" fixed-item-height="45">
<Bindings>
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
</Bindings>
</engine:ListView>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 5b5f086164d34b04d88b57abdb546075
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,34 @@
using Misaki.ArtTool;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(PushApartEffector))]
public class PushApartEffectorEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = serializedObject.targetObject;
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var plainEffector = serializedObject.targetObject as PushApartEffector;
plainEffector.propertyChanged.Invoke(plainEffector, null);
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: 4e65222f2c1f48f47b95e703d8e55bae
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: 03bc880fcc4c82046a75cd81290cd1bd,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,45 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.PushApartEffector, Misaki.ArtTool" style="flex-grow: 1;">
<engine:VisualElement>
<engine:Label text="Effector" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:FloatField label="Radius" value="1">
<Bindings>
<engine:DataBinding property="value" data-source-path="radius" binding-mode="TwoWay" />
</Bindings>
</engine:FloatField>
<engine:UnsignedIntegerField label="Iteration" value="10">
<Bindings>
<engine:DataBinding property="value" data-source-path="iteration" binding-mode="TwoWay" />
</Bindings>
</engine:UnsignedIntegerField>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Fields" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
</engine:VisualElement>
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&amp;guid=d432ee1ae85c33d4abf54b61fc8a45f5&amp;type=3#FieldItemTemplate" fixed-item-height="45">
<Bindings>
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
</Bindings>
</engine:ListView>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 03bc880fcc4c82046a75cd81290cd1bd
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,34 @@
using Misaki.ArtTool;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(RandomEffector))]
public class RandomEffectorEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = serializedObject.targetObject;
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var randomEffector = serializedObject.targetObject as RandomEffector;
randomEffector.propertyChanged.Invoke(randomEffector, null);
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: ecf4a3c8fddc5574d90d38d6db2e28de
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: 4e9d426ec3a18a84aa2ca50932af5984,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,117 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.RandomEffector, Misaki.ArtTool" style="flex-grow: 1;">
<engine:VisualElement>
<engine:Label text="Effector" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:Vector2Field label="Min Max" value="-1,1">
<Bindings>
<engine:DataBinding property="value" data-source-path="minMax" binding-mode="TwoWay" source-to-ui-converters="Float2ToVector2Converter" ui-to-source-converters="Float2ToVector2Converter" />
</Bindings>
</engine:Vector2Field>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:DropdownField label="Synchronized" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="synchronized" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:UnsignedIntegerField label="Seed" value="123456" tooltip="Need to regenerate the points to let seed work properly">
<Bindings>
<engine:DataBinding property="value" data-source-path="seed" binding-mode="TwoWay" />
</Bindings>
</engine:UnsignedIntegerField>
<engine:EnumField label="Transform Space" value="Center" type="Misaki.ArtTool.TransformSpace, Misaki.ArtTool">
<Bindings>
<engine:DataBinding property="value" data-source-path="transformSpace" binding-mode="TwoWay" />
</Bindings>
</engine:EnumField>
<engine:DropdownField label="Position" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnablePosition" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:Vector3Field label="Position Min Max">
<Bindings>
<engine:DataBinding property="value" data-source-path="positionMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
</Bindings>
</engine:Vector3Field>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnablePosition" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
<engine:DropdownField label="Rotation" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnableRotation" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:Vector3Field label="Rotation Min Max">
<Bindings>
<engine:DataBinding property="value" data-source-path="rotationMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
</Bindings>
</engine:Vector3Field>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnableRotation" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
<engine:DropdownField label="Scale" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="isEnableScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:DropdownField label="Absolute Scale" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="isAbsoluteScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:DropdownField label="Uniform Scale" choices="Disable,Enable" index="1">
<Bindings>
<engine:DataBinding property="index" data-source-path="isUniformScale" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:Vector3Field label="Scale Min Max" value="1,1,1">
<Bindings>
<engine:DataBinding property="value" data-source-path="scaleMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="InverseBoolToDisplayConverter" />
</Bindings>
</engine:Vector3Field>
<engine:FloatField label="Scale Min Max" value="1">
<Bindings>
<engine:DataBinding property="value" data-source-path="uniformScaleMinMax" binding-mode="TwoWay" />
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:FloatField>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="isEnableScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement>
<engine:Label text="Fields" class="SubHeader" />
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
</engine:VisualElement>
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&amp;guid=d432ee1ae85c33d4abf54b61fc8a45f5&amp;type=3#FieldItemTemplate" fixed-item-height="45">
<Bindings>
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
</Bindings>
</engine:ListView>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 4e9d426ec3a18a84aa2ca50932af5984
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

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

View File

@@ -0,0 +1,56 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.LinearField, Misaki.ArtTool" style="flex-grow: 1;">
<engine:Label text="Remapping" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:DropdownField label="State" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="remappingSetting.enable" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement>
<Misaki.ArtToolEditor.RemappingGraph style="flex-grow: 1;">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting" binding-mode="ToTarget" />
</Bindings>
</Misaki.ArtToolEditor.RemappingGraph>
<engine:Slider label="Strength" value="42" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.strength" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:DropdownField label="Invert" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="remappingSetting.invert" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:Slider label="Inner Offset" value="0" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.innerOffset" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:Slider label="Min" value="0" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.min" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:Slider label="Max" value="1" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.max" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="remappingSetting.enable" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
</engine:VisualElement>
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:FloatField label="Length" value="10">
<Bindings>
<engine:DataBinding property="value" data-source-path="length" binding-mode="TwoWay" />
</Bindings>
</engine:FloatField>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 50fa3a5370c15ec4abe4b7225a42c090
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,41 @@
using Misaki.ArtTool;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(LinearField))]
public class LinearFieldEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
private LinearField dataSource;
private void OnEnable()
{
dataSource = target as LinearField;
}
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = serializedObject.targetObject;
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var linearField = serializedObject.targetObject as LinearField;
linearField.propertyChanged.Invoke(linearField, null);
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: e1f02bdd18275b44c9f98fdf199ddf54
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: 50fa3a5370c15ec4abe4b7225a42c090,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,56 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&amp;guid=216b892cd94cc624da01dc4947facdcb&amp;type=3#ClonerEditorStyle" />
<engine:VisualElement data-source-type="Misaki.ArtTool.SphereField, Misaki.ArtTool" style="flex-grow: 1;">
<engine:Label text="Remapping" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:DropdownField label="State" choices="Disable,Enable" index="0" class="SmallHeader">
<Bindings>
<engine:DataBinding property="index" data-source-path="remappingSetting.enable" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:VisualElement>
<Misaki.ArtToolEditor.RemappingGraph style="flex-grow: 1;">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting" binding-mode="ToTarget" />
</Bindings>
</Misaki.ArtToolEditor.RemappingGraph>
<engine:Slider label="Strength" value="42" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.strength" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:DropdownField label="Invert" choices="Disable,Enable" index="0">
<Bindings>
<engine:DataBinding property="index" data-source-path="remappingSetting.invert" binding-mode="TwoWay" />
</Bindings>
</engine:DropdownField>
<engine:Slider label="Inner Offset" value="0" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.innerOffset" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:Slider label="Min" value="0" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.min" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<engine:Slider label="Max" value="1" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="remappingSetting.max" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
<Bindings>
<engine:DataBinding property="style.display" data-source-path="remappingSetting.enable" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
</Bindings>
</engine:VisualElement>
</engine:VisualElement>
<engine:Label text="Parameter" class="SubHeader" />
<engine:VisualElement class="PropertyContainer">
<engine:FloatField label="Radius" value="10">
<Bindings>
<engine:DataBinding property="value" data-source-path="radius" binding-mode="TwoWay" />
</Bindings>
</engine:FloatField>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: bcdf9a803fec6734d9d74dfaefdb7cf8
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,49 @@
using Misaki.ArtTool;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Misaki.ArtToolEditor
{
[CustomEditor(typeof(SphereField))]
public class SphereFieldEditor : Editor
{
[SerializeField]
private VisualTreeAsset visualTreeAsset = default;
private SphereField dataSource;
private void OnEnable()
{
dataSource = target as SphereField;
}
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var visualAsset = visualTreeAsset.Instantiate();
visualAsset.dataSource = serializedObject.targetObject;
root.Add(visualAsset);
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
return root;
}
private void OnValueChanged(SerializedObject serializedObject)
{
var linearField = serializedObject.targetObject as SphereField;
linearField.propertyChanged.Invoke(linearField, null);
}
private void OnSceneGUI()
{
Handles.matrix = dataSource.transform.localToWorldMatrix;
Handles.color = Color.cyan;
dataSource.radius = Handles.RadiusHandle(Quaternion.identity, Vector3.zero, dataSource.radius, true);
}
}
}

View File

@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: 35154d63b3f536f408b6185949d9812a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences:
- visualTreeAsset: {fileID: 9197481963319205126, guid: bcdf9a803fec6734d9d74dfaefdb7cf8,
type: 3}
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -0,0 +1,14 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<engine:VisualElement data-source-type="Misaki.ArtTool.EffectorData, Misaki.ArtTool" style="flex-direction: row;">
<engine:Toggle style="margin-top: 4px; margin-right: 4px; margin-bottom: 4px; margin-left: 4px;">
<Bindings>
<engine:DataBinding property="value" data-source-path="enable" binding-mode="TwoWay" />
</Bindings>
</engine:Toggle>
<editor:ObjectField type="Misaki.ArtTool.EffectorBase, Misaki.ArtTool" style="flex-grow: 1;">
<Bindings>
<engine:DataBinding property="value" data-source-path="effector" binding-mode="TwoWay" />
</Bindings>
</editor:ObjectField>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9a72cc6a25b7e104991d25d5c2458b81
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,28 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<engine:VisualElement data-source-type="Misaki.ArtTool.FieldData, Misaki.ArtTool" style="flex-direction: row;">
<engine:Toggle style="margin-top: 4px; margin-right: 4px; margin-bottom: 4px; margin-left: 4px;">
<Bindings>
<engine:DataBinding property="value" data-source-path="enable" binding-mode="TwoWay" />
</Bindings>
</engine:Toggle>
<engine:VisualElement style="flex-grow: 1;">
<engine:VisualElement style="flex-direction: row;">
<editor:ObjectField type="Misaki.ArtTool.FieldBase, Misaki.ArtTool" style="flex-grow: 1;">
<Bindings>
<engine:DataBinding property="value" data-source-path="field" binding-mode="TwoWay" />
</Bindings>
</editor:ObjectField>
<engine:EnumField value="Center" type="Misaki.ArtTool.BlendingMode, Misaki.ArtTool" style="width: 100px;">
<Bindings>
<engine:DataBinding property="value" data-source-path="blending" binding-mode="TwoWay" />
</Bindings>
</engine:EnumField>
</engine:VisualElement>
<engine:Slider value="42" high-value="1" show-input-field="true">
<Bindings>
<engine:DataBinding property="value" data-source-path="opacity" binding-mode="TwoWay" />
</Bindings>
</engine:Slider>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: d432ee1ae85c33d4abf54b61fc8a45f5
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}

View File

@@ -0,0 +1,14 @@
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
<engine:VisualElement data-source-type="Misaki.ArtTool.InputObjectData, Misaki.ArtTool" style="flex-direction: row;">
<editor:ObjectField type="UnityEngine.GameObject, UnityEngine.CoreModule" style="flex-grow: 1;">
<Bindings>
<engine:DataBinding property="value" data-source-path="gameObject" binding-mode="TwoWay" />
</Bindings>
</editor:ObjectField>
<engine:UnsignedIntegerField value="1" style="width: 50px;">
<Bindings>
<engine:DataBinding property="value" data-source-path="frequency" binding-mode="TwoWay" />
</Bindings>
</engine:UnsignedIntegerField>
</engine:VisualElement>
</engine:UXML>

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: af925948194d82c44a565c55d8ce0de8
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}