【发布时间】:2021-08-08 06:17:06
【问题描述】:
目前我正在 Unity 中开发一款 2D 游戏。我正在使用 EditorWindow 对导入的 spritesheet 进行切片并从这些 sprite 中创建动画。
目前,我有代码来分割电子表格的功能,下面为有兴趣参考的人详细介绍:
public void Slice()
{
var textures = Selection.GetFiltered<Texture2D>(SelectionMode.Assets);
foreach (var texture in textures)
{
ProcessTexture(texture, pixelPerUnit, spriteSize, pivot, alignment);
}
}
static void ProcessTexture(Texture2D texture, int pixelPerUnit,
Vector2Int spriteSize, Vector2 pivot, Alignment alignment)
{
string path = AssetDatabase.GetAssetPath(texture);
{
TextureImporter textureImporter =
TextureImporter.GetAtPath(path) as TextureImporter;
//Set characteristics for spritesheet
textureImporter.textureType = TextureImporterType.Sprite;
textureImporter.spriteImportMode = SpriteImportMode.Multiple;
textureImporter.spritePixelsPerUnit = pixelPerUnit;
textureImporter.filterMode = FilterMode.Point;
textureImporter.textureCompression = TextureImporterCompression.Uncompressed;
int colCount = texture.width / spriteSize.x;
int rowCount = texture.height / spriteSize.y;
//Create Spritesheet Metadata based on characteristics
List<SpriteMetaData> metas = new List<SpriteMetaData>();
for (int c = 0; c < colCount; c++)
{
for (int r = 0; r < rowCount; r++)
{
SpriteMetaData meta = new SpriteMetaData();
meta.rect = new Rect(c * spriteSize.x,
r * spriteSize.y,
spriteSize.x, spriteSize.y);
meta.name = (rowCount - r - 1) + "-" + c;
meta.alignment = (int)alignment;
meta.pivot = pivot;
metas.Add(meta);
}
}
//Apply the metadata to the spritesheet
textureImporter.spritesheet = metas.ToArray();
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
}
}
目前让我感到悲伤的部分是通过脚本将这个新切片的电子表格转换为动画。
目前我可以使用下面的代码sn-p在spritesheet的目录中创建一个空的动画剪辑:
string path = AssetDatabase.GetAssetPath(texture);
string newPath = Path.GetDirectoryName(path);
AnimationClip clip = new AnimationClip();
AssetDatabase.CreateAsset(clip, newPath + "\\" + spriteName ".anim");
我很难找到如何将精灵添加到这个新创建的动画中。我查看了AnimationCurves 和AnimationEvents,但似乎找不到通过编辑器将精灵链接到动画的步骤。
如果有人对通过脚本创建统一动画剪辑有经验或知识,任何见解将不胜感激。如果我需要更多信息,请告诉我。这是我第一次使用这项服务。谢谢大家的帮助!
【问题讨论】:
标签: c# unity3d unity3d-2dtools unity3d-editor