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