備忘録

うまく行かなくて色々調べて解決したことまとめ。


スライスしたのにスプライトが伸びる

(問題)スプライトエディターでちゃんとスライスして、画像タイプもスライスにしてるのになぜかフチが伸びる。

(解決)単位毎のピクセル乗数というパラメータ(多分フチの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;
}

いいなと思ったら応援しよう!