如何将 GameLift 与 Unity3d 集成作为游戏客户端

2024-02-03

我正在尝试使用 Unity3d 游戏作为 GameList 客户端。

根据GameLift 论坛 https://gamedev.amazon.com/forums/questions/13771/create-client-in-unity.html,亚马逊似乎不建议直接使用游戏客户端作为GameLift客户端。

但我想尝试一下,因为我不想再有一个单独的游戏服务。

  1. 第一步是从以下位置下载 AWS SDK 源代码GitHub https://github.com/aws/aws-sdk-net并构建.net35版本的dll;

  2. 将AWSSDK.Core.dll和AWSSDK.GameLift.dll放入/Assets/Plugins;

  3. 从 MonoBehaviour 创建一个新的派生类来创建 AmazonGameLiftClient,下面是我的代码:

public class MyGameLiftClient : MonoBehaviour
{
    private void Awake()
    {    
        AmazonGameLiftConfig gameLiftConfig = 
                new AmazonGameLiftConfig {RegionEndpoint = RegionEndpoint.USWest1};
        AmazonGameLiftClient client = new AmazonGameLiftClient(
                "AwsAccessKeyId",
                "AwsSecrectAcessKey",
                gameLiftConfig);
    }
}
  1. 这里我遇到了第一个问题:无法创建 GameLiftClient https://stackoverflow.com/questions/53432086/failed-to-create-amazongameliftclient-in-unity3d

  2. 解决上述问题后,我尝试使用 Amazon GameLift 客户端列出机队:

AmazonGameLiftConfig gameLiftConfig = new AmazonGameLiftConfig {RegionEndpoint = RegionEndpoint.USWest1};
AmazonGameLiftClient client = new AmazonGameLiftClient(
            "awsAccessKeyId",
            "awsAccessSecretKey",
            gameLiftConfig);
ListFleetsRequest listFleetsRequest = new ListFleetsRequest();
ListFleetsResponse fleets = client.ListFleets(listFleetsRequest);

但我得到以下异常:

NotSupportedException: https://gamelift.us-west-1.amazonaws.com/
System.Net.WebRequest.GetCreator (System.String prefix)
System.Net.WebRequest.Create (System.Uri requestUri)
Amazon.Runtime.Internal.HttpRequest..ctor (System.Uri requestUri)
Amazon.Runtime.Internal.HttpWebRequestFactory.CreateHttpRequest (System.Uri requestUri)
Amazon.Runtime.Internal.HttpHandler`1[System.IO.Stream].CreateWebRequest (IRequestContext requestContext)
Amazon.Runtime.Internal.HttpHandler`1[System.IO.Stream].InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.Unmarshaller.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.ErrorHandler.InvokeSync (IExecutionContext executionContext)
  1. 我在 aws.config 中添加了一些更多配置来修复它,下面是我的整个 aws.config:
<configuration>
  <configSections>
    <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
    <section name="system.diagnostics" type="System.Diagnostics.DiagnosticsConfigurationHandler" />
    <sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System">
       <section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System" />
       <section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System" />
       <sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System">
          <section name="smtp" type="System.Net.Configuration.SmtpSection, System" />
       </sectionGroup>
       <section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System" />
       <section name="settings" type="System.Net.Configuration.SettingsSection, System" />
       <section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System" />
     </sectionGroup>
  </configSections>
  <aws>
    <logging logTo="Log4Net"/>
    <csmConfig csmEnabled="false"/>
  </aws>
  <system.diagnostics>
     <trace autoflush="true" />
  </system.diagnostics>
  <system.net>  
    <authenticationModules>  
      <add type="System.Net.DigestClient" />  
      <add type="System.Net.NegotiateClient" />  
      <add type="System.Net.KerberosClient" />  
      <add type="System.Net.NtlmClient" />  
      <add type="System.Net.BasicClient" />  
    </authenticationModules>  
    <connectionManagement>  
      <add address="*" maxconnection="2" />  
    </connectionManagement>  
    <webRequestModules>  
      <add prefix="http"  
           type="System.Net.HttpRequestCreator"  
      />  
      <add prefix="https"  
           type="System.Net.HttpRequestCreator"  
      />  
      <add prefix="file"  
           type="System.Net.FileWebRequestCreator"  
      />
    </webRequestModules>  
  </system.net>  
</configuration>
  1. 现在我得到另一个异常:
MissingMethodException: Method not found: 'System.Net.ServicePoint.SetTcpKeepAlive'.
Amazon.Runtime.Internal.HttpHandler`1[System.IO.Stream].CreateWebRequest (IRequestContext requestContext)
Amazon.Runtime.Internal.HttpHandler`1[System.IO.Stream].InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.Unmarshaller.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.PipelineHandler.InvokeSync (IExecutionContext executionContext)
Amazon.Runtime.Internal.ErrorHandler.InvokeSync (IExecutionContext executionContext)

有人对这个例外有什么想法吗?

我的环境:

  • 操作系统:Mac OS X 10.14.1
  • Unity3d:2018.2.12f1
  • AWS 开发工具包核心:3.3.29.10(.net35)
  • AWS 开发工具包 GameLift:3.3.12.29(.net35)

