TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Firebase: 異なるcollection配下にある複数のDocumentにトランザクションを実行する方法

状況

異なるcollection配下にある複数のdocumentに対してtransactionを実行したい

やり方

参考:
Cloud Firestore で複数の DocumentReference に対し Transaction を実行する - Qiita

同じトランザクションを使い回せば大丈夫なようです。
入れ子にした、違うトランザクションだとコミットされてしまったものはロールバックされないのでダメです。

正しい例:

const res = await firestore.runTransaction(async t => {
    t.create(refA, insertDataA);
    t.create(refB, insertDataB);
    throw 'error'; // 両方のデータがロールバックされる。
});

ダメな例:
入れ子にして違うトランザクションを実行してしまう。

const res = await firestore.runTransaction(async t1 => {
    t1.create(refA, insertDataA);
    const res = await firestore.runTransaction(async t2 => {
        t2.create(refB, insertDataB);
    )};
    throw 'error'; // t2はコミットされてしまうが、t1はロールバックされる。
});

iOSアプリ審査でサポートURLに関してリジェクトされた

状況

iTUnes Connectのアプリ審査でサポートURL (Support URL)に関してリジェクトされました

The support URL specified in your app’s metadata, https://takoyaking.web.app/, does not properly navigate to the intended destination.

Next Steps

To resolve this issue, please revise your app’s support URL to ensure it directs users to a webpage with support information.

今までこれで何もなかったのに突然のリジェクトでした。

対応

TwitterURLとか指定してもリジェクトされることがあるみたいなので、とりあえずブログに「サポートページです」みたいな記事を投稿してそれを指定してみることにしました(面倒なので適当で済ませたい・・・)

以前はこれでした
f:id:TAKOYAKING:20210331151628p:plain
伝わってくる適当感・・・

新しい方 (こっちも適当だけどコメント入力欄があるからきっとサポートページです!!)
takoyaking.hatenablog.com

結果

審査通りました!

Unity: Colliderのsizeとbounds.sizeの違い

やること

Colliderのsizeとbounds.sizeの違い

状況

scaleを考慮したColliderのサイズを取得したかった。

比較

size

  • スケールを考慮しない
  • 対象のオブジェクトがインスタンス化前でも取得可能

bounds.size

  • スケールを考慮する
  • 対象のオブジェクトがインスタンス化前は取得不可(Vector(0,0,0)になる)


Collider bounds from a prefab? - Unity Forum

スケールを考慮したColliderの大きさを取得したいと思って、bounds.sizeすれば大丈夫かと思っていたら、インスタンス化される前は取得できないのがわかりました。

Firebase: Firebase Cloud StorageでiOSでGetFileAsyncを使うとUnknown Errorが発生する

やりたいこと

iOSでFirebaseのStorageからファイルをダウンロードしたい。

現象

AndroidやUnity Editorではうまくいくのに、iOSだとUnknown Errorが発生して、ダウンロードできない。

原因

iOSに関してはfile://のようなuriを指定しなければならなかった

対処

  • GetFileAsyncにはfile://を含んだUriを指定する
  • 保存したファイルを読み込む場合はfile://は不要

の2つのパスが必要になります。

ここにサンプルコードがありました。
quickstart-unity/UIHandler.cs at master · firebase/quickstart-unity · GitHub
firebase - GetFileAsync not working downloading from storage in Unity, built on iOS - Stack Overflow

ロードする流れは

  • 端末に一旦ダウンロードする
  • ダウンロードしたものを読み込む

となっています。

以下は重要なところをサンプルコードより抜き出し、ちょっと変更したものです。

void Main() {
    string destinationFilePath = PathUtil.PathToTemporaryCacheUri(filename);
    await replayRef.GetFileAsync(destinationFilePath);
    string destinationFilePathForSystemIO = PathUtil.FileUriStringToPath(destinationFilePath);
    var data = System.IO.File.ReadAllBytes(destinationFilePathForSystemIO); // 取得できた!
}

public class PathUtil
{
    static readonly string UriFileScheme = Uri.UriSchemeFile + "://";

    public static string PathToUri(string filename, string path) {
        if (filename.StartsWith(UriFileScheme)) {
            return filename;
        }
        return $"{UriFileScheme}{path}/{filename}";
    }

    public static string PathToTemporaryCacheUri(string filename) {
#if UNITY_EDITOR || UNITY_ANDROID
        return $"{Application.temporaryCachePath}/{filename}";
#else
        return PathToUri(filename, Application.temporaryCachePath);
#endif
    }

    public static string FileUriStringToPath(string fileUriString) {
        return Uri.UnescapeDataString((new Uri(fileUriString)).PathAndQuery);
    }
}

感想

盛大に罠にはまりました!

Unity: Animationのeventをoffにしたい

やりたいこと

特定のシーンでのみanimationのeventを無効化したい。

やり方

Is it possible to turn off/suppress event calls in an animation at runtime? - Unity Answers

GetComponent<Animator>().fireEvents = false;

でeventがoffになります

備考

animationのeventを削除するという考えもできますが、削除してしまうと他のインスタンスと削除された状態が共有されてしまうので、別のシーンに移ってもanimationのeventが削除されたままになり、想定と違うことになるかもしれません。

var clips = animator.runtimeAnimatorController.animationClips;
foreach (var clip in clips) {
	clip.events = new AnimationEvent[0];
}

Applivで「スチームパペット - タワーディフェンス」のレビュー記事を掲載してもらえました。

個人ゲーム開発で「スチームパペット」というタワーディフェンスゲームをリリースしましたが、Appliv様からレビュー記事を掲載してもらえました!
(ありがとうございます!)

【すぐわかる!】『スチームパペット - タワーディフェンス』 - Appliv
f:id:TAKOYAKING:20210210133119j:plain

どんな感じでレビューしてもらえるか?

ゲームの特徴の画面をスクリーンショットや動きのあるgifを使ってぱっとみてゲームの良さが伝わるようなレビュー記事となっています。

また、ユーザーレビュー投稿機能がついているのでユーザーからのレビューがつくと、華やかに見えます

【Appliv】Digital Puppet - プログラミングパズル
過去作だとレビューがついているのでよりアプリの雰囲気が伝わるのではないでしょうか。

まとめ

個人開発者にはおすすめのレビューサイトです。
iPhone/Androidアプリのレビュー掲載について - Appliv
こちらに依頼窓口があるのでレビューどこに出したら良いかわからない方はこちらから出してみるのが良いです。