質問: result; } // Set_oneSquareForwardの呼び出し元はAwake private void Awake() { Set_oneSquareForward(); } ``` Unityのインスペクター上の設定: ![画像の説明をここに入力](https://i.stack.imgur.com/mH5Qr.png) ![画像の説明をここに入力](https://i.stack.imgur.com/7ovmO.png) デバッグ中の変数の値: ![画像の説明をここに入力](https://i.stack.imgur.com/nBrzt.png) 私は、本ソースコードで、Imageゲームオブジェクトの幅をワールド座標に変換できると思いました。 なぜなら、参考サイトには、以下のように書かれており、その通りにコーディングしたつもりだからです。 1 RectTransformUtility.WorldToScreenPointで、UIの座標をスクリーン座標に変換する。 2 1で取得したスクリーン座標を、RectTransformUtility.ScreenPointToWorldPointInRectangleを使ってワールド座標に変換(result)する。 ただ、直接sizeDeltaをワールド座標に変換する参考サイトではないので、私のソースコードのどこかが間違っているのかもしれませんが、どこが間違っているかわかりませんでした。 また、参考サイトを元にして書いた、UI座標からスクリーン座標に変換するコードですが、 UI座標とは何かということが検索してもよくわかりませんでした。 他のサイトや英語のサイトも見てみましたが、参考にできそうなサイトがなく困っています。 どうすればUnity2DでuGUIのImageゲームオブジェクトの幅をワールド座標で取得できるのか教えて頂けるとありがたいです。 どうかよろしくお願いいたします。
回答: 自己解決しました。 解決した後のコードを投稿させて頂きます。 ``` // 呼び出し元: private void Awake() { Set_oneSquareForward(); } // 呼び出し先: /// ///プレーヤー1をスプライトの大きさぶん右へ表示 ///用途:プレーヤーの指に隠れてキャラクターが見えなくなることを防ぐために使う /// public static Vector3 oneSquareForward = new Vector3(2.5f, 0.0f, 0.0f); /// /// 機能:oneSquareForwardにワールド座標でPlayerGameObject()の幅を設定する。 /// /// 引数:なし /// /// 戻り値:なし /// /// 備考:参考サイト: /// 1<ワールド座標とローカル座標の変換>:https://dkrevel.com/unity-explain/space/ /// 2【Unity】GameObjectの幅と高さを取得・変更する方法(RectTransform):https://techno-monkey.hateblo.jp/entry/2018/05/12/150845 /// 3RectTransformからワールド座標に変換する方法:http://alien-program.hatenablog.com/entry/2017/08/06/164258 /// private void Set_oneSquareForward() { // ワールド座標の幅を取得したいimageゲームオブジェクト(Player)を取得する GameObject player = GameObject.Find("Player"); // PlayerのRectTransformを取得する RectTransform playerRectTransform = (RectTransform)player.transform; // Playerの幅(Width)を取得するローカル変数 Vector3 playerWidth = Vector3.zero; // Playerの幅を取得する playerWidth = new Vector3(player.GetComponent().sizeDelta.x, 0.0f, 0.0f); // 親のゲームオブジェクト(Canvas) GameObject canvas = GameObject.Find("Canvas"); // ローカル座標からワールド座標に変換 Vector3 world_playerWidth = canvas.transform.TransformPoint(playerWidth); // ↑の変換する際にCanvasのワールド座標のZ座標に変換しているので、z座標を他の処理の値と合わせるために0.0fを代入 world_playerWidth = new Vector3(world_playerWidth.x, 0.0f, 0.0f); // oneSquareForwardに変換結果を入れる oneSquareForward = world_playerWidth; } ```