回答編集履歴
2
コメントの誤りを修正
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
//
|
49
|
+
// 左下を起点とした、整数に丸めた中心座標を求め...
|
50
50
|
|
51
51
|
var quantizedCenter = canvasRect.min + new Vector2(Mathf.Round(canvasSize.x * 0.5f), Mathf.Round(canvasSize.y * 0.5f));
|
52
52
|
|
1
位置調整案を追記
test
CHANGED
@@ -25,3 +25,45 @@
|
|
25
25
|
this.transform.position = center;
|
26
26
|
|
27
27
|
```
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
ルートキャンバスの「[Pixel Perfect](https://docs.unity3d.com/ScriptReference/Canvas-pixelPerfect.html)」をオンにすれば端数のある座標でもくっきり表示してくれるかもしれません。
|
32
|
+
|
33
|
+
これに頼らず位置を調整するなら、たとえば下記のようなやり方はどうでしょうか?
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
```C#
|
38
|
+
|
39
|
+
// まず自分が所属するルートキャンバスの矩形を取得し...
|
40
|
+
|
41
|
+
var rootCanvasRectTransform = this.GetComponentInParent<Canvas>().rootCanvas.transform as RectTransform;
|
42
|
+
|
43
|
+
var canvasRect = rootCanvasRectTransform.rect;
|
44
|
+
|
45
|
+
var canvasSize = canvasRect.size;
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
// 右下を起点とした、整数に丸めた中心座標を求め...
|
50
|
+
|
51
|
+
var quantizedCenter = canvasRect.min + new Vector2(Mathf.Round(canvasSize.x * 0.5f), Mathf.Round(canvasSize.y * 0.5f));
|
52
|
+
|
53
|
+
Debug.Log(quantizedCenter.ToString("F6"));
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
// それを自分の親の座標系に変換し、localPositionにセットする
|
58
|
+
|
59
|
+
var parentTransform = this.transform.parent;
|
60
|
+
|
61
|
+
var canvasToParentMatrix = (parentTransform != null ? parentTransform.worldToLocalMatrix : Matrix4x4.identity) * rootCanvasRectTransform.localToWorldMatrix;
|
62
|
+
|
63
|
+
var localQuantizedCenter = canvasToParentMatrix.MultiplyPoint3x4(quantizedCenter);
|
64
|
+
|
65
|
+
Debug.Log(localQuantizedCenter.ToString("F6"));
|
66
|
+
|
67
|
+
this.transform.localPosition = localQuantizedCenter;
|
68
|
+
|
69
|
+
```
|