StartsWithに空文字は使えません。
使用例
if (str.StartsWith(""))すべての文字をイフブロックに入れてしまう。
if (str.Equals(""))空文字だけをイフブロックに入れる。
解決方法
StartsWithは文字列の先頭を判別してくれる関数です。
空文字の判断はEqualsを使います。
StartsWithに空文字は使えません。
if (str.StartsWith(""))すべての文字をイフブロックに入れてしまう。
if (str.Equals(""))空文字だけをイフブロックに入れる。
StartsWithは文字列の先頭を判別してくれる関数です。
空文字の判断はEqualsを使います。
Macのファイル管理に使われているUTF-8-Macですが。
UTF-8-Macは濁点自体が一つの文字として扱われています。
UTF-8-Macは通常のUTF-8と濁点以外互換性があります。
UTF-8でMacのファイル名を検索すると濁点半濁点のファイルが除外されてしまいます。
検索自体は働くのでエラーが発見しにくいです。
中途半端な互換性があるためバグを見落としやすいです。
Appleの独自規格は開発者の天敵です。
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)で実行される
同名のオブジェクトがシーンに存在する場合に
複数の個所で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)
unityでUIを非表示にする方法
Canvas cv;
cv = GameObject.Find("CanvasYSC").GetComponent<Canvas>();
cv.enabled=false;
Canvasとenabledを利用することで高速に非表示にできます
Unity TextMeshProをGetComponentできない問題。
新しいUnityはUIからボタンを作成するとTextMeshProがセットで子に入る
このTextMeshProはTextの進化版です。
古いUIと混同しているためかゲットコンポーネントで取得できません。
シーンのゲームオブジェクトからTextMeshProを削除しTextを追加する。
新しい機能をデフォにされると既知のコードが使えなくて不便です。
unityC#のハッシュテーブルのDictionaryは直接シリアライズできません。
Dictionaryをゲームで保存したい場合は以下の方法があります。
//using System.Collections.Generic;
//Dictionaryを二つの文字型一次配列に変換する
Dictionary<string, string> dic = new Dictionary<string, string>
{
{ "1", "いち" },
{ "2", "に" },
{ "3", "さん" }
};
//変換する配列を作成する
string[] keys = new string[dic.Keys.Count];
string[] vals = new string[dic.Values.Count];
//二つの配列に変換する
dic.Values.CopyTo(vals, 0);
dic.Keys.CopyTo(keys, 0);
Dictionary<string, string> newDic = new Dictionary<string, string>();
toDictiotnary(keys, vals, newDic);
Debug.Log(newDic["2"]);
public void toDictiotnary(string[] keys, string[] vals, Dictionary<string, string> dic)
{
if (keys.GetLength(0) == vals.GetLength(0))
{
for(int i = 0; i < keys.GetLength(0); i++)
{
dic[keys[i]] = vals[i];
}
}
}
に
ディグショナリは便利ですがC#の仕様が固いです。
ハッシュテーブルはディグショナリと互換がありますが推奨されていません。
public Dictionary<string, string> d1,d2;
ディグショナリはハッシュテーブルと互換性があるので簡単に置き換えられます。