C# 如何管理动画?
我正在使用C#,目前正在构建一个第三人称视图游戏。我有一个3D角色模型,动画以帧为单位,所以我必须按帧剪切动画 问题是我目前有5个动画(空闲、跑步、行走、冲刺、跳跃),这是我的代码C# 如何管理动画?,c#,animation,unity3d,C#,Animation,Unity3d,我正在使用C#,目前正在构建一个第三人称视图游戏。我有一个3D角色模型,动画以帧为单位,所以我必须按帧剪切动画 问题是我目前有5个动画(空闲、跑步、行走、冲刺、跳跃),这是我的代码 void Update () { if (Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0){ //play run animation } else { if (motion.x !=
void Update () {
if (Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0){
//play run animation
} else {
if (motion.x != 0 || motion.z != 0){
motion.x = 0;
motion.z = 0;
}
//play idle anim
}
if (Input.GetKeyDown(KeyCode.Space) && controller.isGrounded){
//play jump anim
}
if (Input.GetKeyDown(KeyCode.P)){
//play punch anim
}
if (!controller.isGrounded){
//play jump anim
}
vertVelo -= gravity * Time.deltaTime;
motion.y = vertVelo;
this.controller.Move(motion * Time.deltaTime);
}
当我按p键进行字符打孔时,问题就出现了。似乎正在调用更新函数中的空闲动画,因此冲压动画没有时间播放
那么,解决方案是什么?是否有任何动画管理技术,或者我是否应该使用延迟?尝试用谷歌搜索统一的动画层以及动画之间的混合 可以在图层上设置动画循环,使较高的图层编号覆盖较低的图层 这意味着您可以在第1层上进行空闲循环,这将持续播放。然后说你的跳转圈在第二层。当跳转逻辑触发跳转循环时,它播放一次,然后空闲循环继续
Unity中“AnimationState”上的这个文档也很有用>链接尝试用谷歌搜索Unity中的动画层以及动画之间的混合 可以在图层上设置动画循环,使较高的图层编号覆盖较低的图层 这意味着您可以在第1层上进行空闲循环,这将持续播放。然后说你的跳转圈在第二层。当跳转逻辑触发跳转循环时,它播放一次,然后空闲循环继续
Unity中“AnimationState”上的此文档也很有用>链接您可以在播放punch时阻止空闲动画(但可能不是最佳方法):
播放punch时,您可能会阻止空闲动画(但这可能不是最佳方法):
这个if语句没有任何用处:if(motion.x!=0 | | motion.z!=0)。您也可以始终将motion.x和motion.z设置为0。此if语句没有任何用处:if(motion.x!=0 | | motion.z!=0)。你也可以总是将motion.x和motion.z设置为0I,就像这样,它基本上是一个精简版的,在Unity 4中添加的。你也可以用它来达到类似的效果。我喜欢这个,它基本上是一个精简版的,在Unity 4中添加的。还有一些方法可以用来实现类似的结果。
bool isPunchPlaying = false;
void Update () {
//...
if (!isPunchPlaying) {
// Play idle anim
}
// ...
if (Input.GetKeyDown(KeyCode.P)){
//play punch anim
isPunchPlaying = true;
StartCoroutine(WaitThenDoPunch(animation["punch"].length));
}
// ...
}
IEnumerator WaitThenDoPunch(float time) {
yield return new WaitForSeconds(time);
isPunchPlaying = false;
}