最终,我找到了一种在 Unity3d 中使用 GameLiftClient 的方法。

先决条件:

  • Windows 10
  • 捷脑骑士 https://www.jetbrains.com/rider/, Visual Studio 也应该可以工作
  • 将“UnityEngine.dll”放入 C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
  • 在 Unity3d 项目的项目设置中将“Scripting Runtime version”设置为“.net35 Equivalent”。

Step 1:下载 AWS SDK 源代码:Github https://github.com/aws/aws-sdk-net并将其解压缩到您喜欢的任何地方。

下载与您使用的 GameLift Server SDK 兼容的版本会更安全。

Step 2: Open sdk/AWSSDK.Unity.sln in 捷脑骑士 https://www.jetbrains.com/rider/。 Visual Studio 应该也可以工作,但我没有与该解决方案兼容的正确版本的 VS。

Step 3:在 Rider 的解决方案面板中,在“Services”下创建一个新的解决方案文件夹,并将其命名为“GameLift”。 右键单击“GameLift”文件夹并选择“添加现有项目”。在弹出窗口中,浏览并选择“sdk\src\Services\GameLift\AWSSDK.GameLift.Net35.csproj”。

现在解决方案应该如下所示:

Step 4:右键单击“AWSSDK.GameLift.Net35.csproj”并选择“编辑 AWSSDK.GameLift.Net35.csproj” 在 Rider 的编辑器面板中,更改<ProjectReference Include="..\..\Core\AWSSDK.Core.Net35.csproj"/> to

<ProjectReference Include="..\..\Core\AWSSDK.Core.Unity.csproj">
  <Project>{5A8B25C1-3D58-4BB6-BF7D-77AD818D9EAD}</Project>
  <Name>AWSSDK.Core.Unity</Name>
</ProjectReference>

上面的 ProjectReferece 是从默认情况下包含在解决方案中的任何其他项目设置复制的。 不要忘记保存文件。

Step 5:右键单击“AWSSDK.GameLift.Net35.csproj”并选择“构建选定项目”。

Step 6:转到“sdk\src\Services\GameLift\bin\Debug\net35”或“sdk\src\Services\GameLift\bin\Release\net35”,将除“UnityEngnine.dll”之外的所有 dll 复制到 Unity3d 项目中。我将它们放在“资产/AWSSDK”下。

Step 7:使用以下内容创建“Assets/AWSSDK/src/Core/Resources/awsconfig.xml”:

<?xml version="1.0" encoding="utf-8"?>
<aws
    region="us-west-1"
    correctForClockSkew="true">
</aws>

Step 8:现在它应该能够使用以下代码片段创建 GameLiftClient:

Awake()
{
    UnityInitializer.AttachToGameObject(gameObject);

    AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest;

    AmazonGameLiftConfig gameLiftConfig = new AmazonGameLiftConfig
    {
            RegionEndpoint = RegionEndpoint.USWest1
    };

    m_Client = new AmazonGameLiftClient(
                "awsAccessKeyId",
                "awsSecretAccessKey",
                gameLiftConfig);
}

不要忘记将“awsAccessKey”替换为真实的“awsAccessKey”。 此外,将 AWS 凭证硬编码到客户端也不安全。因此,请仅将此代码片段用于测试目的。出于生产目的,AWS Cognito 可用于在运行时分发 AWS 凭证。

