添加 Steamworks 軟件包
-
轉到 https://github.com/rlabrecque/Steamworks.NET/releases 並下載最新版本,確保下載 .unitypackage。然后,您需要將其導入您的 Unity 項目。
-
在項目文件夾的根目錄中打開 steam_appid.txt 文件並將 480 替換為您的 Steam AppId。重新啟動 Unity。
-
在您的初始場景中,創建一個新游戲對象,將其命名為“Steam Manager”,並添加在 Scripts>Steamworks.NET 中找到的 SteamManager.cs 腳本
這就是將 Steamworks 集成到您的項目中所需的全部內容。只要確保 Steam 客戶端在后台運行,您應該能夠在編輯器中點擊播放並且沒有錯誤。
using UnityEngine; using Steamworks; using System.Collections.Generic; internal struct SteamWorkshopItem { public string ContentFolderPath; public string Description; public string PreviewImagePath; public string[] Tags; public string Title; } public class SteamWorkshop : MonoBehaviour { private SteamWorkshopItem currentSteamWorkshopItem; private PublishedFileId_t publishedFileID; public static SteamWorkshop Instance { get; private set; } public List<string> GetListOfSubscribedItemsPaths() { var subscribedCount = SteamUGC.GetNumSubscribedItems(); PublishedFileId_t[] subscribedFiles = new PublishedFileId_t[subscribedCount]; SteamUGC.GetSubscribedItems(subscribedFiles, (uint)subscribedFiles.Length); ulong sizeOnDisk = 0; string installLocation = string.Empty; uint timeStamp = 0; var result = new List<string>(); foreach (var file in subscribedFiles) { SteamUGC.GetItemInstallInfo(file, out sizeOnDisk, out installLocation, 1024, out timeStamp); result.Add(installLocation); } return result; } public void UploadContent(string itemTitle, string itemDescription, string contentFolderPath, string[] tags, string previewImagePath) { currentSteamWorkshopItem = new SteamWorkshopItem { Title = itemTitle, Description = itemDescription, ContentFolderPath = contentFolderPath, Tags = tags, PreviewImagePath = previewImagePath }; CreateItem(); } private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } private void CreateItem() { var steamAPICall = SteamUGC.CreateItem(SteamUtils.GetAppID(), EWorkshopFileType.k_EWorkshopFileTypeCommunity); var steamAPICallResult = CallResult<CreateItemResult_t>.Create(); steamAPICallResult.Set(steamAPICall, CreateItemResult); } private void CreateItemResult(CreateItemResult_t param, bool bIOFailure) { if (param.m_eResult == EResult.k_EResultOK) { publishedFileID = param.m_nPublishedFileId; UpdateItem(); } else { Debug.Log("Couldn't create a new item"); } } private void UpdateItem() { var updateHandle = SteamUGC.StartItemUpdate(SteamUtils.GetAppID(), publishedFileID); SteamUGC.SetItemTitle(updateHandle, currentSteamWorkshopItem.Title); SteamUGC.SetItemDescription(updateHandle, currentSteamWorkshopItem.Description); SteamUGC.SetItemContent(updateHandle, currentSteamWorkshopItem.ContentFolderPath); SteamUGC.SetItemTags(updateHandle, currentSteamWorkshopItem.Tags); SteamUGC.SetItemPreview(updateHandle, currentSteamWorkshopItem.PreviewImagePath); SteamUGC.SetItemVisibility(updateHandle, ERemoteStoragePublishedFileVisibility.k_ERemoteStoragePublishedFileVisibilityPublic); var steamAPICall = SteamUGC.SubmitItemUpdate(updateHandle, ""); var steamAPICallResult = CallResult<SubmitItemUpdateResult_t>.Create(); steamAPICallResult.Set(steamAPICall, UpdateItemResult); } private void UpdateItemResult(SubmitItemUpdateResult_t param, bool bIOFailure) { if (param.m_eResult == EResult.k_EResultOK) { Debug.Log("Sucessfully submitted item to Steam"); } else { Debug.Log("Couldn't submit the item to Steam"); } } }
轉載自
https://www.salusgames.com/2019/01/27/simple-steam-workshop-implementation-in-unity3d/