iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Software Development

Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧系列 第 24

Unity Imgur - 使用免費的Imgur API上傳圖片!

  • 分享至 

  • xImage
  •  

Unity 串接 Imgur API 教學

在遊戲開發或應用程式開發中,有時候我們需要上傳截圖或圖片至雲端儲存服務,並取得相應的連結。Imgur 是一個非常受歡迎的圖片分享平台,它提供了方便的 API,讓開發者能夠上傳圖片並取得圖片的 URL。本文將介紹如何在 Unity 中串接 Imgur API,並實現圖片的上傳功能。

前置準備

1. 創建 Imgur 開發者帳戶

要使用 Imgur API,首先需要註冊一個 Imgur 開發者帳戶並獲取 API Client ID 和 Client Secret。

  1. 前往 Imgur API 官方網站,並創建一個帳戶。
  2. 登錄後,點擊 "Register as a Developer" 並創建一個應用。
  3. 記錄下生成的 Client IDClient Secret,這些會在之後的 API 請求中使用。

2. Unity 設置

在 Unity 中,我們將使用 UnityWebRequest 來發送 API 請求。因此,請確保你的 Unity 專案使用的是支援 UnityWebRequest 的 Unity 版本。

實現步驟

1. 撰寫 Imgur 上傳功能的 C# 代碼

我們將創建一個簡單的腳本來上傳圖片並取得回傳的圖片網址。Imgur API 的上傳請求是通過 POST 方法實現的,並且需要附帶 Authorization Token。

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class ImgurUploader : MonoBehaviour
{
    // 你的 Imgur Client ID
    private string clientID = "你的ClientID";

    // Imgur API 的上傳 URL
    private string uploadUrl = "https://api.imgur.com/3/upload";

    // 圖片的本地路徑或 Texture2D 轉換後的 Base64 字符串
    public Texture2D imageToUpload;

    void Start()
    {
        // 開始上傳圖片
        StartCoroutine(UploadImage(imageToUpload));
    }

    // 上傳圖片協程
    IEnumerator UploadImage(Texture2D texture)
    {
        // 將 Texture2D 轉換為 PNG 格式的 byte 數組
        byte[] imageData = texture.EncodeToPNG();

        // 將圖片數據轉換為 Base64 編碼
        string base64Image = System.Convert.ToBase64String(imageData);

        // 設置表單數據
        WWWForm form = new WWWForm();
        form.AddField("image", base64Image);

        // 創建 UnityWebRequest 並設置請求標頭
        UnityWebRequest www = UnityWebRequest.Post(uploadUrl, form);
        www.SetRequestHeader("Authorization", "Client-ID " + clientID);

        // 發送請求並等待響應
        yield return www.SendWebRequest();

        // 檢查請求結果
        if (www.result == UnityWebRequest.Result.Success)
        {
            Debug.Log("圖片上傳成功: " + www.downloadHandler.text);
            // 這裡你可以解析返回的 JSON 以獲取圖片的 URL
        }
        else
        {
            Debug.Log("圖片上傳失敗: " + www.error);
        }
    }
}

2. 解釋代碼

  1. Client ID:在這裡我們使用從 Imgur 開發者網站獲得的 Client ID,這將允許我們向 Imgur API 發送請求。
  2. Texture2D:這裡我們使用 Unity 的 Texture2D 類型來存放我們要上傳的圖片。在實際應用中,你可能會從場景中擷取截圖或載入本地圖片。
  3. EncodeToPNG():將 Texture2D 轉換為 PNG 格式的二進制數據,並且之後再進行 Base64 編碼,因為 Imgur API 要求圖片以 Base64 字符串形式上傳。
  4. UnityWebRequest:用來發送 HTTP POST 請求,並且在請求的標頭中加入授權資訊。Imgur 需要 Authorization 標頭來進行 API 驗證。

3. 處理 API 回應

Imgur API 上傳成功後,會返回一個包含圖片資料的 JSON 響應。通常,這裡面包含了圖片的 URL,這樣你就可以在應用中展示該圖片。

JSON 回應範例:

{
  "data": {
    "id": "ABC123",
    "link": "https://i.imgur.com/ABC123.png"
  },
  "success": true,
  "status": 200
}

你可以使用 JSONUtility 或其他 JSON 解析器來從響應中提取圖片的 URL:

[System.Serializable]
public class ImgurResponse
{
    public ImgurData data;
    public bool success;
    public int status;
}

[System.Serializable]
public class ImgurData
{
    public string id;
    public string link;
}

// 在上傳成功後,解析圖片 URL
if (www.result == UnityWebRequest.Result.Success)
{
    ImgurResponse response = JsonUtility.FromJson<ImgurResponse>(www.downloadHandler.text);
    string imageUrl = response.data.link;
    Debug.Log("圖片上傳成功,圖片 URL:" + imageUrl);
}

4. 測試與應用

將這段腳本掛在一個 GameObject 上,並在 Unity 編輯器中拖入一張 Texture2D 圖片,然後運行專案。當圖片成功上傳後,Console 應該會顯示返回的圖片 URL,你可以點擊該連結查看上傳的圖片。

結語

Imgur API 提供了一個簡單而功能強大的工具來進行圖片上傳。通過 Unity 的 UnityWebRequest,我們可以輕鬆實現與 Imgur 的串接,並將遊戲內的截圖或其他圖像上傳到雲端。希望這篇文章能幫助你在 Unity 中更好地使用 Imgur API。


上一篇
Unity Sprites - 從網絡URL下載圖片在Image中顯示!
下一篇
Unity Break - 鐵人賽不慎中斷!
系列文
Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言