Unity3D 中的简单 Steam 创意工坊实现
添加 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/
Unity3D 中的简单 Steam 创意工坊实现的更多相关文章
- Unity3D中简单的C#异步Socket实现
Unity3D中简单的C#异步Socket实现 简单的异步Socket实现..net框架自身提供了很完善的Socket底层.笔者在做Unity3D小东西的时候需要使用到Socket网络通信.于是决定自 ...
- 虚拟现实外包公司—焰火工坊CTO团队外包难把VR真正做起来,讲故事可能将伤害产业链
CTO王明杨,带着他的焰火工坊,正在为自家VR播放器和系统的上线做最后准备.不少投资机构,有传言称包括小米在内巨头都试图染指VR领域,而上月上市的暴风影音正是倚靠VR的概念成功助推了其高股价.对此,王 ...
- 【Unity3d游戏开发】Unity3D中的3D数学基础---向量
向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- Unity3D中灵活绘制进度条
有时我们需要在Unity3D中绘制进度条,如: 或 如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...
- 【吐血推荐】简要分析unity3d中剪不断理还乱的yield
在学习unity3d的时候很容易看到下面这个例子: void Start () { StartCoroutine(Destroy()); } IEnumerator Destroy(){ yield ...
- Unity3D中事件函数的运行顺序
Unity3D中脚本的生命周期是依照预先定义好的事件函数的运行流程来演化的,详细流程例如以下: Editor模式下Reset: 当脚本第一次被挂到GameObject上或用户点击Resetbutton ...
- 在unity3d中连接sql server
虽然在Unity3D中能够通过PlayerPrefs类来保存和读取数据,但是一旦数据量增大,仅仅通过代码的方式存取数据,这样的工作量是非常大的.那么如何通过使用Sql Server数据库来存取数据呢? ...
- (转) [教程] Unity3D中角色的动画脚本的编写(一)
ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...
- Unity3d中如何混用三种脚本语言?
首先要明白,这三种说的混用是指文件级别的混用,就是说一个文件是由一种语言写的.而不是说你这一个文件可以混用这三种语言,注意这是不允许的. 第二要明白,在unity3d中为什么可以使用三种语言混合开发? ...
随机推荐
- mssql sqlserver 使用xp_cmdShell运行时,报15281异常的处理办法
下文讲述 使用xp_cmdshell运行时,出现消息异常的操作方法,如下所示:实验环境:sql server 2008 R2 今天在sql查询管理器中运行xp_cmdshell命令时,出现以下错误现象 ...
- 遇到的问题之“使用get请求时,请求参数中存在#导致后端request获取不到值”
一.问题 使用get请求时,请求参数中存在#导致后端request获取不到值 发出参数带#的请求 后端接收不到SKU的值,连后面platformId的值都没有了 二.原因 1.有些符号[参数包含有特殊 ...
- 解决更新WIFI驱动后出现网络适配器黄色三角警告
更新WIFI驱动后出现网络适配器黄色三角警告问题的解决方案 在更新 Intel 无线网卡驱动后,遇到了网络适配器异常的问题,尤其是在曾经安装/卸载过 VMware 的电脑上.本篇文章将详细介绍这个问题 ...
- vSphere 7.0升级至8.0-vCenter 升级
近期,vSphere 即将发布新的正式版本,同时 vSphere 7.0 也将于 2025 年 10 月 2 日正式结束生命周期(EOS).届时,博通(Broadcom)将不再为该版本提供技术支持和更 ...
- B1006 换个格式输出整数
让我们用字母 B 来表示"百".字母 S 表示"十",用 12-n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数.例如 ...
- Spring Boot 使用Apollo动态调整日志级别
摘要:在Spring Boot 项目中,借助Apollo动态修改配置的能力,结合Logback修改日志级别打印执行的SQL脚本. 综述 在生产环境偶现测试环境未发现的SQL查询BUG,但由于线上关 ...
- Spring Boot 整合Redisson配置篇
<Spring Boot 整合Redisson配置篇> <Spring Boot 整合Redisson操作Redis基础篇> <Redisson批量操作类RBuckets ...
- C/C++中的volatile
C/C++中的volatile 约定 Volatile 这个话题,涉及到计算机科学多个领域多个层次的诸多细节.仅靠一篇博客,很难穷尽这些细节.因此,若不对讨论范围做一些约定,很容易就有诸多漏洞.到时误 ...
- ubuntu2204 ROS2安装
ubuntu初始环境配置ROS2 换源 备份原来的文件 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 换源 sudo gedit / ...
- 使用hive数据查询小结
业务背景: 公司大数据查询需要通过hive查询和分析一些数据 产品提出业务分析需求: 我的处理方式: 接到需求就想怎么写SQL语句,然后不断调整SQL语句进行验证,最后这个需求写了170行的SQL语句 ...