FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】アプリをアプデしようとしたら、エラーがでてアプデできなかったんですよ。エラーの正体は過去あげてたテストのやーつ 

    こんにちは。坂内っす。
    あ~ もう10月も終わりますね。
    あと2か月で今年も終わってしまうなんて・・・・
    時間が過ぎるのが早すぎる!


    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:



    アプリをいじってGoogle様へアプデをしたところ、こんなメールが来ました。



    あれ?なんだろう?
    今まで普通に通ってたのに、いきなりアプデが通らなくなった・・・・・

    こんなことありませんか?


    unity-adsのバージョンがほにゃららということで、unity-adsを消したり、バージョンを合わせたりしても、通りません。

    Xで色々聞いたところ、このメールのここ注目だそうです。




    バージョンコード5


    なにこれ?

    これのことです。



    ※実際今回問題となってるアプリはバージョン35です。

    バージョンコード5のファイルがおかしいよって話。

    でも・・・・・バージョン5とかって・・・・2020年にIAPのテストするためにクローズドテストとしてあげたやつで・・・・




    こんな感じで見当たらないんですよね。

    まさかと思って、「表示」を押したら・・・・・




    こんなところにバージョン5がありました!!

    なんかクローズテストって消せないんですよね。しょうがないので最新のaabをクローズテストにアップロード。

    その後本番をアップロードをしたら成功。

    もうさ、過去の使ってないようなaabとかapkを見ないでほしいですよね。

    ほんと無駄に時間くいました。


    ってことで、Googleのアプデが通らなくなった!いきなりアプリが消された!
    って時は、メールのバージョンコード見てみて!

    テストとかで過去に上げてたやつが原因でアプリが消されたりするかも!

    ってことで、メモですが、書いておきました。


    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Riderのインポート補完で自分に不必要なものを出さない方法 

    こんにちは。
    大坂です。

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    最近Riderでコードを書いているのですが、インポートの補完で必要ないものが出てきて鬱陶しいことがあります…。

    例えば Using を指定していないときに Image を使おうとしてインポート補完しようとするとこんな感じに出てきます。

    なんかいっぱい出てきますね…。

    ここに出さないようにするには、[ファイル]-[設定]を開いて、[エディター]-[一般]-[自動インポート]の「次の型/メンバーをインポートか機能から除外する」に追加していけばインポート補完からでなくなるみたいです。




    試しに「System.Net.Mime.*」を例外に追加して、インポート補完を確認してみました。


    先ほどは4個の補完候補が出ていたのが3個になっていますね。
    選択させられて地味にめんどくさいので地道に設定を増やしていくと快適に作業ができるんですかね…。

    ほとんどデフォルト設定で Rider を使っているので色々設定していかないといけない感じですね。
    ではではノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】TMProだと禁則処理だとか文字送りアニメーションとか簡単にできるんすね! 

    こんにちは。坂内っす。

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:



    以前SuperTextMeshで禁則処理の話をしたと思います。
    http://halcyonsystemblog.jp/?q=%E7%A6%81%E5%89%87%E5%87%A6%E7%90%86&charset=utf-8

    TMProでは、デフォルトで禁則処理がされているようです。


    素敵ですね!


    さて、TMProでの文字送り(タイプライター)の方法を調べてみました。
    STMだと簡単にできたのですが、TMProではボタンぽちっとはできないようですね。

    maxVisibleCharactersをコードで制御する方法が一般的なようです。

    maxVisibleCharactersは表示する文字数のことで、

    maxVisibleCharacters = 10;

    とやれば、10文字表示するということです。

    これをコルーチンなどで数値をカウントアップしていけば、文字送りができそうです。


    [TMPTypewriter.cs]

    using Cysharp.Threading.Tasks;
    using TMPro;
    using UnityEngine;

    public class TMPTypewriter : MonoBehaviour
    {
    TMP_Text lblText;
    int txtCnt = 0;

    private void Awake() {
    lblText = GetComponent<TMP_Text>();
    lblText.maxVisibleCharacters = txtCnt;
    }

    private async UniTask Start() {
    for (int i = 0; i < lblText.text.Length; i++) {
    lblText.maxVisibleCharacters = txtCnt;
    await UniTask.WaitForSeconds(0.08f);
    txtCnt++;
    }
    }
    }



    なんかこんな感じでmaxVisibleCharactersをカウントアップしていけば、できるようです。





    また、TextMeshProAnimatorを使う方法もあるぽいです。

    Gitからこちらを入れます。
    https://github.com/coposuke/TextMeshProAnimator

    TextMeshProSimpleAnimatorというコンポーネントが使えるようになるので、TMProのオブジェクトにつけるだけ。



    これだけで、Speed Per Characterの時間で文字送りができます。

    これ便利!

    TextMeshProAnimatorさんのGIT見る感じ、文字送り以外いろいろなアニメーションが簡単にできるようですね!

    つかってみてください!


    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】シーンビューだけオブジェクトの表示の切り替え 

    こんにちは。
    大坂です。


    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    シーンビューだけオブジェクトの表示の切り替えときです。

    GameObjectを非アクティブを切り替えてもいいのですが、これだと色々触ったときにアクティブにするのを忘れたりして、再生した後にあっと思って停止して戻すことがあります…。


    そんな時は Hierarchy の目のマークをクリックしてあげると GameObjectをを非アクティブにすることなく対象のオブジェクトの表示が確認できます。


    GameObjectを選択して非アクティブにするという手間も省けますし、表示部分を探すのに便利なのでよく使っています。
    少し効率が上がるので知らなかった人は使ってみてください。
    ではではノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】古いRuntimeVersionでシリアライズしたデータを、新しいUnityでデシリアライズする方法 

    こんにちは。
    今週は5年ぶりくらいに旅行に行ってきます。坂内っす。


    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:



    以前Unityの古いバージョンでシリアライズしたものが、新しいUnityでデシリアライズできなくなるって話をしたと思います。
    http://halcyonsystemblog.jp/blog-entry-617.html

    API33対応のために、さらに新しいUnityにしたんですが、Script Runtime Versionがなくなってしまい、再度Deserializationができなくなりました。

    色々調べたところ、以下のことを書いているのを発見。
    「The Dictionary data can success deserialize when change the .net version, if the Dictionary data is not initialize or contain data. ie. if the dictionary data cont != 0 or not initialize the "BinaryFormatter Serialization" will not broken.」

    「ディクショナリ データが初期化されていない場合、またはデータが含まれている場合、.net バージョンを変更すると、ディクショナリ データは正常に逆シリアル化されます。つまり。辞書データが cont != 0 であるか、初期化されていない場合、「BinaryFormatter シリアル化」は壊れません。」

    だとか。

    以下の方法で解決!
    Unity2022で対応できました。

    ①以下のコードを作成

    【OlderDotNetVersionMigrationBinder.cs】

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Runtime.Serialization;
    using System;

    public class OlderDotNetVersionMigrationBinder : SerializationBinder
    {
    public override Type BindToType(string assemblyName, string typeName)
    {
    if (typeName.StartsWith("System.Collections.Generic.Dictionary"))
    {
    var readType = Type.GetType(typeName);

    return typeof(OldSaveDataDictionary<,>).MakeGenericType(readType.GenericTypeArguments);
    }
    else
    {
    return Type.GetType(String.Format("{0}, {1}", typeName, assemblyName));
    }
    }

    }

    [System.Serializable]
    public class OldSaveDataDictionary<TKey, TValue> : Dictionary<TKey, TValue>
    {
    public OldSaveDataDictionary() : base() { }
    public OldSaveDataDictionary(SerializationInfo info, StreamingContext context) : base(info, context)
    {
    }

    public override void OnDeserialization(object sender)
    {
    try
    {
    base.OnDeserialization(sender);
    }
    catch { }
    }
    }


    ②ロードし、デシリアライズするところに①のバインダーをかますだけ。


    public static T Load<T>( string prefKey ){
    if (!PlayerPrefs.HasKey(prefKey)) return default(T);
    #if UNITY_IPHONE || UNITY_IOS
    System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER","yes");
    #endif

    BinaryFormatter bf = new BinaryFormatter();
    string serializedData = PlayerPrefs.GetString( prefKey );

    bf.Binder = new OlderDotNetVersionMigrationBinder();

    MemoryStream dataStream = new MemoryStream( System.Convert.FromBase64String(serializedData) );
    T deserializedObject = (T)bf.Deserialize( dataStream );

    return deserializedObject;
    }



    BinaryFormatter.BinderにOlderDotNetVersionMigrationBinderを設定してあげると、うまくいくみたい。
    ぶっちゃけ何やってるかわからんけどさw

    これでエラーが出なく、動きましたとさ。


    古いアプリをBinaryFormatterでセーブロードしてて、新しいUnityにしたら動かなくなったとかの時に役に立つかも?

    あんまりBinaryFormatter使わないほうがいいっぽいですね!
    EasySaveとかのアセット使ったほうが良さそう!


    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】配列の最大値のindexが知りたい時 

    こんにちは。
    大坂です。

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    配列の最大値のindexが知りたい時のお話。
    まぁ「for」などで回して取得してもいいのですが、Linqを使うと簡単ですね。
    Linqの「Max」と配列の「IndexOf」を使うだけです。

    int[] array = { 1, 5, 3, 4, 2 };
    int index = array.IndexOf(array.Max());
    Debug.Log($"index:{index}");



    ちゃんと index 1 が取れますね。

    最小値ののindexが知りたい場合は「Min」を使ってやればいい感じですね。

    大した話ではないですが、使えるときがあるかもしれませんね。
    ではではノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】スクリプトから画面の解像度を変更する 

    こんにちは。
    大坂です。

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    ゲームのオプションなどで画面の解像度を変更したいときにスクリプトから変更する方法です。

    Screen.SetResolution
    を使えばできますね。
    引数は横幅・縦幅・フルスクリーンにするかどうかですね。
    1280x720のフルスクリーンにするのであればこんな感じの設定。

    Screen.SetResolution(1280, 720, true);

    これだけで変更できます。

    後、Screen.resolutionsでディスプレイが対応している解像度一覧も取得できるみたいなのでこれを使ってみるのもいいですね。


    サンプルのままですが…

    Resolution[] resolutions = Screen.resolutions;

    foreach (var res in resolutions)
    {
    Debug.Log(res.width + "x" + res.height + " : " + res.refreshRate);
    }


    一応エディターで実行するとこんな感じで取れますね。


    この辺をうまく使えば解像度を変えても問題なさそうですかね。
    ではではノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンUnityブログ】uGUIでオブジェクトとオブジェクトを結ぶ線とかを作ってみる。 

    こんにちは。
    だいぶ涼しくなってきた感じがします・・・・いやまだまだ暑いっすね。
    20度前半にならないと涼しい感じはしませんね。
    坂内っす。

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    uGUIでオブジェクト(Image)とオブジェクト(Image)を結ぶ線を引く方法を簡単に紹介。

    こんな感じでオブジェクトを結ぶ線を作ります。



    ①unity.uiextensionsを入れる。

    Package Managerでuiextensionsを入れます。
    https://github.com/Unity-UI-Extensions/com.unity.uiextensions

    ②空のオブジェクトを作成


    ③空のオブジェクトにUILineConnectorを追加


    ④UILineConnectorのTransformsにつなげる2つのオブジェクトをアサイン


    これだけで、先ほど作成した空のオブジェクトが2つのオブジェクトを繋ぐ線になります。

    線の太さは、UILineRendererコンポーネントのLineThicknessの数値で変更できます。
    また、線の色もUILineRendererコンポーネントのColorを変えることで変更できます。


    簡単にオブジェクト間を結ぶ線が作れますね。

    では、今日はこの辺で。

    あでゅ~ノシ


    Category: 開発日記(Unity)

    tb 0 : cm 0