【问题标题】:Unity Moving object Animation repeatedlyunity 反复移动物体动画
【发布时间】:2018-04-03 11:29:07
【问题描述】:

我在 Unity 中制作西洋跳棋游戏,并且我有一块对象,里面有一个瓷砖移动动画(GameObject)。当我单击新位置时,会触发动画并移动棋子。但在那之后,将这块移动到下一个图块(新坐标)不起作用!

这是该部分的代码!

 if(selectedPiece.ValidMove(pieces, x1, y1, x2, y2, hasKilled))
        {
            // Tile jump check
            if (Mathf.Abs (x2 - x1) == 1) {
                if(selectedPiece.isWhite)
                {
                    if(selectedPiece.transform.position.x < mouseOver.x)
                    {
                        // default 
                        selectedPiece.GetComponentInChildren<Animator>().SetTrigger("tileJump");   
                        selectedPiece.transform.GetChild(0).transform.position = Vector2.zero;                     
                        //pieces[x2, y2] = selectedPiece;
                        pieces[x1, y1] = null;                           
                        //MovePiece (selectedPiece, x2, y2);
                    }else{

                         selectedPiece.GetComponentInChildren<Animator>().SetTrigger("tileJump");    
                    }
                }
            }
        }

【问题讨论】:

  • 使用 Debug.Log() 来验证代码是否按您的意愿执行。另外,请检查您的动画师:也许您错过了两种状态之间的过渡
  • 是的,我的过渡似乎有问题,Entry --> idle(null) ; AnyState --> newState(trigger) 这里是动画过渡。动画完成后,它卡住了。我已经为条目添加了新的过渡,但是在动画片段再次回到旧位置之后!

标签: c# unity3d


【解决方案1】:

使用动画师制作的动画旨在循环播放,因此当您再次播放时,它总是会回到原来的位置。

一种解决方案是通过代码将对象的位置设置为预期位置,同时重置动画师。

所以

transform.position = yourCheckersIntededPosition;

如果您只希望检查器对象在整个棋盘上滑动,您也可以在代码中执行此操作,而不是使用动画师对其进行动画处理,那么该位置将始终与其显示的位置一致。

【讨论】:

    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多