ビルドバージョンの分離
この記事は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_unity\Assets\Plugins\GeneratedChecksums.csに出力されます。