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

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

这是男孩精灵表

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

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

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

【问题讨论】:

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

标签: animation unity3d 2d sprite


【解决方案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。您可以剪切和粘贴男孩并登录到具有透明背景的新共享图像。有很多关于如何做到这一点的教程很容易找到;因为它不属于编码领域,所以我不会进一步详细说明它,但除了确保一切都完美排列之外,你应该没有困难。

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多