This document is about: QUANTUM 1
SWITCH TO

ビルドバージョンの分離

この記事はQuantumバージョン1.2.0に対して書かれました

異なるゲームバージョンが同じルームに接続するのを防ぎたい場合は、UIConnect.csを開いて、次の行を置き換えてください。

C#

PhotonNetwork.ConnectUsingSettings("your_game_version");

「your_game_version」とは何ですか?
簡単なハックとして、ビルドされたQuantumのステートとシステムDLLのSHA256ハッシュ値を使用できます。

C#

PhotonNetwork.ConnectUsingSettings(
 "your_game_" + Checksums.quantum_state_dll + "_" + Checksums.quantum_systems_dll
);

チェックサムは、ちょっとしたユーティリティから生成されます(.NETのexeとしてビルドします):

C#

using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;

namespace checksum {
  static class Program {
    static void Main(string[] args) {
      var target = args[0];

      var re = new Regex("\\W");
      var checksums = string.Join(",\n", args.Skip(1).Select(path => {
        var constName = re.Replace(Path.GetFileName(path), "_");
        var bytes = File.ReadAllBytes(path);
        return $"{constName} = \"{toHex(SHA256.Create().ComputeHash(bytes))}\"";
      }));

      var code = $@"
namespace Quantum {{
  public static class Checksums {{
    public const string
{checksums}
      ;
  }}
}}
";
      File.WriteAllText(target, code);
    }

    static string toHex(byte[] bytes, bool upperCase = false) {
      var result = new StringBuilder(bytes.Length * 2);

      for (var i = 0; i < bytes.Length; i++)
        result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));

      return result.ToString();
    }
  }
}

コンパイルされたexeをtools_tlp\checksum.exeに配置します。
次に、quantum.systems.csproj定義にこれを追加します。

XML

  <!-- Only 1.1.8 does not use codegen_unity\quantum.codegen.unity.host.exe, just delete that line -->
  <PropertyGroup Condition="'$(OS)' == 'Unix'">
    <PostBuildEvent>mono "$(SolutionDir)..\tools_tlp\checksum.exe" "$(SolutionDir)..\quantum_unity\Assets\Plugins\GeneratedChecksums.cs" "$(TargetDir)\quantum.state.dll" "$(TargetDir)\quantum.systems.dll"
 mono "$(SolutionDir)..\tools\codegen_unity\quantum.codegen.unity.host.exe" "$(TargetDir)\quantum.state.dll" "$(SolutionDir)..\quantum_unity\Assets"
    </PostBuildEvent>
  </PropertyGroup>
  <PropertyGroup Condition="'$(OS)' == 'Windows_NT'">
    <PostBuildEvent>"$(SolutionDir)..\tools_tlp\checksum.exe" "$(SolutionDir)..\quantum_unity\Assets\Plugins\GeneratedChecksums.cs" "$(TargetDir)\quantum.state.dll" "$(TargetDir)\quantum.systems.dll"
 "$(SolutionDir)..\tools\codegen_unity\quantum.codegen.unity.host.exe" "$(TargetDir)\quantum.state.dll" "$(SolutionDir)..\quantum_unity\Assets"
    </PostBuildEvent>
  </PropertyGroup>

MSBuildは非常に厄介で、複数のビルド後コマンドを同じXMLタグ内に、別の行で、かつ空白なしで配置することを求めるため注意してください。

quantum.systems.csproj screenshot

quantum.systems.csproj screenshot

これにより、ビルド時にチェックサムが計算され、quantum_unity\Assets\Plugins\GeneratedChecksums.csに出力されます。

Back to top