Animation 通过参数按顺序控制动画师中的动画
所以我正在制作一个化身的动画,这个化身有自己的动画制作人,有状态等等。 当与道具交互时,道具本身有一个带有状态的动画师。在这两种情况下,我都通过animator中的参数(bool类型)转换到一些动画 例如,对于门,角色将具有“ISOPENGDOOR”,而门将具有“isOpen” 现在的问题是:当我在GO1上更改动画的值,然后在GO2上更改bool;第一个动画是否完成,然后第二个动画是否开始?因为在我的情况下,它不会发生;它们几乎同时开始Animation 通过参数按顺序控制动画师中的动画,animation,unity3d,Animation,Unity3d,所以我正在制作一个化身的动画,这个化身有自己的动画制作人,有状态等等。 当与道具交互时,道具本身有一个带有状态的动画师。在这两种情况下,我都通过animator中的参数(bool类型)转换到一些动画 例如,对于门,角色将具有“ISOPENGDOOR”,而门将具有“isOpen” 现在的问题是:当我在GO1上更改动画的值,然后在GO2上更改bool;第一个动画是否完成,然后第二个动画是否开始?因为在我的情况下,它不会发生;它们几乎同时开始 void OnTriggerEnter (collider
void OnTriggerEnter (collider door)
{
if (door.gameObject.tag=="door")
{
GOAnimator1.SetBool("isOpeningDoor", true);
GOAnimator2.SetBool("isOpen", true);
}
}
我相信我做错了,因为我更改了动画制作者的参数,但我没有检查动画是否结束;这是可能的还是我在做一些不符合犹太教义的事情?我真的认为这是可行的 正如您现在在代码中看到的,GO1和GO2上的动画几乎同时开始,因为这就是它的编写方式。函数将在调用的帧中完成执行,并将控件返回Unity 我认为,在游戏对象之间进行协作和发送消息可能会对您有所帮助:
function GO2coroutine(){
float timeToWait = 0.5f; //Tweak this
for ( float t = 0f; t < timeToWait; t+=time.deltaTime)
yield;
GetComponent<Animator>().SetBool("isOpen",true);
}
不管怎么说,我认为我们的方式是合作!祝你好运 谢谢你的回复。你的方法有一个基本问题:你在动画师中设置了一个变量,触发了动画;如果在触发动画后移动代理;它将在移动和完成动画时滑动。使用协同程序的正确方法是在您更改动画师中的bool之后调用wait,因为协同程序与主循环并行工作,并且当动画执行时,您可以实际设置允许动画完成的等待。这是我正在使用的实际方法,但它非常不可靠。
function callCoroutine() {
StartCoroutine("Fade");
}
void OnTriggerEnter (collider door)
{
if (door.gameObject.tag=="door")
{
GOAnimator1.SetBool("isOpeningDoor", true);
GO2.SendMessage("callCoroutine");
}
}