这段代码使用菜单按钮的方式,在Unity编辑器中创建AnimationClip
,并对每一帧进行像素偏移。在Unity编辑器中,在Project面板中选择一个纹理,然后通过右键菜单选择Assets > Create > AnimationClip With Pixel Offset
,即可生成对应的AnimationClip
。
注意,在使用这段代码时,确保已经导入"UnityEditor"命名空间,并且脚本必须放置在"Editor"文件夹下。保存脚本后,在Unity编辑器中选择一个纹理,点击右键菜单中的Assets > Create > AnimationClip With Pixel Offset
,生成对应的AnimationClip
,并将其添加到Project面板中。
该生成的AnimationClip
文件的命名规则是取纹理文件名并在后面加上"_animation.clip"。例如,如果纹理文件名为"Texture.png",则生成的动画剪辑文件名为"Texture_animation.clip"。
using UnityEngine;
using UnityEditor;
public class AnimationClipCreator
{
[MenuItem("Assets/Create/AnimationClip With Pixel Offset")]
static void CreateAnimationClipWithPixelOffset()
{
// 获取选中的贴图
Texture2D texture = Selection.activeObject as Texture2D;
if (texture == null)
{
Debug.LogError("Please select a texture!");
return;
}
// 创建新的AnimationClip
AnimationClip animationClip = new AnimationClip();
animationClip.name = "PixelOffsetAnimation";
// 创建AnimationCurve来对指定帧进行像素偏移
AnimationCurve curve = new AnimationCurve();
// 像素偏移量
Vector2 pixelOffset = new Vector2(10, 0); // 偏移到右边10个像素(x轴)
// 对动画每一帧进行像素偏移
for (int frameIndex = 0; frameIndex < texture.width; frameIndex++)
{
float time = frameIndex / (float)texture.width;
// 计算当前帧的像素偏移值
Vector2 offset = pixelOffset * (frameIndex / (float)texture.width);
// 创建关键帧并添加到AnimationCurve
Keyframe keyframe = new Keyframe(time, offset.x, Mathf.Infinity, Mathf.Infinity);
curve.AddKey(keyframe);
}
// 设置曲线属性名为"m_LocalPosition.x"
EditorCurveBinding curveBinding = EditorCurveBinding.FloatCurve("", typeof(Transform), "m_LocalPosition.x");
// 添加曲线到AnimationClip
AnimationUtility.SetEditorCurve(animationClip, curveBinding, curve);
// 将AnimationClip保存为.asset文件
string animationPath = AssetDatabase.GetAssetPath(texture);
animationPath = animationPath.Replace(".png", "").Replace(".jpg", ""); // 移除贴图后缀
animationPath += "_animation.clip";
AssetDatabase.CreateAsset(animationClip, animationPath);
AssetDatabase.SaveAssets();
Debug.Log("AnimationClip created: " + animationPath);
}
}