让我们说我有两个动画片段,闲置和动作;和两个spritesheet,一个男孩和一个标志。我希望男孩和标志精灵从同一个动画剪辑动画,因为我已经为此制作了单独的精灵。这是标志spritesheet
这是男孩精灵
我希望我的动画片段包含两个动画精灵,如下所示
我不想制作两个动画师(男孩和标志),因为我的动画师是如此复杂,使得两个将需要很长时间。感谢
PS。对不起英语不是我的母语:)
答案 0 :(得分:4)
您只需将一系列图像拖到“层次结构”窗口即可创建动画:boyChips0001.png boyChips0002.png boyChips0003.png
当你这样做时,Unity会自动创建一个新的GameObject,并附带一个“Animator Controller”和一个“Animation”。
如果需要,您可以删除GameObject和动画控制器,重要的是动画,扩展名为“.anim”。
您可以根据需要以相同的方式创建任意数量的文件“.anim”。当您拥有所需的所有文件时,就可以链接到您的对象了。为此,请通过按Inspector中的“添加组件”按钮并键入“Animator”来添加新的“Animator”。
然后,创建一个控制器Animator,点击“项目”窗口中的“创建”按钮,然后选择“Animator controller”
现在,将动画师控制器设置为动画师。
打开Animator窗口,选择菜单“window / Animator”,选择Animator控制器或双击Animator Controler
最后将创建的动画拖放到此动画制作窗口
现在,您的动画已准备好供脚本使用。例如,当用户点击空格键时动画之间的下一个代码周期:
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组件。如果没有,你看不到动画:
答案 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等图像编辑器。您可以剪切并粘贴男孩并签名具有透明背景的新共享图像。有很多关于如何做到这一点的教程很容易找到;因为它不属于编码领域,所以我不会进一步详细说明,但你应该毫不费力地确保所有内容都完美排列。