【发布时间】:2020-11-03 17:48:51
【问题描述】:
我在同一个问题上坐了好几个小时。我正在做一个 WebGL 游戏,在 PC 上玩时应该可以用移动控制(触摸)或键盘玩。在游戏开始时,系统会询问玩家他玩的是键盘还是移动设备,然后当他玩移动设备时,它会将 UI 更改为操纵杆和按钮。
在 Unity Animator 中,Players Animations for Movement 确实有控制动画的布尔值,所以 f.e.当 anim.SetBool("Jump", true) 跳转动画开始时。当为 false 且 Player 没有 Movement 时,播放 Idle Animation,或者当 false 和 Movement 时,播放 Walking Animation。
当我按“空格”时,一切正常。当我按下 Space Jump() 时被调用。
使用键盘演奏时玩家的动作很好,但我很难让跳跃按钮起作用。角色正在跳跃,但出于任何原因,动画仅在输入来自键盘时才起作用。同样,按钮和键盘只是调用相同的功能,请看一下:
using UnityEngine.UI;
public class PlayerMovement : MonoBehaviour
{
//...
public bool isMobile;
public Joystick joystick;
GameObject rend;
public Button buttonJump;
void Start()
{
// HERE Jump() IS INVOKED, WHEN THE JUMP BUTTON IS PRESSED!
buttonJump.onClick.AddListener(Jump);
}
void Update()
{
PlayerJump();
CheckIsGrounded();
}
private void FixedUpdate()
{
PlayerWalk();
}
void PlayerJump()
{
if (isGrounded)
{
if ( Input.GetKey(KeyCode.Space))
{
Jump();
}
}
}
//WHEN INVOKED VIA JUMP BUTTON, THE PLAYER MOVES UP FINE, BUT THE JUMP ANIMATION DOES NOT START!
public void Jump()
{
if (isGrounded)
{
anim.SetBool("Jump", true);
jumped = true;
myBody.velocity = new Vector2(myBody.velocity.x, jumpPower);
}
}
void CheckIsGrounded()
{
isGrounded = Physics2D.Raycast(groundCheckPosition.position, Vector2.down, 0.1f, groundLayer);
if (isGrounded)
{
if (jumped)
{
anim.SetBool("Jump", false);
jumped = false;
}
}
}
}
【问题讨论】:
标签: c# unity3d user-interface button onclick