在一个动画剪辑中更改多个精灵

Posted

技术标签:

【中文标题】在一个动画剪辑中更改多个精灵【英文标题】:Change multiple sprite in one animation clip 【发布时间】:2016-05-09 15:33:21 【问题描述】:

假设我有两个动画剪辑,空闲和动作;和两个 spritesheet,一个男孩和一个标志。我想要男孩和标志精灵从同一个动画剪辑动画,因为我已经为此制作了单独的精灵。这是标志精灵表

这是男孩精灵表

我希望我的动画剪辑包含两个像这样的动画精灵

我不想制作两个动画师(男孩和标志),因为我的动画师太复杂了,制作两个动画师需要很长时间。谢谢

ps。抱歉英语不是我的母语:)

【问题讨论】:

我想最简单的解决方案是合并两个精灵,然后使用一个动画师。这将节省您与两个动画师一起工作的精力。希望有帮助:) 如何合并来自不同精灵表的两个精灵? 使用Photoshop等图片编辑工具 【参考方案1】:

您可以通过简单地将一系列图像拖到“层次结构”窗口来创建动画:boyChips0001.png boyChips0002.png boyChips0003.png

当您执行此操作时,Unity 将自动创建一个新的 GameObject,并附加一个“Animator Controller”和一个“Animation”。

您可以根据需要删除 GameObject 和动画控制器,重要的是动画,扩展名为“.anim”。

您可以使用相同的方式创建任意数量的文件“.anim”。当您拥有所需的一切时,就可以链接到您的对象了。为此,请按 Inspector 中的“添加组件”按钮并输入“Animator”来添加一个新的“Animator”。

然后,在“项目”窗口点击“创建”按钮,选择“Animator控制器”,创建一个控制器Animator

现在,将动画控制器分配给动画师。

打开 Animator 窗口,选择菜单“window/Animator”并选择 Animator 控制器或双击其 Animator Controller

最后将你创建的动画拖放到这个动画窗口

现在,您的动画已准备好供脚本使用。例如,当用户点击空格键时,动画之间的下一个代码循环:

public class TransitionScript : MonoBehaviour 

    public GameObject Globe;
    string[] AnimationName;
    private int currentAnimation;
    KeyCode key;
    // Use this for initialization
    void Start () 
        currentAnimation = 0;

        AnimationName = new string[3];
        AnimationName[0] = "Repose";
        AnimationName[1] = "Globe1 Animation";
        AnimationName[2] = "Glove2 Animation";
    

    // Update is called once per frame
    void Update()
    
        if(Input.GetKeyDown(KeyCode.Space))
        
            print("space Down");
            Animator anim = Globe.GetComponent<Animator>();

            currentAnimation++;
            if (currentAnimation >= AnimationName.Length) currentAnimation = 0;
            anim.Play(AnimationName[currentAnimation]);

        
    

注意:动画游戏对象必须有一个 Sprite Renderer 组件。如果没有,则看不到动画:

【讨论】:

【参考方案2】:

所以我已经想通了。我所要做的就是使用lateupdate函数并让“sign”对象跟随“boy”对象,然后在“sign”对象中制作简单的动画

public Transform target;
public Transform sign;
public float xOffset;
public float zSignOffset;

void LateUpdate()
    sign.transform.localPosition = new Vector3 (target.localPosition.x+ xOffset, transform.localPosition.y, target.localPosition.z+ zSignOffset);

【讨论】:

【参考方案3】:

如果您想要这样做,那么完成它的最简单方法是使用图像编辑器,例如 Photoshop 或 GIMP。您可以剪切和粘贴男孩并登录到具有透明背景的新共享图像。有很多关于如何做到这一点的教程很容易找到;因为它不属于编码领域,所以我不会进一步详细说明它,但除了确保一切都完美排列之外,你应该没有困难。

【讨论】:

以上是关于在一个动画剪辑中更改多个精灵的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity 上更改 2D 动画中精灵之间的时间?

从精灵表中以 sfml 动画精灵

Android:如何根据目的地坐标旋转移动的动画精灵

在Unity中使用不带动画的动画制作多个精灵

Unity - 如何在运行时更改播放器精灵表?

在 html5 下动画多个精灵的最快方法是啥?