我正在开发一款 2D 手机游戏,玩家可以点击屏幕向上移动。我最近刚刚添加了一个暂停按钮,我注意到当我单击该按钮时,它会被视为点击屏幕,因此播放器会上升。基本上,在我按下暂停按钮的同一时刻,玩家跳跃,然后游戏在他在半空中时冻结。有没有办法让我的按钮不算是轻按?
这是让他移动的玩家脚本部分:
if (Input.GetMouseButtonDown (0) && isDead == false && isKnifeDead == false && UiStartScript.uiInstance.firstClickUi == true) {
rb.velocity = Vector2.up * velocity;
}
这是暂停按钮的 UI 脚本部分:
public void PauseGame()
{
Time.timeScale = 0;
}
我的事件系统: EventSystem
我的按钮: Button
答案 0 :(得分:0)
嘿,伙计,希望这会有所帮助。
在 U. I 脚本中添加 公共游戏对象 PlayerConrtollerScript; 在您的 U.I 脚本中,在 Pausgame() 类下 添加此代码。 GameObject.PlayerControllerScript.SetActive = false;
取消暂停时,您需要添加到具有 时间。时间刻度 =1; 添加此代码。 GameObject.PlayerControllerScript.SetActive = true;
添加上述代码后。不要忘记使用 U.I 脚本将玩家游戏对象从您的层次结构添加到检查器中,当您向下滚动到您的 U.I 脚本时,该空间将可用于添加游戏对象。
希望它对您有用,如果您遇到困难,请告诉我。我会尽力帮助你。
这将阻止您的播放器在暂停期间四处移动。
答案 1 :(得分:0)
一个不需要代码的简单方法是删除有关检测屏幕点击的代码,而是放置一个覆盖整个屏幕的按钮(不可见按钮)。
那个按钮事件会触发屏幕移动。
您可以在顶部添加额外的按钮,Unity 将自动丢弃下方任何其他按钮的点击。
通过这种方式,您可以开始添加 UI,而无需检查应考虑的代码。
答案 2 :(得分:-1)
这是我完成的方法。我使用事件系统和画布创建了一些技巧来利用鼠标输入,您不需要使用更新功能来进行基本的游戏。
这是我的示例项目:TapAndJump on Github
<块引用>检查名为“单击面板”和“暂停按钮”的游戏对象,然后 各自的链接方法。
JumpWithTap.cs
using UnityEngine;
public class JumpWithTap : MonoBehaviour
{
[SerializeField] private UIHandler uiHandler;
[SerializeField] private float jumpPower = 5f;
private Rigidbody2D rb2D;
private int counter;
#region Class Logic
public void Jump()
{
rb2D.velocity = Vector2.up * jumpPower;
uiHandler.SetNumberToCounter(++counter);
}
#endregion
#region MonoBehaviour API
private void Awake()
{
rb2D = GetComponent<Rigidbody2D>();
}
#endregion
}
UIHandler.cs
using UnityEngine;
using UnityEngine.UI;
public class UIHandler : MonoBehaviour
{
[SerializeField] private Text counterText;
[SerializeField] private Text pauseText;
[SerializeField] private Image clickPanel;
private bool isPaused = false;
public bool IsPaused
{
get { return isPaused; }
set
{
pauseText.gameObject.SetActive(value);
isPaused = value;
}
}
#region Class Logic
public void SetNumberToCounter(int number) => counterText.text = number.ToString();
public void DisableClickPanel() => clickPanel.raycastTarget = !clickPanel.raycastTarget;
public void PauseGame()
{
IsPaused = !IsPaused;
DisableClickPanel();
// Time.timeScale = IsPaused == true ? 0 : 1; // If you want keep the Physics (ball fall) don't stop the time.
}
#endregion
}
我以您的代码示例等为指导;可以自由修改和请求任何问题。