簡體   English   中英

如何在 Unity 3D(C#)中為 Android 設備編寫 UI 按鈕(帶退出功能)?

[英]How to code an UI button(with Exit funtion) for an Android device in Unity 3D(C#)?

我是 Unity 3D 的初學者。 我正在編寫一個 android 應用程序,我的開始菜單有一個退出按鈕。 我的想法很簡單:用戶按下退出按鈕后,應用程序將關閉。

我知道 Application.Quit() 用於退出應用程序。 但我只是不知道如何檢測用戶對按鈕的觸摸並返回 application.quit() 方法。 我應該使用 button.onclick 或 input.getTouch 之類的東西嗎?

這是我的代碼:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class ExitButton : MonoBehaviour {

    public Button exitButton;

    void Start()
    {
        Button btn = exitButton.GetComponent<Button>();
        btn.onClick.AddListener(TaskOnClick);
    }

    void TaskOnClick()
    {
        Application.Quit ();
        Debug.Log("You touched this button.");
    }
    }

在我嘗試播放我的應用程序后,我收到此錯誤:

NullReferenceException: Object reference not set to an instance of an object
ExitButton.Start()

似乎我無法從用戶觸摸按鈕獲得信號。

有人可以幫我嗎?

我已在檢查器中鏈接我的按鈕,但我無法找到我的函數名稱:TaskOnClick()檢查器

將以下代碼放入腳本中

public void QuitGame()
{
    Application.Quit();
}

將腳本附加到游戲對象,然后使用檢查器中按鈕組件底部的 OnClick 窗口將按鈕分配給方法。

將游戲對象附加到 OnClick 並選擇 QuitGame 函數。

筆記。 這僅在游戲構建中有效,在編輯器中無效。

您混淆了兩種使用按鈕的方法。 如果您遵循@Jack Foulkes 的方法,那么您不需要在外部分配按鈕。 這意味着您不需要以下代碼:

public Button exitButton;

void Start()
{
    Button btn = exitButton.GetComponent<Button>();
    btn.onClick.AddListener(TaskOnClick);
}

如果您使用上面的代碼,那么您不需要在檢查器中添加OnClick事件偵聽器,因為您已經在代碼中添加了它。
只有您的代碼才能工作。 您得到的是空引用,因為您實際上沒有從檢查器分配exitButton 在檢查器中應該是這樣的:檢查器

很簡單,你有訪問修飾符的問題來解決這個問題,只需鍵入

public void TaskOnClick()
{
 Application.Quit ();
}

查看此視頻,它將幫助您創建專業的 gui。

如何使用 Unity 制作專業的 GUI

創建一個包含以下內容的腳本,然后將其附加到相應的按鈕單擊

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExitButton : MonoBehaviour {
    public void ExitGame()
    {
        print("Exiting...");
        Application.Quit();
    }
}

您好,您需要做的就是將此功能設為公開

像這樣

public void TaskOnClick() 
{
   Application.Quit(); 
}

你也可以做一個 if 語句讓它變得更好:)

例如

public void TaskOnClick() 
    {
      if (Input.GetKeyDown(KeyCode.Escape) // You Can also change the key
      {
       Application.Quit(); 
}
    }

如果你想減少工作量,請創建一個函數

試試這個

   public void ExitFunction()
{
   if (Input.GetKeyDown(KeyCode.Escape) // Or Any Other Key
   {
     Application.Quit();
     Debug.Log("exitgame");
   }
} 
   Public void TaskOnClick() 
        {
           ExitFunction();
        }

如果您想制作相同的功能但在鼠標左鍵單擊上,這也是代碼

public void ExitFunction()
{
   if (Input.GetMouseButtonDown(0))
   {
       Application.Quit();
       Debug.Log("exitgame");
   }
}
public void TaskOnClick() 
{
   ExitFunction();
}

如果你想用鼠標右鍵

這是答案:

public void ExitFunction()
{
   if (Input.GetMouseButtonDown(1))
   {
      Application.Quit();
      Debug.Log("quitgame");
   }
}
public void TaskOnClick() 
{
   ExitFunction();
}

如果你想要它但使用中間按鈕
這是答案:

public void ExitFunction()
{
   if (Input.GetMouseButtonDown(2))
   {
      Application.Quit();
      Debug.Log("quitgame");
   }
}
public void TaskOnClick() 
{
   ExitFunction();
}

完整的最佳代碼:

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class ExitButton : MonoBehaviour
 {

    public void ExitFunction()
    {
       if (Input.GetMouseButtonDown(0))
       {
          Application.Quit();
          Debug.Log("quitgame");
       }
    }
    public void TaskOnClick() 
    {
       ExitFunction();
    }
    }

課程總結:

-- 有時在我們需要的時候使用public ,例如當我們使用GameObjectsTransforms時。

-- if () 語句用於使 IDE 理解非常具體的對象,例如Do an action when .... 被按下。

謝謝你。


希望這有幫助
埃亞德
專業的游戲開發者和前端 Web 開發者

你在檢查器中鏈接你的按鈕嗎?

編輯。 我認為這也應該改變:

void TaskOnClick()
{
     Debug.Log("You touched this button.");
     Application.Quit (); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM