リポジトリのお引越し作業

BItbucketを使っていたが社内の諸事情によりGithubに移行する時などに役立つメモ

方法1:Importerを使う方法

GithubのImporterページから行う方法がある

こちらのページから移行元のURLと新しいリポジトリ名を記入するとすんなりリポジトリの移行を行うことが出来る。

ただしGitLFSを含んだリポジトリだとエラーが起きることがあったので以下の方法も紹介する。

方法2:コマンドで行う方法

  • GitLFSを含まない場合は以下の方法だけで良い
git clone --mirror https://example.jp/old.git
cd old.git
git push --mirror https://example.jp/new.git
  • GitLFSを含む場合は以下の手順が必要になる
# まずは普通にmirrorでclone
git clone --mirror https://example.jp/old.git
cd old.git
# LFSのファイルを全て取得
git lfs fetch --all
# mirrorでpush
git push --mirror https://example.jp/new.git
# LFSのファイルを全てアップデート
git lfs push --all https://example.jp/new.git

参考サイト:

jyn.jp

シーン切り替えを行うとRPCが呼ばれなくなる事案の解決法

シーン切り替えを挟むと PhotonTarget.AllBufferdPRCメソッドが後から入室してきたクライアントで呼ばれないことがある。

そのような場合は

シーン切り替え直前に以下を呼び

 PhotonNetwork.isMessageQueueRunning = false;

シーンが切り替わりルームに入室が完了した時に

 PhotonNetwork.isMessageQueueRunning = true;

こちらを実行すると解決する。

複数のMacで同じDistribution属性のProvisioningファイルを使いたい時

Distribution用のProvisioning Fileを複数のMacで使いたい場合、そのプロビジョニングファイルが紐付いているCertificationのMacから p12ファイルのエクスポートし、他Macで開くだけ。

詳しいやり方は以下が参考になる。

makotton.com

UnityでWebViewを実装してみた

実装環境

UnityでWebViewを実装する

UnityでWebViewを実装するとなるとiOSAndroidのネイティブプラグインを作成しなければならないのだが、正直言ってネイティブプラグインを作るのはかなりの労力を要するので避けたいところ。

ネットで良さげなアセットを探していたところGreeさんから良い感じのソースがGithubに上がっていたのでこれを利用させてもらうことにした。

github.com

使い方は非常に簡単でサンプルプロジェクトの SampleWebView.csの中身をマルっとコピペするだけでUnityでWebViewを実装することができた。

ハマったポイント

iOSはすんなり実装が済んだのだが、AndroidではなぜかWebViewが表示がされない。調べてみるとOnce you built an apkという記述が Readme.mdに書かれてあった。試しに1度Androidをビルドするとbuildに失敗したのだが新しく AndroidManifest.xmlが自動生成されているではないか!?いつもJenkinsビルドでビルドを通しているのでこれは盲点だった。なので AndroidでWebViewを使うときは1度ローカルでビルドしましょうというのが今回の注意点でした。

AssetBundleがなぜかうまくロードされない時

AssetBundleがうまくロードされない時はAssetBundle化するファイルのmetaファイルを見てみましょう。

例えば se_tap.mp3というファイルのmetadataは

fileFormatVersion: 2
guid: 5786e95a631374cccbdec528f4558f2d
timeCreated: 1486886144
licenseType: Free
AudioImporter:
  serializedVersion: 6
  defaultSettings:
    loadType: 0
    sampleRateSetting: 0
    sampleRateOverride: 44100
    compressionFormat: 1
    quality: 1
    conversionMode: 0
  platformSettingOverrides: {}
  forceToMono: 1
  normalize: 1
  preloadAudioData: 1
  loadInBackground: 1
  3D: 1
  userData: 
  assetBundleName: se_tap
  assetBundleVariant: 

のようになっています。

上記は正常なファイルなのですが、時々 assetBundleNameの行が

assetBundleName:  "\bse_tap"

といった感じでアセットバンドル名がおかしくなっていることがあります。

原因はファイルのリネームなど様々な問題が考えられるのですが

解決する手順としては

1.ロードが失敗するファイルを削除

2.Remove Unused Names でアセットバンドル名のキャッシュを消去

https://gyazo.com/7becfb6fea883dc57bb7d0deb35f43ec

3.もう一度ファイルを追加し直しAssetBundle化

上記の手順行うと良いと思います。

UnityにFirebase入れたらJenkinsビルドが失敗を繰り返すようになった

発端

UnityにFirebaseを導入したは良いのだけどJenkinsビルドが通らなくなった。

以下エラーの記述を一部抜き出したもの

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_FIRGoogleAuthProvider", referenced from:
      objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o)
  "_OBJC_CLASS_$_FIRGitHubAuthProvider", referenced from:
      objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o)
  "_OBJC_CLASS_$_FIREmailPasswordAuthProvider", referenced from:
      objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o)
  "_OBJC_CLASS_$_FIRFacebookAuthProvider", referenced from:
      objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o)
  "_OBJC_CLASS_$_FIRApp", referenced from:
      objc-class-ref in libApp.a(app_ios_3c1f2f5540e3edfbae8c7bf918ae5900.o)
  "_OBJC_CLASS_$_FIRAuth", referenced from:
      objc-class-ref in libAuth.a(auth_ios_7d6b9e9ddb5f240ff95f510fddebba51.o)
  "_OBJC_CLASS_$_FIRTwitterAuthProvider", referenced from:
      objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o)

** BUILD FAILED **

どうやら原因はFirebaseのライブラリを参照できないことらしい・・・。

ローカルのビルドは通るのに何かおかしいと思いローカルビルドとJenkinsビルドの生成物の違いを見てみると Podfileが生成されていないことがわかった。

この PodfileがないとFirebaseのAuthやAnalyticsのライブラリがインストールされないのである。

これは困った。。。毎回ローカルビルドでは非常に効率が悪い.

原因

そもそもこのPodファイルはFirebaseをUnityに取り込んだ時に追加される Google.IOSResolverというファイルが Podfileの生成を担っているのだがどうもこの Google.IOSResolverがJenkinsビルドではうまく動作していないらしいということがわかった。

もう少し深く原因を探ってみると Google.IOSResolverを呼び出すのは FirebaseAuthDepsなどのスクリプトなのだが

#elif UNITY_IOS
        UnityEngine.Debug.Log("FirebaseDeps");
        Type iosResolver = Google.VersionHandler.FindClass(
                               "Google.IOSResolver", "Google.IOSResolver");
        if (iosResolver == null)
        {
            return;
        }
        Google.VersionHandler.InvokeStaticMethod(iosResolver, "AddPod", new object[] { "Firebase/Auth" }, new Dictionary<string, object>() { { "version", "3.10+" }, { "minTargetSdk", "7.0" } });
#endif

このように iOSビルドの時のみ呼び出されるものだった。

一応Jenkinsビルドが行われる時はUnity上のスクリプトから Switch Platformをしているのだが恐らく Switch Platformの前にPodfile生成のメソッドが呼ばれているようである。

解決

どうにかこうにか原因を探っているうちにJenkinsのジョブ設定のUnityの項目であらかじめ -buildTargetを設定していなかったことがわかった。

https://gyazo.com/e124b2263921421bae00f1ed6caecea7

//以前
-quit -batchmode -executeMethod "コマンドから呼び出すメソッド名"

//修正後(-targetBuild追加)
-quit -batchmode -buildTarget ios -executeMethod "コマンドから呼び出すメソッド名"

コマンドラインの部分を上記のように修正したらうまくいきました。

この問題で約5日間くらいJenkinsビルドに悩まされていたので解決して本当に良かった(;.:◉;.:◞౪◟;.◉;)

追記[Firebase 3.0.1]

FirebaseSDKのバージョンを3.0.1に上げたら再びビルドが通らなくなった、今回もiOSResolverがうまく動作してないことが原因のようだったのでプロジェクト内の Google.IOSResolverSelect Platform For Platformの項目を見てみると Editorにのみチェックが入っていた。これを iOSにもチェックを追加することできちんとCocoaPodが動作し、必要なライブラリが追加されるようになった。もし同じような問題でJenkinsビルドが通らなくなった人がいたら参考にしてほしい。

https://gyazo.com/3dcaad1af96c35816318e21cc99646ce

【Unity】テキストをアニメーションさせる有用アセット

テキスト1文字1文字をアニメーションさせたい時ってありますよね。 そんな時にオススメのアセットを紹介。

1.TextFx (30💲)

実際に使ってみたけど、非常に簡単にテキストのアニメーションが実装できる。

ただし少し処理が重い。。。

そして Unity5.5にアップデートした瞬間に使えなくなったorz

早くアップデートしてくれー!!

2.Typeface Animator(5💲)

5💲でとってもリーズナブル!

実際に使ってみたけどTextFxよりかは若干利便性に欠けるが、機能としては十分なものを備えている。

何より安いしUnity5.5でもなんなく動きました!

今までTextFxで実装していた部分を全て Typeface Animatorで置き換えることができたので一件落着!

以上でテキスト系のアニメーションのアセット紹介を終わります!