備忘録
うまく行かなくて色々調べて解決したことまとめ。
スライスしたのにスプライトが伸びる
(問題)スプライトエディターでちゃんとスライスして、画像タイプもスライスにしてるのになぜかフチが伸びる。
(解決)単位毎のピクセル乗数というパラメータ(多分フチの8ブロックの割合を決める)を増やしたら解決
スクリプトからRectTransformの幅が変更できない
(問題)RectTransform.sizeDelta.xを格納したfloat型の変数を定義して数値代入したけど実際の幅が変わらない
※1 変数の数値をDebug.logに出力してみたけどちゃんと変わってた
※2 エラーは出なかった(謎)
private float rect = GetComponent<RectTransform>().sizeDelta.x;
rect = 100f;
(解決)直接xの値を変えるのではなく変数の型をRectTransformにして、変数.sizeDeltaにVector2型を代入したら行けた
private RectTransform rect = GetComponent<RectTransform>();
rect.sizeDelta = new Vector2 ( 100f, 100f);
Failed to find entry-pointsエラー
(問題)何もしてないのに(特大フラグ)いきなりコンパイルエラーが出た。
(解決)Assets直下にあって邪魔だった、プロジェクト作った時からあったURPの設定周りのScriptableObject三つをSettingsフォルダに突っ込んだのが原因だった。ちゃんとAssets直下に戻したら無事エラー解消。
DoTweenで変数を変更する方法
(問題)RotateとかMoveとかFadeとか、特定のメソッドじゃなくて普通の変数をDoTweenで変更したかった。
(解決)以下。※のところは多分同じなら何でもいい。このラムダ式? あんまりよくわかってない。
DOTween.To(() => 変数, (※) => 変数 = ※, 変数の型の中身, アニメーションのデュレーション);
スクリプトからImageのcolor変えると真っ白になる
(問題)何色を何色を指定しても真っ白になってしまう
(解決)RGB系の256色かと思ってた。0~1だった。256にするにはcolor32を使うらしい。
image.color = new color32(255, 0, 0);
//赤色
二次元配列から値が取り出せない
(問題)そのまま。インデックスエラー? が出る
(解決)インデックスの指定方法間違ってた。
Debug.Log(array[n][m]); //誤
Debug.Log(array[n,m]); //正
JavaScriptの癖でおかしいと思えなくてしばらくドツボっていた。
孫オブジェクトの回転が狂う
(問題)FBXのエクスポート設定をちゃんとUnity用にしてるのに、孫オブジェクトの回転が狂う
(解決(してない))どうしようもない。調べた限り、同じ問題を報告してる人はいっぱいいたけど、解決方法はないっぽい。Blender上で孫以上のペアレントを作らない、若しくはUnityエディタ上で位置と回転を直すのどちらかしかないそうな。
Random.RangeとRandom.RandomRangeの違い
(疑問)Randomメソッドを使おうとしたときにだいたいサジェストに出てくるRandomRangeてなんぞ。
(解決)昔使われてたメソッドらしい。機能はRandom.Rangeとまったく一緒だけど、現在は非推奨。使わないが吉。
スクリプトの変更がインスペクターに反映されない
(問題)新たにPublicのフィールドを追加したのに、インスペクターに枠が出てこない。
(解決)ほかのところでコンパイルエラー無視してると、スクリプトのリロードが動かないらしい。
null演算子が機能しない?
(問題)null条件演算子(例1)とかnull合体演算子(例2)とかが機能してないっぽい。普通にnullエラーが返ってくる。
例1。objectAがnullじゃなかったら非表示にしてね、って処理。
public GameObject objectA;
void Start() {
objectA?.SetActive(false);
}
例2。objectAが設定されていたらAを、AがnullだったらBをCに代入してね、って処理。
public GameObject objectA;
public GameObject objectB;
void Start()
{
GameObject objectC = objectA ?? objectB;
}
(解決)UnityEngineネームスペースで==の処理を上書きしてるから、ちゃんと動かないらしい。よく見たら、message欄に「Unity objects should not use null propagation.」とか「Unity objects should not use null coalescing.」って書いてあったわ。普段見ないから気づかなかった。
Unity側のオブジェクトが絡むと動かないだけで、stringとかintとかに使うなら別に問題はないっぽい。が、ややこしいのでおとなしくif文で統一した方がいいかな。
(補足)三項演算子は大丈夫らしい。
hogeがtrueだったらA、falseだったらBをCに代入してね、って処理。
public bool hoge;
public GameObject objectA;
public GameObject objectB;
void Start()
{
GameObject objectC = hoge ? objectA : objectB;
}