2023年9月26日火曜日

UTF-8-Macの濁点半濁点ユニコードの注意

 Macのファイル管理に使われているUTF-8-Macですが。

 UTF-8-Macは濁点自体が一つの文字として扱われています。

文字数の例

  • バイオリン  UTF-8-Macでは6文字。通常のユニコードでは5文字
  • パパイヤ  UTF-8-Macでは6文字。通常のユニコードでは4文字

注意点

 UTF-8-Macは通常のUTF-8と濁点以外互換性があります。

 UTF-8でMacのファイル名を検索すると濁点半濁点のファイルが除外されてしまいます。

検索自体は働くのでエラーが発見しにくいです。

所感

中途半端な互換性があるためバグを見落としやすいです。

Appleの独自規格は開発者の天敵です。

2023年9月11日月曜日

配列にAddListenerを使う際の注意

間違った使い方

  for (i=1:i<5:i++)

    {

        buttons[i].onClick.AddListener(() => buttonClick(i)); 

    }

五つのボタンはクリック時に引数(4)でbuttonClickが実行される

正しい使い方

for (i=1:i<5:i++)

    {

        int count = i;  //ローカル変数にいれる

        buttons[i].onClick.AddListener(() => buttonClick(count));  //引数にローカル変数使う

    }

5つのボタンは異なる引数(0〜4)で実行される

2023年9月8日金曜日

同名のオブジェクトがシーンに存在する場合のNullReferenceException:

 同名のオブジェクトがシーンに存在する場合に

複数の個所でFindからインスタンスを得ると競合してしまう


メニュー画面とセーブ画面に使われている同名のボタン(閉じるボタン)に対してクリックリスナーを設定した場合。後から設定されるクリックリスナーが適応される。

>NullReferenceException: Object reference not set to an instance of an object

YSSave.MyOnClick (System.Int32 index) (at Assets/YSSave.cs:34)

YSSave.<Start>b__4_1 () (at Assets/YSSave.cs:19)

UnityEngine.Events.InvokableCall.Invoke () (at <f1212ad1dec44ce7b7147976b91869c3>:0)

UnityEngine.Events.UnityEvent.Invoke () (at <f1212ad1dec44ce7b7147976b91869c3>:0)

UnityEngine.UI.Button.Press () (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)

UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)

UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:57)

UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)

UnityEngine.EventSystems.EventSystem:Update() (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:501)