TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

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
こちらに依頼窓口があるのでレビューどこに出したら良いかわからない方はこちらから出してみるのが良いです。

アプリ島 可愛いゲーム情報で「スチームパペット - タワーディフェンス」をレビューしてもらえました。

最近個人ゲーム開発で「スチームパペット」というタワーディフェンスゲームをリリースしました!

アプリ島 可愛いゲーム情報のしるるさんにレビューを書いていただけました!
apps-island.com


可愛いゲームしか取り扱っていないかと思ってましたが、全範囲OKのようですので個人開発者さんは新作ゲームを作ったら、依頼してみてはどうでしょうか?

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

実際にダウンロードして遊んでもらえて、注目の点についてわかりやすく丁寧に説明してもらえます。
説明文とそれに対する会話があり、読みやすい内容になっています。

そして最後に良かったところ・悪かったところをまとめてもらえます。
ユーザーだけでなく、開発者自身も役に立つのではないでしょうか!

まとめ

作ったらレビューを送ることになるかと思いますが、どこに出せば良いかわからない方は依頼してみてはどうでしょうか?
レビュー依頼の方法は以下からご覧ください。
apps-island.com

Unity: iOSエラー「Symbol not found: _OBJC_CLASS_$_GADAdLoader」

現象

Symbol not found: _OBJC_CLASS_$_GADAdLoader

UnityでiOS用にビルドしてiOSエミュレータでアプリが起動すると上記のエラーが出てアプリが起動せずクラッシュします。

環境

  • Unity 2020.2.2f
  • Google Mobile Ads Unity Plugin v5.4.0
  • Firebase各種 7.02

原因

GoogleMobileAds.xcframeworkを追加してあげればクラッシュしなくなり、広告が表示されます。
(この対応があっているかは不明です)

観察

一旦追加した後にxcodeのプロジェクトを削除して、もう一回生成すると、GoogleMobileAds.xcframeworkは追加されていない状態になるのですが、なぜかうまく動くようになりました。

いいのだろうか??