[英](Unity - C#) Problems with buttons triggering other events
我正在開發一款 2D 手機游戲,玩家應該在屏幕上點擊 go 向上。 我最近剛剛添加了一個暫停按鈕,我注意到當我單擊該按鈕時,它會被視為在屏幕上的點擊,因此播放器會上升。 基本上,在我按下暫停按鈕的同一時刻,玩家跳躍,然后游戲在他在半空中時凍結。 有沒有辦法讓按鈕不被視為點擊?
下面是讓他移動的玩家腳本部分:
if (Input.GetMouseButtonDown (0) && isDead == false && isKnifeDead == false && UiStartScript.uiInstance.firstClickUi == true) {
rb.velocity = Vector2.up * velocity;
}
這是暫停按鈕的 UI 腳本的一部分:
public void PauseGame()
{
Time.timeScale = 0;
}
我的事件系統:事件系統
我的按鈕:按鈕
嘿,伙計,希望這會有所幫助。
在 U. 我腳本添加公共 GameObject PlayerConrtollerScript; 在您的 UI 腳本中,在 class Pausgame() 下添加此代碼。 GameObject.PlayerControllerScript.SetActive = false;
未暫停時,您需要添加到具有時間的腳本中。 時間刻度=1; 添加此代碼。 GameObject.PlayerControllerScript.SetActive = true;
添加上述代碼后。 不要忘記使用 U.I 腳本將玩家游戲 object 從您的層次結構添加到 Inspector 中,當您向下滾動到 U.I 腳本時,該空間將可用於添加游戲 object。
希望它對您有用,如果您遇到困難,請告訴我。 我會盡力幫助你。
這將阻止您的播放器在暫停期間四處移動。
一個不需要代碼的簡單方法是刪除關於檢測屏幕上的點擊的代碼,而是放置一個覆蓋整個屏幕的按鈕(隱形按鈕)。
該按鈕事件將觸發屏幕移動。
您可以在頂部添加額外的按鈕,Unity 將自動放棄來自下方任何其他按鈕的點擊。
通過這種方式,您可以開始添加 UI,而無需簽入應考慮的代碼。
這是我已經完成的方法。 我使用事件系統和 Canvas 創建了一系列技巧來利用鼠標輸入,您不需要使用更新功能來進行基本游戲。
這是我的示例項目: Github 上的 TapAndJump
檢查名為“單擊面板”和“暫停按鈕”的游戲對象以及相應的鏈接方法。
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
}
我以您的代碼示例等為指導; 可以自由修改和請求任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.