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