2017-01-23 5 views
1

私はUnityでCellSizeのために何かを試しています。 これはGridLayoutGroupコンポーネント用です。私は、電卓を使っていたら完全にうまく動作することを発見しました:Screen.Width/1280、Screen.Height/720。 私は基本解像度として720pを使用しているので、そこにはすべてがうまく見えます。これをベースとして使用します。 100x100は720pのセルサ​​イズに適しています。浮動小数点値は1または0にデフォルト設定されています

たとえば、解像度は1280:1024です。 出てくるはずです(100,142)ただし、常に出てきます(1.0、1.0)。 解像度が小さい場合(320x200など)(0.0、0.0)です。

SlotPanel.GetComponent<GridLayoutGroup>().cellSize = new Vector2((Cam.pixelWidth/1280) * 100, (Cam.pixelHeight/720) * 100); 

カムは、プレイヤーが使用しているカメラです:

は、ここに私のコードです。 私がいた試した別のコード:

SlotPanel.GetComponenet<GridLayoutGroup>().cellSize = new Vector2((Screen.Width/1280) * 100, (Screen.Height/720) * 100); 

どちらの結果を同じ問題に。この時点で、私はどれほど迷惑をかけるような言葉を失っています。私はなぜ数学が正しいのか分かりませんが、それは正しく機能しません。

+0

代わりに1280.0、100.0を試してください – doctorlove

+0

@doctorlove実際に '1280f'(または' 1280.0f')と '720f'(' 720.0f')は 'Vector2'の単精度を必要とするので以下の回答)。 –

答えて

5

Cam.pixelWidth/1280 &c。 整数演算で評価されます。残りの部分は破棄されます。

100.0 * Cam.pixelWidth/1280に書き直して浮動小数点で評価されるようにしてください(プロモーションの2つの整数引数のため)。他の方法もありますが、最初の係数を変更すると、コードの読者にあなたがしたいことを教えてくれるので、これを明確にすることができます。

(式の型を単精度浮動小数点型にする必要がある場合は、100.0の代わりに100fを使用してください)。

これは、余分な括弧を使用して実際に有害な場合の1つです。

+3

であり、100.0fの後ろにある 'f'を忘れないでください.1つは倍音の代わりに浮動小数点を使用します。 – TheDjentleman

+1

余分な括弧がここでは有害であることに同意しません。彼らは問題に関連していません。しかし、@xyLe_は、 '' double'である '100.0'を使うべきではありません。なぜなら' Vector2'コンストラクタを呼び出す前に 'float'(System.Singleとも呼ばれます)に変換しなければならないからです。 。したがって、この場合には '100.0f'または' 100f'を使うべきです。操作の順序を保持したい場合は、代わりに '1280f'を使用してください。私は最初に分割し、後で100を掛けても何の問題も見ません。 –

+0

@JeppeStigNielsen: '100f'ケースを追加しました。私は3amのデバッグセッションから傷跡に苦しんでいます。ここでいくつかの派手なクオンタイズは、整数型をグループ化した式にかっこを導入しました。悲しいことに、それは「測定の変化」の用語にあったので、ゼロの効果はすぐには目に見えませんでした。 **あなたの演算子優先順位表**の学習に代わるものはありません。 – Bathsheba

関連する問題