回答編集履歴
2
コメントの誤りを修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
var canvasRect = rootCanvasRectTransform.rect;
|
23
23
|
var canvasSize = canvasRect.size;
|
24
24
|
|
25
|
-
//
|
25
|
+
// 左下を起点とした、整数に丸めた中心座標を求め...
|
26
26
|
var quantizedCenter = canvasRect.min + new Vector2(Mathf.Round(canvasSize.x * 0.5f), Mathf.Round(canvasSize.y * 0.5f));
|
27
27
|
Debug.Log(quantizedCenter.ToString("F6"));
|
28
28
|
|
1
位置調整案を追記
answer
CHANGED
@@ -11,4 +11,25 @@
|
|
11
11
|
center.y = Mathf.Floor(center.y);
|
12
12
|
Debug.Log(center); // ぴったり整数の位置にしてみるとどうでしょう。
|
13
13
|
this.transform.position = center;
|
14
|
+
```
|
15
|
+
|
16
|
+
ルートキャンバスの「[Pixel Perfect](https://docs.unity3d.com/ScriptReference/Canvas-pixelPerfect.html)」をオンにすれば端数のある座標でもくっきり表示してくれるかもしれません。
|
17
|
+
これに頼らず位置を調整するなら、たとえば下記のようなやり方はどうでしょうか?
|
18
|
+
|
19
|
+
```C#
|
20
|
+
// まず自分が所属するルートキャンバスの矩形を取得し...
|
21
|
+
var rootCanvasRectTransform = this.GetComponentInParent<Canvas>().rootCanvas.transform as RectTransform;
|
22
|
+
var canvasRect = rootCanvasRectTransform.rect;
|
23
|
+
var canvasSize = canvasRect.size;
|
24
|
+
|
25
|
+
// 右下を起点とした、整数に丸めた中心座標を求め...
|
26
|
+
var quantizedCenter = canvasRect.min + new Vector2(Mathf.Round(canvasSize.x * 0.5f), Mathf.Round(canvasSize.y * 0.5f));
|
27
|
+
Debug.Log(quantizedCenter.ToString("F6"));
|
28
|
+
|
29
|
+
// それを自分の親の座標系に変換し、localPositionにセットする
|
30
|
+
var parentTransform = this.transform.parent;
|
31
|
+
var canvasToParentMatrix = (parentTransform != null ? parentTransform.worldToLocalMatrix : Matrix4x4.identity) * rootCanvasRectTransform.localToWorldMatrix;
|
32
|
+
var localQuantizedCenter = canvasToParentMatrix.MultiplyPoint3x4(quantizedCenter);
|
33
|
+
Debug.Log(localQuantizedCenter.ToString("F6"));
|
34
|
+
this.transform.localPosition = localQuantizedCenter;
|
14
35
|
```
|