添加 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
{
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
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
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
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/
发表评论