Unity2D:使用 UI 按钮移动播放器 - 平滑动画

我有两个 UI 按钮,用于控制玩家的移动(左右),而不是使用按钮脚本组件,我决定使用事件触发脚本组件;一个点向下事件来移动我的播放器和一个点向上事件来停止我的播放器的移动。我的问题:我创建了一个行走动画(在我的动画师中),当用户按住左或右按钮时将播放该动画,动画很流畅(这是我喜欢的)但是如果玩家要点击按钮一次(而不是点击并按住按钮)动画不播放并且移动不移动或者动画太快并且移动非常短。我想要做的:我想保持玩家的运动方式,但我也希望在用户点击一次时为玩家提供流畅的动画和运动。


这是我的脚本:


public bool movingLeft = false;

public bool movingRight = false;


public float speed = 2f;


public Vector3 moveDirectionLeft = Vector3.left;

public Vector3 moveDirectionRight = Vector3.right;



 void Start () {

    movingLeft = false;

    movingRight = false;


  }


 void Update () {

     if (movingLeft == true) {                      // LEFT BUTTON //

        WalkAnim.SetBool ("WalkLeft", true);// walk left

            transform.Translate (moveDirectionLeft * speed * Time.deltaTime);

     }  else if (movingLeft == false) {

           speed = 0;

           WalkAnim.SetBool ("WalkLeft", false); // goes back to idle

     }



     if (movingRight == true) {                         // RIGHT BUTTON //

        WalkAnim.SetBool ("WalkRight", true); // walks right

            transform.Translate (moveDirectionRight * speed * Time.deltaTime);

     }  else if (movingLeft == false) {

           speed = 0;

           WalkAnim.SetBool ("WalkRight", false); // goes back to idle

     }

 }



public void limitLD() { // UI Button Event trigger - pointUp

    movingLeft = false;

}


public void limitRD() { // UI Button Event trigger - pointUp

    movingRight = false;

}



public void MoveLeft() { // UI Button Event trigger - pointDown

        movingLeft = true;

        movingRight = false;

}


public void MoveRight() { // UI Button Event trigger - pointDown

        movingLeft = false;

        movingRight = true;

}


达令说
浏览 382回答 1
1回答

米琪卡哇伊

由于您的if...else陈述,会出现此问题。例如,如果您单击Right按钮,则void MoveRight()调用。它设置movingRight = true和movingLeft = false。所以在你的Update()函数中,首先else if (movingLeft == false)运行并将你的速度设置为 0 并将你的动画设置为空闲。和第二次if (movingRight == true)运行。但是因为speed = 0and animation = idleandUpdate()函数在每一帧都被调用,所以什么也没发生。您可以将脚本更改为:public bool movingLeft = false;public bool movingRight = false;public float speed = 2f;public Vector3 moveDirectionLeft = Vector3.left;public Vector3 moveDirectionRight = Vector3.right;void Start(){    movingLeft = false;    movingRight = false;}void Update() {    if (movingLeft == true)    {                      // LEFT BUTTON //       WalkAnim.SetBool("WalkLeft", true);// walk left       transform.Translate(moveDirectionLeft * speed * Time.deltaTime);    }    else if (movingRight == true)    {                         // RIGHT BUTTON //       WalkAnim.SetBool("WalkRight", true); // walks right       transform.Translate(moveDirectionRight * speed * Time.deltaTime);    }    else    {       WalkAnim.SetBool("WalkLeft", false);       WalkAnim.SetBool("WalkRight", false);    }}public void limitLD(){ // UI Button Event trigger - pointUp    movingLeft = false;}public void limitRD(){ // UI Button Event trigger - pointUp    movingRight = false;}public void MoveLeft(){ // UI Button Event trigger - pointDown    movingLeft = true;    movingRight = false;}public void MoveRight(){ // UI Button Event trigger - pointDown    movingLeft = false;    movingRight = true;}我希望它对你有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP