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

时间:2016-05-09 15:33:22

标签: animation unity3d 2d sprite

让我们说我有两个动画片段,闲置和动作;和两个spritesheet,一个男孩和一个标志。我希望男孩和标志精灵从同一个动画剪辑动画,因为我已经为此制作了单独的精灵。这是标志spritesheet

sign spritesheet

这是男孩精灵

boy

我希望我的动画片段包含两个动画精灵,如下所示

enter image description here

我不想制作两个动画师(男孩和标志),因为我的动画师是如此复杂,使得两个将需要很长时间。感谢

PS。对不起英语不是我的母语:)

3 个答案:

答案 0 :(得分:4)

您只需将一系列图像拖到“层次结构”窗口即可创建动画:boyChips0001.png boyChips0002.png boyChips0003.png

Selecting animation pictures

当你这样做时,Unity会自动创建一个新的GameObject,并附带一个“Animator Controller”和一个“Animation”。

The animation created

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

The animation file

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

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

现在,将动画师控制器设置为动画师。

Drag the Animator Controller to the Animator

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

最后将创建的动画拖放到此动画制作窗口

An Animator Controller with 3 animations: "repose", "Globe1 animation" and "Globe2 Animation"

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

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]);

        }
    }
}

注意:动画gameObject必须具有Sprite Renderer组件。如果没有,你看不到动画:

Sprite Renderer

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果您希望这样做,那么最简单的方法就是使用Photoshop或GIMP等图像编辑器。您可以剪切并粘贴男孩并签名具有透明背景的新共享图像。有很多关于如何做到这一点的教程很容易找到;因为它不属于编码领域,所以我不会进一步详细说明,但你应该毫不费力地确保所有内容都完美排列。