c# - 如何一个一个播放多个动画?
问题描述
我有一个带有动画控制器的角色。我从 Mixamo.com 下载了 12 个 fbx 动画文件,它是 Pro Magic Pack。
问题是我应该将每个动画一一拖到动画控制器,然后在每个动画状态之间添加过渡吗?还是制作混合树?
这是我现在使用的脚本,我希望索引 2 中的动画师(动画师2)在“空闲”之后开始在他身上播放所有 12 个动画。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AnimatorController : MonoBehaviour
{
public Animator[] animators;
public Transform target;
public float speed = 1f;
public float rotationSpeed;
public bool slowDown = false;
private bool endRot = false;
private Vector3 center;
// Use this for initialization
void Start()
{
center = target.GetComponent<Renderer>().bounds.center;
for (int i = 0; i < animators.Length; i++)
{
animators[i].SetFloat("Walking Speed", speed);
}
}
// Update is called once per frame
void Update()
{
float distanceFromTarget = Vector3.Distance(animators[2].transform.position, target.position);
for(int i = 0; i < animators.Length; i++)
{
animators[2].transform.position = Vector3.MoveTowards(animators[2].transform.position, center, 0);
}
if (slowDown)
{
if (distanceFromTarget < 10)
{
float speed = (distanceFromTarget / 10) / 1;
for (int i = 0; i < animators.Length; i++)
{
animators[i].SetFloat("Walking Speed", speed);
}
}
}
if (distanceFromTarget < 5f)
{
for (int i = 0; i < animators.Length; i++)
{
animators[i].SetBool("Idle", true);
}
if (!endRot)
{
Quaternion goalRotation = Quaternion.Euler(0f, 0f, 0f);
float angleToGoal = Quaternion.Angle(
goalRotation,
animators[0].transform.localRotation);
float angleThisFrame = Mathf.Min(angleToGoal, rotationSpeed * Time.deltaTime);
// use axis of Vector3.down to keep angles positive for ease of use
animators[0].transform.Rotate(Vector3.up, angleThisFrame);
animators[1].transform.Rotate(Vector3.down, angleThisFrame);
// We end if we rotated the remaining amount.
endRot = (angleThisFrame == angleToGoal);
}
{
animators[0].SetBool("Rifle Aiming Idle", true);
animators[1].SetBool("Rifle Aiming Idle", true);
}
}
}
}
如果我在动画控制器中拥有所有动画,假设它们添加了过渡,我如何在脚本中循环它们并使它们一一运行?
更新:
这是我要从脚本中一个一个播放的动画文件的截图:从站立1H施法01到站立2H魔法攻击05:
下一个屏幕截图是当前动画控制器,其中包含我已经拥有的状态和一些参数:从步行到空闲(HumanoidWalk 到 HumanoidIdle)我希望如果它是空闲然后开始播放所有动画文件:
因此,在动画师2中的角色处于空闲状态后的脚本中,然后开始在该动画师(动画师2)上播放动画
但这是硬盘上的动画文件。我应该先将它们添加到动画师吗?在每个动画之间进行过渡?一旦动画师2处于空闲状态,如何在脚本中一一运行它们?
解决方案
推荐阅读
- javascript - 使用 React 效果时状态未正确更新
- docker - Docker容器由于apparmor无法启动,为什么?
- android - 使用firebase不同的应用程序相同的项目与不同的项目
- android - 如何获取未来的返回语句并将其放入小部件中?
- apache-commons-httpclient - HttpClient 是否同时配置了 SSL 和 Proxy 身份验证?
- composer-php - Drupal 8 以 root 身份运行作曲家
- html - 向网站添加用户帐户和支付系统需要指南
- c# - MemoryStream 上传到 Minio 的结果大小为 0
- python - 如何在不对示例测试用例进行逆向工程的情况下解决以下问题
- keycloak - 如何使用 nginx 入口访问子路径上的 keycloak?