Dazzle VR Tech blog

ダズルのVR開発者による開発TIPS


弊社エンジニアがGitHub for Unityにコントリビュートしました

ダズルではOSSへのコントリビュートも積極的に行っています。

GitHub for Unityについて、弊社エンジニアの@shienaのコードがマージされたものが2017/08/25v0.18-alphaとしてリリースされました。
GitHub for Unityは、3Dゲーム開発環境UnityGitHubリポジトリの管理機能を追加する拡張機能です。

GitHubからの反応

GitHub公式でも謝辞のツイートを頂戴しました!

プレゼントもいただきました!
f:id:dazzle-tech:20170830135954j:plain

対応した内容

  • Historyタブのコミットログの非ASCII文字の文字化けの修正

動機

@shienaUnityの情報についてキャッチアップを行っていた際にGitHub for Unityを見つけ検証したところ、以下のような文字化けに遭遇しました。
f:id:dazzle-tech:20170830140230p:plain

その不備が普及の妨げになることがもったいないと考えた@shienaが、これを修正することはできないかと考えたことが発端でした。

原因

UnityMonoをフォークしたC#を利用しており、その中に外部コマンドの出力を非同期に読み込む以下のメソッドがあります。

  • Process.OutputDataReceived
  • Process.ErrorDataReceived

上記メソッドの中で、byte配列からStringを生成する際Encoding.Default.GetStringで処理しています。

そのためOSで定義されたデフォルトのエンコード、つまりWindowsならSJISOSXならASCII以外の文字が化けてしまっていました。

対応

  • 問題のあった非同期処理を同期処理に置き換えた。

結果、非ASCII文字も正常に表示されるようになりました。
f:id:dazzle-tech:20170830140256p:plain

実は非同期処理自体は残す形のアプローチで進めていたため最終的に採用されたコードはさほど多くはなくなってしまいましたが、Issueをあげ問題解決のためにやりとりを重ねたことを大事に見てくださったように思います。

実際のやりとりについては以下をご覧ください。

補足

UnityC#から外部プロセスを実行してその結果を文字エンコードして読み込みたい場合はOutputDataReceivedを使うと文字が化けるので、以下のコードを参考にすると良いです。

最後に

ダズルでは技術方針を定めており、そのうちの一つとして「オープンソース活動」があります。
オープンソース文化、エンジニア文化に敬意を持ち、自社独自のフレームワークなどに固執せずオープンソースのプロダクトを積極的に利用しています。
ダズルでは今後も様々なOSSへのコントリビュートを積極的に行っていきます。