【steam接入】如何将unity游戏接入steam(steamworks)

使用Steamworks.NET,请确保成为steam的开发者(要在steam提交游戏,需要一次性缴纳100美元费用)

sdk地址:http://steamworks.github.io/installation/

c#接口介绍地址:http://steamworks.github.io/gettingstarted/

steamwork使用教程视频:https://www.youtube.com/playlist?list=PLckFgM6dUP2jBeskIPG-7BVJR-I0vcSGJ

Steamwork安装步骤

  • 下载 .unitypackage Stable (7.0.0) 或者从 Github 克隆
  • 导入下载的所有文件到项目 Assets/ 目录下.
  • 打开unity项目,会自动生成steam_appid.txt到项目的主目录下.
  • 打开 steam_appid.txt 并将 480 修改为自己的 AppId.
  • 编辑\Plugins\Steamworks.NET\types\SteamTypes\AppId_t.cs,将public static readonly AppId_t Invalid = new AppId_t(0x0);将0x0修改为自己的app_id
  • 重启unity,保证 steam_appid.txt 已生效.
  • 安装sdk完成.

如何使用

  • 下载SteamManagers.cs
  • 将SteamManager.cs脚本挂在GameObject上,steam会自动生成单例
  • 完整C#接口请点击查看
注:需要在https://partner.steamgames.com/home下载sdk,里面有提交游戏的工具,在\sdk\tools\ContentBuilder\builder
        在https://partner.steamgames.com/home/steamworks可以查看文档
        在http://steamworks.github.io/gettingstarted/可以查看C#接口的使用方式

// The SteamManager is designed to work with Steamworks.NET
// This file is released into the public domain.
// Where that dedication is not recognized you are granted a perpetual,
// irrevokable license to copy and modify this files as you see fit.
//
// Version: 1.0.3

using UnityEngine;
using System.Collections;
using Steamworks;

//
// The SteamManager provides a base implementation of Steamworks.NET on which you can build upon.
// It handles the basics of starting up and shutting down the SteamAPI for use.
//
[DisallowMultipleComponent]
class SteamManager : MonoBehaviour {
	private static SteamManager s_instance;
	private static SteamManager Instance {
		get {
			return s_instance ?? new GameObject("SteamManager").AddComponent();
		}
	}

	private static bool s_EverInialized;

	private bool m_bInitialized;
	public static bool Initialized {
		get {
			return Instance.m_bInitialized;
		}
	}

	private SteamAPIWarningMessageHook_t m_SteamAPIWarningMessageHook;
	private static void SteamAPIDebugTextHook(int nSeverity, System.Text.StringBuilder pchDebugText) {
		Debug.LogWarning(pchDebugText);
	}

	private void Awake() {
		// Only one instance of SteamManager at a time!
		if (s_instance != null) {
			Destroy(gameObject);
			return;
		}
		s_instance = this;

		if(s_EverInialized) {
			// This is almost always an error.
			// The most common case where this happens is the SteamManager getting desstroyed via Application.Quit() and having some code in some OnDestroy which gets called afterwards, creating a new SteamManager.
			throw new System.Exception("Tried to Initialize the SteamAPI twice in one session!");
		}

		// We want our SteamManager Instance to persist across scenes.
		DontDestroyOnLoad(gameObject);

		if (!Packsize.Test()) {
			Debug.LogError("[Steamworks.NET] Packsize Test returned false, the wrong version of Steamworks.NET is being run in this platform.", this);
		}

		if (!DllCheck.Test()) {
			Debug.LogError("[Steamworks.NET] DllCheck Test returned false, One or more of the Steamworks binaries seems to be the wrong version.", this);
		}

		try {
			// If Steam is not running or the game wasn't started through Steam, SteamAPI_RestartAppIfNecessary starts the 
			// Steam client and also launches this game again if the User owns it. This can act as a rudimentary form of DRM.

			// Once you get a Steam AppID assigned by Valve, you need to replace AppId_t.Invalid with it and
			// remove steam_appid.txt from the game depot. eg: "(AppId_t)480" or "new AppId_t(480)".
			// See the Valve documentation for more information: https://partner.steamgames.com/documentation/drm#FAQ
			if (SteamAPI.RestartAppIfNecessary(AppId_t.Invalid)) {
				Application.Quit();
				return;
			}
		}
		catch (System.DllNotFoundException e) { // We catch this exception here, as it will be the first occurence of it.
			Debug.LogError("[Steamworks.NET] Could not load [lib]steam_api.dll/so/dylib. It's likely not in the correct location. Refer to the README for more details.\n" + e, this);

			Application.Quit();
			return;
		}

		// Initialize the SteamAPI, if Init() returns false this can happen for many reasons.
		// Some examples include:
		// Steam Client is not running.
		// Launching from outside of steam without a steam_appid.txt file in place.
		// Running under a different OS User or Access level (for example running "as administrator")
		// Ensure that you own a license for the AppId on your active Steam account
		// If your AppId is not completely set up. Either in Release State: Unavailable, or if it's missing default packages.
		// Valve's documentation for this is located here:
		// https://partner.steamgames.com/documentation/getting_started
		// https://partner.steamgames.com/documentation/example // Under: Common Build Problems
		// https://partner.steamgames.com/documentation/bootstrap_stats // At the very bottom

		// If you're running into Init issues try running DbgView prior to launching to get the internal output from Steam.
		// http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
		m_bInitialized = SteamAPI.Init();
		if (!m_bInitialized) {
			Debug.LogError("[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.", this);

			return;
		}

		s_EverInialized = true;
	}

	// This should only ever get called on first load and after an Assembly reload, You should never Disable the Steamworks Manager yourself.
	private void OnEnable() {
		if (s_instance == null) {
			s_instance = this;
		}

		if (!m_bInitialized) {
			return;
		}

		if (m_SteamAPIWarningMessageHook == null) {
			// Set up our callback to recieve warning messages from Steam.
			// You must launch with "-debug_steamapi" in the launch args to recieve warnings.
			m_SteamAPIWarningMessageHook = new SteamAPIWarningMessageHook_t(SteamAPIDebugTextHook);
			SteamClient.SetWarningMessageHook(m_SteamAPIWarningMessageHook);
		}
	}


	// OnApplicationQuit gets called too early to shutdown the SteamAPI.
	// Because the SteamManager should be persistent and never disabled or destroyed we can shutdown the SteamAPI here.
	// Thus it is not recommended to perform any Steamworks work in other OnDestroy functions as the order of execution can not be garenteed upon Shutdown. Prefer OnDisable().
	private void OnDestroy() {
		if (s_instance != this) {
			return;
		}

		s_instance = null;

		if (!m_bInitialized) {
			return;
		}

		SteamAPI.Shutdown();
	}

	private void Update() {
		if (!m_bInitialized) {
			return;
		}

		// Run Steam client callbacks
		SteamAPI.RunCallbacks();
	}
}

接入问题:

*使用默认的appid 480可以获取到接口,替换为自己的appid报错steam api初始化失败?

应该是steam帐号里面没有该appid的游戏权限。

*Failed to load 'Assets/Plugins/x86_64/CSteamworks.dll' with error '找不到指定的模块。

还没找到解决办法

你可能感兴趣的:(unity3d,开发,C#,Unity拓展,游戏开发踩坑记录)