Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (Unity-C)按钮触发其他事件的问题_C#_Unity3d_Mobile_2d - Fatal编程技术网

C# (Unity-C)按钮触发其他事件的问题

C# (Unity-C)按钮触发其他事件的问题,c#,unity3d,mobile,2d,C#,Unity3d,Mobile,2d,我正在开发一款2D手机游戏,玩家可以点击屏幕上的按钮来升级。我最近刚刚添加了一个暂停按钮,我注意到当我点击这个按钮时,它算作屏幕上的一个点击,所以播放器会上升。基本上,就在我按下暂停按钮的同一瞬间,玩家跳起来,然后游戏在半空中冻结。有没有办法让这个按钮不算水龙头 以下是玩家脚本中让他移动的部分: if (Input.GetMouseButtonDown (0) && isDead == false && isKnifeDead == fal

我正在开发一款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;
}
我的事件系统:

我的按钮:

嘿,伙计,希望这有帮助

在U.I脚本中添加 公共游戏对象PlayerConrtollerScript; 在你的U.I脚本中,在类游戏下 添加此代码。 GameObject.PlayerController脚本.SetActive=false

取消暂停时,您需要添加到具有 时间时间尺度=1; 添加此代码。 GameObject.PlayerController脚本.SetActive=true

添加上述代码之后。别忘了用U.I脚本将玩家游戏对象从你的层次结构添加到检查器中,当你向下滚动到U.I脚本时,空间将可用于添加游戏对象

希望它对你有效,如果你与它斗争,让我知道。我会尽力帮助你


这将阻止您的播放机在暂停期间移动。

这就是我所做的方法。我使用事件系统和画布创建了一组技巧,以利用鼠标输入,您不需要使用更新功能来完成基本游戏

以下是我的示例项目:

检查名为“单击面板”和“暂停”按钮的游戏对象,然后 各自的链接方法

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
}

我以您的代码示例等为指导;可以自由修改和请求任何问题。

一个不需要代码的简单方法是删除关于检测屏幕点击的代码,而是放置一个覆盖整个屏幕的不可见按钮

该按钮事件将触发屏幕移动

您可以在顶部添加额外的按钮,Unity将自动放弃下面任何其他按钮的点击


通过这种方式,您可以开始全面添加UI,而无需签入应考虑的代码。

刚刚尝试过。玩家仍在跳跃,然后游戏在空中暂停。谢谢你的回答!添加GameObject.PlayerController脚本.SetActive=false;在暂停游戏类中的脚本之前,在时间之前。timescale=0 public void PauseGame{GameObject.Payer Controller.setActive=false;Time.timescale=0;}欢迎使用Stackoverflow。请不要以图片形式附加代码。请使用markdown代码块共享代码片段。嘿,这是解决问题的简单而有效的方法。当我按下按钮直到玩家跳过去的时候,我有一点延迟。我想知道你是否知道如何解决这个问题?
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
}