「今日まなび」は最低1日1h、ゲーム作るために学びたいことなんでもいいから学んでいくコーナー。
完全自分用でまとめることは考えなくてOK.1記事1h。(1hでどんだけ学べるかのスピード感もみていきたいので)
1hのうちに次回学ぶことも決定しておくこと
環境:unity2021.3.40f
前回の続きです
今日の学び
今回は名前用のテキストを常に吹き出しの左上に配置したい、ということを目指してやってみる。
PivotやAnchorの設定も使える!
前回、ワールド配置用のTextMeshProのTransformはRectTransformになっている、と書きました。
それならuGUIと同じ感覚で左寄せに変えてみます。
できた!
ちなみに中央のままだとこうなっちゃうよ
あとは吹き出しの大きさに合わせて位置を調整する
前回、吹き出しの大きさを、ContentsSizeFitter
を使ってテキストのサイズにあわせて可変にするということをしました。
今度は吹き出しの大きさに合わせて名前テキストの位置を調整します。
uGUIであれば赤枠の部分でうまく設定できますが、
ワールド配置用のTextMeshProにはその項目がないので自分で計算します。
using TMPro; using UnityEngine; using UnityEngine.UI; publicclassTest012 : MonoBehaviour { public Transform frameSprite; public TextMeshPro nameText; void Start() { RectTransform textRectTran = GetComponent<RectTransform>(); GetComponent<TextMeshPro>().SetText("hellow world !! hellow world !!"); nameText.SetText("tama chan"); //RectTransform#sizeDeltaをすぐ取得したいので更新する ContentSizeFitter csf = GetComponent<ContentSizeFitter>(); csf.SetLayoutHorizontal(); csf.SetLayoutVertical(); Debug.Log("テキストのサイズ"+ textRectTran.sizeDelta); //テキストにあわせて枠画像の大きさを調整 Vector2 FRAME_SPRITE_SIZE =new Vector2(32, 32); //吹き出し画像の大きさ。PixcelPerUnity = 1 Vector2 offSet =new Vector2(2, 2); //テキストぴったりにしたくないので余白幅を設定 Vector2 targetSize = textRectTran.sizeDelta + offSet; frameSprite.localScale =new Vector3(targetSize.x / FRAME_SPRITE_SIZE.x, targetSize.y / FRAME_SPRITE_SIZE.y, frameSprite.localScale.z); //枠画像の大きさに合わせて必ず左上に名前が表示されるようにする nameText.rectTransform.localPosition =new Vector3(-(FRAME_SPRITE_SIZE.x * frameSprite.localScale.x /2), nameText.rectTransform.localPosition.y, nameText.rectTransform.localPosition.z); } }
とりあえずやりたいことはできた!