全做完了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 GameLift 与 Unity3d 集成作为游戏客户端 的相关文章

  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • 如何进行Visual Studio格式字典初始化?

    所有 Visual Studio 也包括 2012 不格式化以下内容 messageProcessor new Dictionary
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 无法在 Visual Studio 和 vcpkg 中构建 cmake 项目(致命错误 C1083)

    我今天安装了vcpkg 启用了与Visual Studio的集成 即 vcpkg集成安装 并开始安装库 我基本上安装了 cpprestsdk 并触发了 boost 库的安装 然后我在 Visual Studio CMake 中打开该项目 当
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • Moq - 是否可以在不使用 It.IsAny 的情况下设置模拟

    我一直使用 Moq 进行单元测试 有时我会嘲笑有很多参数的方法 想象一下这样的方法 public class WorkClient public void DoSomething string itemName int itemCount
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 如何按名字和姓氏排序,然后按 SamAccountName 排序,其中并非所有姓名都有名字和姓氏?

    目前 我有以下内容 来自 LDAP Get context based on currently logged on user PrincipalContext domainContext new PrincipalContext Cont
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • Apache Flink 1.3 中的 Elasticsearch 5 连接器

    通过阅读文档 我了解到使用 Apache Flink 1 3 我应该能够使用 Elasticsearch 5 x 但是 在我的 pom xml 中
  • 异常处理不适用于 Windows 上的 Qt

    我面临着奇怪的问题 也就是说 Qt 以某种方式关闭了我的程序中的异常处理 我无法捕获任何异常 当我抛出异常时 应用程序崩溃 我在 Windows 7 64 位 上使用 Qt SDK v2010 05 中的 Qt 4 7 0 32 位 Min
  • 如何在 javascript 中将跨度包裹在一段文本周围?

    我有这样的标记 p one two three four p 我想使用 javascript 将其转换为 p one span two three span four span span p 在本例中 我有要包裹在跨度中的部分的偏移量和长度
  • 如何在 Tensorflow 中量化 tf.Variables 的值

    我有一个像这样的训练模型 Y w X b 其中 Y 和 X 是输出和输入占位符 w 和 b 是向量我已经知道w的值只能是0或1 而b仍然是tf float32 当我定义变量 w 时 如何量化它的范围 or我可以有两个不同的学习率吗 像往常一
  • C# 属性组

    有没有办法建立一组属性 Before SuppressMessage Microsoft Design CA1061 SuppressMessage Microsoft Usage CA1812 SuppressMessage Micros
  • 从夹具内部跳过测试

    假设我有一个需要实时数据库的装置 如果实时数据库不存在 我想跳过依赖于该装置的测试 目前 我必须手动标记要跳过的测试 这感觉很多余 pytest fixture def db client DB URI os getenv DB URI S
  • 无法从 Java 连接到 MySQL:MySQL 驱动程序连接逻辑内的 NullPointerException

    我试图连接到我在 Java 程序中使用 MySQL 创建的数据库 但总是失败 为了举例 这是我的代码 import java sql public class Squirrel public static void main String
  • 开发内置短信/彩信 Android 应用程序的定制版本

    好吧 情况是这样的 我正在为客户开发一个应用程序 或尝试这样做 它需要许多 如果不是全部 与内置 SMS MMS 应用程序相同的功能 所以 我想 嘿 Android 是开源的吗 我可以接受应用程序并根据我的需要进行修改 对吧 因此 我在 g
  • php字符串替换引号

    您好 我正在尝试使用 php str replace 将所有单引号变为双引号 但是无论我做什么 它似乎都不起作用 建议 page str replace page 更新 我同意其他人的观点 以下内容对于大多数人来说是更容易阅读的替代方案 p
  • 如何使用pyrebase查询?

    我正在学习如何使用 python django 和pyrebase 进行查询 我在查询多个键值时遇到问题 例如 这是我的数据结构 root account ACC0001 id ACC0001 create day 2020 04 20 1
  • 如何使用 atoi() 获得负值?

    我编写这段代码是为了获取相反形式的数字 但如果我使用任何负输入 它会显示正反转数 C 中的 atoi 函数可以处理负数吗 include
  • 在 C++/CX 中解析 JSON ISO8601 日期

    我有一个来自 JSON 2012 08 01T15 42 06Z 的日期字符串 并且想要在 Windows 运行时中解析它 据我所知 只有COle日期时间可以处理这个问题 当我取出 T 和 Z 字符时 我只能让它正确解析字符串 但这增加了一
  • Pycharm - 在远程解释器中配置 PYTHONPATH

    我在 Windows 上安装了 PyCharm 2 7 3 并且正在尝试在 Linux 计算机上远程开发应用程序 到目前为止 我可以运行简单的程序 但是我正在尝试设置我的 PYTHONPATH 并且 PyCharm 似乎特别忽略了此配置 在
  • 获取 Windows Phone 上 ScrollViewer 的滚动事件

    问题 获取 Windows Phone 上 ScrollViewer 的滚动事件 我有一个像这样的滚动查看器
  • 可以将 crossorigin 属性添加到 Angular cli 生成的脚本标签中吗?

    是否可以将 crossorigin 属性添加到 Angular cli 生成的脚本标签中 运行我的角度应用程序时 脚本标签被添加到我的index html的末尾 是否可以配置 angular cli 以便当这些标签包含在构建 index h
  • 仅从类和接口静态导入

    我的代码在 Eclipse 中编译得很好 但是当我尝试从命令行编译 通过我们基于 ruby 的构建系统 时 我收到以下错误消息 static import only from classes and interfaces 建议不允许静态导入
  • 如何从 WAMP 恢复 MySQL 数据库?

    上个月我不得不重新安装 Windows 并且我已经将WAMP http en wikipedia org wiki WAMP文件夹到另一个分区 现在我再次安装了 WAMP 但我需要旧数据库 如何从安全分区上保存的 WAMP 文件夹中获取旧的
  • 系统托盘应用程序如何在其他平台上完成?

    Windows 有一个 系统托盘 其中包含时钟和始终运行的服务 例如 MSN Steam 等 我想开发一个 wxPython 托盘应用程序 但我想知道它移植到其他平台的效果如何 每个平台上的托盘等效项是什么 以及支持 Windows OSX
  • CGAffineTransformMakeScale 动画不起作用

    我有一个视图控制器 其中有一个视图 在删除它之前 我使用 UIView 动画将其缩小到 0 我的驳回它的代码是 UIView animateWithDuration dismissAnimationDuration delay 0 0 op
  • 如何将 GameLift 与 Unity3d 集成作为游戏客户端

    我正在尝试使用 Unity3d 游戏作为 GameList 客户端 根据GameLift 论坛 https gamedev amazon com forums questions 13771 create client in unity h