mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Initial commit
This commit is contained in:
commit
3c7cc0c973
8391 changed files with 704313 additions and 0 deletions
|
@ -0,0 +1,131 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace UnityEditor.U2D.Animation
|
||||
{
|
||||
internal class SelectListView : ListView
|
||||
{
|
||||
public class CustomUxmlFactory : UxmlFactory<SelectListView, UxmlTraits> {}
|
||||
|
||||
public new void AddToSelection(int index)
|
||||
{
|
||||
base.AddToSelection(index);
|
||||
}
|
||||
|
||||
public new void ClearSelection()
|
||||
{
|
||||
base.ClearSelection();
|
||||
}
|
||||
}
|
||||
|
||||
internal class SpriteBoneInfluenceListWidget : VisualElement
|
||||
{
|
||||
public class CustomUxmlFactory : UxmlFactory<SpriteBoneInfluenceListWidget, CustomUxmlTraits> {}
|
||||
public class CustomUxmlTraits : UxmlTraits {}
|
||||
|
||||
private List<BoneCache> m_BoneInfluences;
|
||||
private SelectListView m_ListView;
|
||||
bool m_IgnoreSelectionChange = false;
|
||||
private Button m_AddButton;
|
||||
private Button m_RemoveButton;
|
||||
public Action onAddBone = () => {};
|
||||
public Action onRemoveBone = () => {};
|
||||
public Action<IEnumerable<BoneCache>> onReordered = _ => {};
|
||||
public Action<IEnumerable<BoneCache>> onSelectionChanged = (s) => {};
|
||||
public Func<SpriteBoneInflueceToolController> GetController = () => null;
|
||||
|
||||
public SpriteBoneInfluenceListWidget()
|
||||
{
|
||||
var visualTree = ResourceLoader.Load<VisualTreeAsset>("SkinningModule/SpriteBoneInfluenceListWidget.uxml");
|
||||
var ve = visualTree.CloneTree().Q("Container");
|
||||
ve.styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/SpriteBoneInfluenceListWidgetStyle.uss"));
|
||||
if (EditorGUIUtility.isProSkin)
|
||||
AddToClassList("Dark");
|
||||
this.Add(ve);
|
||||
BindElements();
|
||||
}
|
||||
|
||||
private void BindElements()
|
||||
{
|
||||
m_ListView = this.Q<SelectListView>();
|
||||
m_ListView.selectionType = SelectionType.Multiple;
|
||||
m_ListView.itemsSource = m_BoneInfluences;
|
||||
m_ListView.makeItem = () =>
|
||||
{
|
||||
var label = new Label()
|
||||
{
|
||||
name = "ListRow"
|
||||
};
|
||||
return label;
|
||||
};
|
||||
m_ListView.bindItem = (e, index) =>
|
||||
{
|
||||
if (m_BoneInfluences[index] == null)
|
||||
return;
|
||||
|
||||
(e as Label).text = m_BoneInfluences[index].name;
|
||||
if (index % 2 == 0)
|
||||
{
|
||||
e.RemoveFromClassList("ListRowOddColor");
|
||||
e.AddToClassList("ListRowEvenColor");
|
||||
}
|
||||
else
|
||||
{
|
||||
e.RemoveFromClassList("ListRowEvenColor");
|
||||
e.AddToClassList("ListRowOddColor");
|
||||
}
|
||||
};
|
||||
|
||||
m_ListView.onSelectionChanged += OnListViewSelectionChanged;
|
||||
m_AddButton = this.Q<Button>("AddButton");
|
||||
m_AddButton.clickable.clicked += OnAddButtonClick;
|
||||
m_RemoveButton = this.Q<Button>("RemoveButton");
|
||||
m_RemoveButton.clickable.clicked += OnRemoveButtonClick;
|
||||
this.RegisterCallback<DragPerformEvent>(x => onReordered(m_BoneInfluences) );
|
||||
}
|
||||
|
||||
private void OnListViewSelectionChanged(List<object> o)
|
||||
{
|
||||
if (m_IgnoreSelectionChange)
|
||||
return;
|
||||
|
||||
var selectedBones = o.OfType<BoneCache>().ToArray();
|
||||
|
||||
onSelectionChanged(selectedBones);
|
||||
}
|
||||
|
||||
private void OnAddButtonClick()
|
||||
{
|
||||
onAddBone();
|
||||
}
|
||||
|
||||
private void OnRemoveButtonClick()
|
||||
{
|
||||
onRemoveBone();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
m_BoneInfluences = GetController().GetSelectedSpriteBoneInfluence().ToList();
|
||||
m_ListView.itemsSource = m_BoneInfluences;
|
||||
m_ListView.Refresh();
|
||||
}
|
||||
|
||||
internal void OnBoneSelectionChanged()
|
||||
{
|
||||
var selectedBones = GetController().GetSelectedBoneForList(m_BoneInfluences);
|
||||
m_IgnoreSelectionChange = true;
|
||||
m_ListView.ClearSelection();
|
||||
foreach (var bone in selectedBones)
|
||||
{
|
||||
m_ListView.AddToSelection(bone);
|
||||
}
|
||||
m_IgnoreSelectionChange = false;
|
||||
m_AddButton.SetEnabled(GetController().ShouldEnableAddButton(m_BoneInfluences));
|
||||
m_RemoveButton.SetEnabled(GetController().InCharacterMode() && m_ListView.selectedIndex >= 0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6111684d389380840a9e782a0936a829
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,323 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor.U2D.Layout;
|
||||
|
||||
namespace UnityEditor.U2D.Animation
|
||||
{
|
||||
internal class SpriteBoneInflueceToolController
|
||||
{
|
||||
SkinningEvents m_Events;
|
||||
ISpriteBoneInfluenceToolModel m_Model;
|
||||
public SpriteBoneInflueceToolController(ISpriteBoneInfluenceToolModel model, SkinningEvents events)
|
||||
{
|
||||
m_Events = events;
|
||||
m_Model = model;
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
m_Events.selectedSpriteChanged.AddListener(OnSpriteSelectionChanged);
|
||||
m_Events.boneSelectionChanged.AddListener(OnBoneSelectionChanged);
|
||||
m_Events.boneNameChanged.AddListener(OnBoneNameChanged);
|
||||
m_Events.skeletonTopologyChanged.AddListener(OnSkeletonTopologyChanged);
|
||||
m_Events.meshChanged.AddListener(OnMeshChanged);
|
||||
ShowHideView(true);
|
||||
OnBoneSelectionChanged();
|
||||
}
|
||||
|
||||
public void Deactivate()
|
||||
{
|
||||
m_Events.selectedSpriteChanged.RemoveListener(OnSpriteSelectionChanged);
|
||||
m_Events.boneSelectionChanged.RemoveListener(OnBoneSelectionChanged);
|
||||
m_Events.boneNameChanged.RemoveListener(OnBoneNameChanged);
|
||||
m_Events.skeletonTopologyChanged.RemoveListener(OnSkeletonTopologyChanged);
|
||||
m_Events.meshChanged.RemoveListener(OnMeshChanged);
|
||||
ShowHideView(false);
|
||||
}
|
||||
|
||||
private void OnMeshChanged(MeshCache mesh)
|
||||
{
|
||||
if (m_Model.view.visible)
|
||||
m_Model.view.OnMeshChanged();
|
||||
}
|
||||
|
||||
private void OnSpriteSelectionChanged(SpriteCache sprite)
|
||||
{
|
||||
if (m_Model.view.visible)
|
||||
{
|
||||
m_Model.view.OnSpriteSelectionChanged();
|
||||
SetViewHeaderText();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBoneSelectionChanged()
|
||||
{
|
||||
if (m_Model.view.visible)
|
||||
m_Model.view.OnBoneSelectionChanged();
|
||||
}
|
||||
|
||||
private void OnBoneNameChanged(BoneCache bone)
|
||||
{
|
||||
if (m_Model.view.visible)
|
||||
{
|
||||
m_Model.view.OnSkeletonChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSkeletonTopologyChanged(SkeletonCache skeleton)
|
||||
{
|
||||
if (m_Model.view.visible)
|
||||
m_Model.view.OnSkeletonChanged();
|
||||
}
|
||||
|
||||
public void OnViewCreated()
|
||||
{
|
||||
m_Model.view.onAddBone += AddSelectedBoneInfluencetoSprite;
|
||||
m_Model.view.onRemoveBone += RemoveSelectedBoneInfluenceFromSprite;
|
||||
m_Model.view.onReordered += OnReorderBoneInfluenceFromSprite;
|
||||
m_Model.view.onSelectionChanged += SelectBones;
|
||||
m_Model.view.SetController(this);
|
||||
ShowHideView(false);
|
||||
}
|
||||
|
||||
private void AddSelectedBoneInfluencetoSprite()
|
||||
{
|
||||
var character = m_Model.characterSkeleton;
|
||||
|
||||
if (character == null)
|
||||
return;
|
||||
|
||||
var characterPart = m_Model.GetSpriteCharacterPart(m_Model.selectedSprite);
|
||||
var selectedBones = m_Model.selectedBones;
|
||||
var characterBones = characterPart.bones.ToList();
|
||||
|
||||
foreach (var bone in selectedBones)
|
||||
{
|
||||
if (!characterBones.Contains(bone))
|
||||
characterBones.Add(bone);
|
||||
}
|
||||
|
||||
using (m_Model.UndoScope(TextContent.addBoneInfluence))
|
||||
{
|
||||
characterPart.bones = characterBones.ToArray();
|
||||
m_Events.characterPartChanged.Invoke(characterPart);
|
||||
m_Model.view.OnSkeletonChanged();
|
||||
m_Model.view.OnBoneSelectionChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveSelectedBoneInfluenceFromSprite()
|
||||
{
|
||||
var character = m_Model.characterSkeleton;
|
||||
|
||||
if (character == null)
|
||||
return;
|
||||
|
||||
var characterPart = m_Model.GetSpriteCharacterPart(m_Model.selectedSprite);
|
||||
var selectedBones = m_Model.selectedBones;
|
||||
var characterBones = characterPart.bones.ToList();
|
||||
|
||||
characterBones.RemoveAll(b => selectedBones.Contains(b));
|
||||
|
||||
using (m_Model.UndoScope(TextContent.removeBoneInfluence))
|
||||
{
|
||||
characterPart.bones = characterBones.ToArray();
|
||||
m_Events.characterPartChanged.Invoke(characterPart);
|
||||
|
||||
characterPart.sprite.SmoothFill();
|
||||
m_Events.meshChanged.Invoke(characterPart.sprite.GetMesh());
|
||||
|
||||
m_Model.view.OnSkeletonChanged();
|
||||
m_Model.view.OnBoneSelectionChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnReorderBoneInfluenceFromSprite(IEnumerable<BoneCache> boneCache)
|
||||
{
|
||||
var character = m_Model.characterSkeleton;
|
||||
|
||||
if (character != null)
|
||||
{
|
||||
var characterPart = m_Model.GetSpriteCharacterPart(m_Model.selectedSprite);
|
||||
using (m_Model.UndoScope(TextContent.reorderBoneInfluence))
|
||||
{
|
||||
characterPart.bones = boneCache.ToArray();
|
||||
m_Events.characterPartChanged.Invoke(characterPart);
|
||||
m_Model.view.OnSkeletonChanged();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (m_Model.UndoScope(TextContent.reorderBoneInfluence))
|
||||
{
|
||||
m_Model.selectedSprite.GetSkeleton().ReorderBones(boneCache);
|
||||
m_Events.skeletonTopologyChanged.Invoke(m_Model.selectedSprite.GetSkeleton());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SelectBones(IEnumerable<BoneCache> selectedBones)
|
||||
{
|
||||
using (m_Model.UndoScope(TextContent.boneSelection))
|
||||
{
|
||||
m_Model.selectedBones = selectedBones;
|
||||
m_Events.boneSelectionChanged.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowHideView(bool show)
|
||||
{
|
||||
m_Model.view.SetHiddenFromLayout(!show);
|
||||
if (show)
|
||||
{
|
||||
m_Model.view.OnSpriteSelectionChanged();
|
||||
SetViewHeaderText();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetViewHeaderText()
|
||||
{
|
||||
var headerText = m_Model.selectedSprite != null ? m_Model.selectedSprite.name : TextContent.noSpriteSelected;
|
||||
m_Model.view.headerText = headerText;
|
||||
}
|
||||
|
||||
public BoneCache[] GetSelectedSpriteBoneInfluence()
|
||||
{
|
||||
var selectedSprite = m_Model.selectedSprite;
|
||||
|
||||
if (selectedSprite != null)
|
||||
{
|
||||
if (m_Model.hasCharacter)
|
||||
{
|
||||
var characterPart = m_Model.GetSpriteCharacterPart(selectedSprite);
|
||||
return characterPart.bones.ToArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
return selectedSprite.GetSkeleton().bones;
|
||||
}
|
||||
}
|
||||
return new BoneCache[0];
|
||||
}
|
||||
|
||||
public int[] GetSelectedBoneForList(IEnumerable<BoneCache> bones)
|
||||
{
|
||||
var selectedBones = m_Model.selectedBones;
|
||||
var spriteBones = GetSelectedSpriteBoneInfluence();
|
||||
var result = new List<int>();
|
||||
foreach (var bone in selectedBones)
|
||||
{
|
||||
var index = Array.IndexOf(spriteBones, bone);
|
||||
if (index >= 0)
|
||||
result.Add(index);
|
||||
}
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
public bool ShouldEnableAddButton(IEnumerable<BoneCache> bones)
|
||||
{
|
||||
if (InCharacterMode())
|
||||
{
|
||||
var hasSelectedSprite = m_Model.selectedSprite != null;
|
||||
var selectedBones = m_Model.selectedBones;
|
||||
return hasSelectedSprite && selectedBones.FirstOrDefault(x => !bones.Contains(x)) != null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool InCharacterMode()
|
||||
{
|
||||
return m_Model.hasCharacter && m_Model.skinningMode == SkinningMode.Character;
|
||||
}
|
||||
}
|
||||
|
||||
internal interface ISpriteBoneInfluenceToolModel
|
||||
{
|
||||
ISpriteBoneInfluenceWindow view { get; }
|
||||
IEnumerable<BoneCache> selectedBones { get; set; }
|
||||
SpriteCache selectedSprite { get; }
|
||||
bool hasCharacter { get; }
|
||||
SkinningMode skinningMode { get; }
|
||||
SkeletonCache characterSkeleton { get; }
|
||||
UndoScope UndoScope(string description);
|
||||
CharacterPartCache GetSpriteCharacterPart(SpriteCache sprite);
|
||||
}
|
||||
|
||||
internal class SpriteBoneInfluenceTool : BaseTool, ISpriteBoneInfluenceToolModel
|
||||
{
|
||||
SpriteBoneInflueceToolController m_Controller;
|
||||
private MeshPreviewBehaviour m_MeshPreviewBehaviour = new MeshPreviewBehaviour();
|
||||
private SpriteBoneInfluenceWindow m_View;
|
||||
|
||||
public SkeletonTool skeletonTool { set; private get; }
|
||||
public override IMeshPreviewBehaviour previewBehaviour
|
||||
{
|
||||
get { return m_MeshPreviewBehaviour; }
|
||||
}
|
||||
|
||||
internal override void OnCreate()
|
||||
{
|
||||
m_Controller = new SpriteBoneInflueceToolController(this, skinningCache.events);
|
||||
}
|
||||
|
||||
ISpriteBoneInfluenceWindow ISpriteBoneInfluenceToolModel.view {get { return m_View; } }
|
||||
|
||||
IEnumerable<BoneCache> ISpriteBoneInfluenceToolModel.selectedBones
|
||||
{
|
||||
get { return skinningCache.skeletonSelection.elements; }
|
||||
set { skinningCache.skeletonSelection.elements = value.ToArray(); }
|
||||
}
|
||||
SpriteCache ISpriteBoneInfluenceToolModel.selectedSprite { get { return skinningCache.selectedSprite; } }
|
||||
bool ISpriteBoneInfluenceToolModel.hasCharacter { get { return skinningCache.hasCharacter; } }
|
||||
SkinningMode ISpriteBoneInfluenceToolModel.skinningMode { get { return skinningCache.mode; } }
|
||||
SkeletonCache ISpriteBoneInfluenceToolModel.characterSkeleton { get { return skinningCache.character != null ? skinningCache.character.skeleton : null; } }
|
||||
|
||||
UndoScope ISpriteBoneInfluenceToolModel.UndoScope(string description)
|
||||
{
|
||||
return skinningCache.UndoScope(description);
|
||||
}
|
||||
|
||||
protected override void OnActivate()
|
||||
{
|
||||
m_Controller.Activate();
|
||||
if (skeletonTool != null)
|
||||
skeletonTool.Activate();
|
||||
}
|
||||
|
||||
protected override void OnDeactivate()
|
||||
{
|
||||
m_Controller.Deactivate();
|
||||
if (skeletonTool != null)
|
||||
skeletonTool.Deactivate();
|
||||
}
|
||||
|
||||
public override void Initialize(LayoutOverlay layout)
|
||||
{
|
||||
if (m_View == null)
|
||||
{
|
||||
m_View = SpriteBoneInfluenceWindow.CreateFromUXML();
|
||||
m_Controller.OnViewCreated();
|
||||
}
|
||||
|
||||
layout.rightOverlay.Add(m_View);
|
||||
}
|
||||
|
||||
protected override void OnGUI()
|
||||
{
|
||||
m_MeshPreviewBehaviour.showWeightMap = true;
|
||||
m_MeshPreviewBehaviour.overlaySelected = true;
|
||||
m_MeshPreviewBehaviour.drawWireframe = true;
|
||||
|
||||
skeletonTool.skeletonStyle = SkeletonStyles.WeightMap;
|
||||
skeletonTool.mode = SkeletonMode.EditPose;
|
||||
skeletonTool.editBindPose = false;
|
||||
skeletonTool.DoGUI();
|
||||
}
|
||||
|
||||
public CharacterPartCache GetSpriteCharacterPart(SpriteCache sprite)
|
||||
{
|
||||
return sprite.GetCharacterPart();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f7836643c0cc9724c94363180ebebd47
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,106 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace UnityEditor.U2D.Animation
|
||||
{
|
||||
using PopupWindow = UnityEngine.UIElements.PopupWindow;
|
||||
|
||||
internal interface ISpriteBoneInfluenceWindow
|
||||
{
|
||||
string headerText { get; set; }
|
||||
void SetHiddenFromLayout(bool hide);
|
||||
void OnSpriteSelectionChanged();
|
||||
void OnSkeletonChanged();
|
||||
void OnMeshChanged();
|
||||
bool visible { get; }
|
||||
void OnBoneSelectionChanged();
|
||||
event Action onAddBone;
|
||||
event Action onRemoveBone;
|
||||
event Action<IEnumerable<BoneCache>> onReordered;
|
||||
event Action<IEnumerable<BoneCache>> onSelectionChanged;
|
||||
void SetController(SpriteBoneInflueceToolController controller);
|
||||
}
|
||||
|
||||
internal class SpriteBoneInfluenceWindow : VisualElement, ISpriteBoneInfluenceWindow
|
||||
{
|
||||
public class CustomUxmlFactory : UxmlFactory<SpriteBoneInfluenceWindow, UxmlTraits> {}
|
||||
|
||||
private SpriteBoneInfluenceListWidget m_InfluencesList;
|
||||
private PopupWindow m_HeaderLabel;
|
||||
SpriteBoneInflueceToolController m_Controller;
|
||||
|
||||
public event Action onAddBone = () => {};
|
||||
public event Action onRemoveBone = () => {};
|
||||
public event Action<IEnumerable<BoneCache>> onReordered = _ => {};
|
||||
public event Action<IEnumerable<BoneCache>> onSelectionChanged = _ => {};
|
||||
|
||||
public string headerText
|
||||
{
|
||||
get { return m_HeaderLabel.text; }
|
||||
set { m_HeaderLabel.text = value; }
|
||||
}
|
||||
|
||||
static internal SpriteBoneInfluenceWindow CreateFromUXML()
|
||||
{
|
||||
var visualTree = ResourceLoader.Load<VisualTreeAsset>("SkinningModule/SpriteBoneInfluenceWindow.uxml");
|
||||
var ve = visualTree.CloneTree().Q("SpriteBoneInfluenceWindow") as SpriteBoneInfluenceWindow;
|
||||
ve.BindElements();
|
||||
return ve;
|
||||
}
|
||||
|
||||
internal void BindElements()
|
||||
{
|
||||
m_InfluencesList = this.Q<SpriteBoneInfluenceListWidget>();
|
||||
m_InfluencesList.onAddBone = () => onAddBone();
|
||||
m_InfluencesList.onRemoveBone = () => onRemoveBone();
|
||||
m_InfluencesList.onReordered = s => onReordered(s);
|
||||
m_InfluencesList.onSelectionChanged = (s) => onSelectionChanged(s);
|
||||
m_InfluencesList.GetController = InternalGetController;
|
||||
m_HeaderLabel = this.Q<PopupWindow>();
|
||||
this.styleSheets.Add(ResourceLoader.Load<StyleSheet>("SkinningModule/SpriteBoneInfluenceWindowStyle.uss"));
|
||||
}
|
||||
|
||||
SpriteBoneInflueceToolController InternalGetController()
|
||||
{
|
||||
return m_Controller;
|
||||
}
|
||||
|
||||
public void OnSpriteSelectionChanged()
|
||||
{
|
||||
Update();
|
||||
}
|
||||
|
||||
public void OnMeshChanged()
|
||||
{
|
||||
Update();
|
||||
}
|
||||
|
||||
public void OnSkeletonChanged()
|
||||
{
|
||||
m_InfluencesList.Update();
|
||||
}
|
||||
|
||||
public void OnBoneSelectionChanged()
|
||||
{
|
||||
m_InfluencesList.OnBoneSelectionChanged();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
m_InfluencesList.Update();
|
||||
m_InfluencesList.OnBoneSelectionChanged();
|
||||
}
|
||||
|
||||
void ISpriteBoneInfluenceWindow.SetController(SpriteBoneInflueceToolController controller)
|
||||
{
|
||||
m_Controller = controller;
|
||||
}
|
||||
|
||||
void ISpriteBoneInfluenceWindow.SetHiddenFromLayout(bool hide)
|
||||
{
|
||||
this.SetHiddenFromLayout(hide);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: acaa2d82522f0dd45b4dc5ce9c7dcff0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Add table
Add a link
Reference in a new issue