在一个动画片段中更改多个精灵

Change multiple sprite in one animation clip

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

这是男孩 spritesheet

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

我不想做两个动画师(boy 和 sign),因为我的动画师太复杂了,做两个会花很长时间。谢谢

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

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

您只需将一系列图像拖到 "hierarchy" window 即可创建动画,如:boyChips0001.png boyChips0002.png boyChips0003.png

执行此操作时,Unity 会自动创建一个新的 GameObject,其中附加了 "Animator Controller" 和 "Animation"。

如果需要,您可以删除游戏对象和动画控制器,重要的是动画,扩展名为“.anim”。

您可以根据需要在同一个 way.when 中创建任意数量的文件“.anim”,是时候 link 到您的对象了。为此,通过在检查器中按 "Add component" 按钮并键入 "Animator".

添加一个新的 "Animator"

然后,创建一个控制器 Animator,点击 "project" window 上的 "create" 按钮并选择 "Animator controller"

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

打开 Animator window 选择菜单 "window/Animator" 并选择 Animator 控制器或双击其 Animator 控制器

最后将您创建的动画拖放到此动画师 window

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

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 组件。如果没有,则看不到动画:

所以我已经想通了。我所要做的就是使用 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);
}