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中为什么可以使用三种语言混合开发? ...
随机推荐
- 【教程】Ubuntu 16.04 配置 CLion 开发 ROS Melodic
[教程]Ubuntu 16.04 配置 CLion 开发 ROS Melodic 目录 [教程]Ubuntu 16.04 配置 CLion 开发 ROS Melodic 笔者环境 步骤 下载安装 CL ...
- Win32汇编学习笔记05
定位关键点3种方法: 过程函数 api 字符串 但是不确定用要哪一种方法,可以3种方法都用一下,因为在不同的程序,实用的方法是不一样的 窗口程序看控件信息 1.通过OD去看 还可以用 spy ++ 查 ...
- 4 MyBatis动态SQL之trim元素|转
摘要:trim标签是一个格式化的标签,可以完成set或者where标签的功能. 1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL ...
- Java 自定义线程池的任务
在<Java 自定义线程池的线程工厂>一文中介绍了如何优雅地自定义线程工厂,本文介绍如何自定义线程池的任务,并拿到返回值. 首先自定义一个任务类,实现Callable接口,重写ca ...
- C++协程:异步编程的轻量级解决方案
1. 协程的本质与特性 C++20引入的协程(Coroutines)是一种可暂停和恢复的函数,通过co_await.co_yield.co_return三个关键字实现非抢占式任务调度. 与传统线程 ...
- 【转载】Refletor源码分析
Refletor源码分析 Informer 通过对 APIServer 的资源对象执行 List 和 Watch 操作,把获取到的数据存储在本地的缓存中,其中实现这个的核心功能就是 Reflector ...
- python基础—基本数据类型—数字,字符串,列表,元组,字典
1.运算符 (1)基本运算符 + 加法 - 减法 * 乘法 / 除法 ** 幂 // 取整(除法) % 取余(除法) (2)判断某个东西是否在某个东西里面包含 in no ...
- 2025H&NCTF-Misc&取证&OSINT全解
2025H&NCTF-Misc&取证&OSINT全解 Misc 签到&签退 公众号发送信息获取flag 问卷 回答问卷得flag 芙宁娜的图片 随波逐流扫一下图片,在R ...
- 运维排查 | SaltStack 远程命令执行中文乱码问题
哈喽大家好,我是咸鱼. 问题 我在一台服务器上写了一个简单的 Python 脚本 haha.py,内容如下: [root@localhost ~]# cat haha.py print("你 ...
- DRF之频率组件源码分析
DRF之频率组件源码分析 [一]频率组件介绍 Django Rest Framework(DRF)中的频率组件是用于限制API端点的访问频率的一种机制. 频率组件可以帮助你控制用户对API的请求频率, ...