为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
达令说 2022-01-09 15:15:25
我有两个 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;}
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

由于您的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;

}

我希望它对你有帮助。


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 380 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信