Unity Animation Axis LookAt Slerp。空闲动画未正确面对

时间:2017-05-31 09:37:02

标签: c# animation unity3d rotation

感谢您查看我的帖子。我在舞台上有两个角色,它们具有混合动作状态的混合动作状态。

我已将角色彼此面对放置在使用定义目标的vuforia上,并使用Slerp旋转使每个角色彼此面对。我遇到的问题是,一旦空闲动画开始,它们都面向左边约45度。我看过动画,无法在任何地方看到旋转,所以我认为它可能是轴。我在下面添加了两个截图来演示问题。

enter image description here

左边的角色在双脚之间有一条白线,表示游戏对象确实面向右边的角色。当我看动画师时,空闲动画正在循环播放,如果我在周围移动角色,则旋转工作但仍然偏移。

我复制了mixamo动画以删除只读属性,看看我是否可以修复它。我在任何地方都看不到任何轮换。我也尝试在父变换中嵌入角色,并且没有快乐地旋转变换。

我进入了播放模式并查看了动画面板。然后发生了一件有趣的事。当我将洗涤器移动一帧时,角色会跳到正确的对面位置。

下面的图片显示了这一点。

enter image description here

突然,即使它在播放模式下停止播放动画,定位仍然是正确的。

这让我觉得它不是模型的轴问题,而是代码。 我有一个附加到每个玩家的脚本。这是更新方法。

void Update(){

    if (!anim.GetCurrentAnimatorStateInfo(0).IsName("knocked_out")){
            transform.position = new Vector3(transform.position.x,0,transform.position.z);
        }

    if (anim.GetCurrentAnimatorStateInfo(0).IsName("fight_idle")){
        Vector3 direction = enemy.position - this.transform.position;
        direction.y = 0;
        this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction),0.1f);
    }
    if(Input.GetKeyUp(KeyCode.Space)){
        reaction();
        }
    if(Input.GetKeyUp(KeyCode.K)){
        flyingKick();
        }

    if(DefaultTrackableEventHandler.lostFound == true){
        anim.SetBool("started", true);
        GameObject theClone = GameObject.Find("UserDefinedTarget-1/Holder");
        theClone.transform.localPosition = new Vector3(0,0,0);
    } 

}

它让我有点疯狂,我正在打破它,我甚至尝试了一个不同的空闲动画,并且有相同的结果,所以必须关闭。

这是在进入播放模式之前的战士原始变换位置,如果能够解决问题的话。

enter image description here

这是动画控制器。

enter image description here

我尝试为每个角色添加一个子变换并将其作为目标,但是当角色接近时,它们不会彼此面对,因为孩子需要在Z轴上偏移。

我在网上看到过类似的问题,但大多数人都是在看相机或者让对象一直看着这个角色。我需要这两个人面对面。他们这样做,没有动画。我试过打开和关闭root动画也没有任何乐趣。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

几个小时后,我发现了问题。 我不得不进入动画师并双击有问题的动画。使用右侧的检查器,我更改了下拉根变换并解决了轴枢轴的问题。

enter image description here

看来没有人回答也许这对少数人来说是有问题的,所以希望我能拯救别人解决问题的痛苦。