回答編集履歴

2

コメントの誤りを修正

2020/03/02 00:23

投稿

Bongo
Bongo

スコア10811

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

位置調整案を追記

2020/03/02 00:23

投稿

Bongo
Bongo

スコア10811

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
+ ```