「Unity/3d/3dから2dの座標変換」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→3dから2dの座標変換のサンプル) |
|||
行39: | 行39: | ||
void LabelCall() { | void LabelCall() { | ||
Camera camera = GameObject.Find("FPS Camera").GetComponent<Camera>(); | Camera camera = GameObject.Find("FPS Camera").GetComponent<Camera>(); | ||
− | GameObject zombie = GameObject.Find(" | + | GameObject zombie = GameObject.Find("EnemyObject"); |
GameObject obj = GameObject.Find("LabelText"); | GameObject obj = GameObject.Find("LabelText"); | ||
LabelPosition labelPosition = obj.GetComponent<LabelPosition>(); | LabelPosition labelPosition = obj.GetComponent<LabelPosition>(); |
2021年2月24日 (水) 05:44時点における版
3dから2dの座標変換のサンプル
LabelTextのGameObjectに以下csをAddComponentsする。
LabelPosition.cs
using UnityEngine; public class LabelPosition : MonoBehaviour { [SerializeField] public Camera mainCamera, uiCamera; [SerializeField] public GameObject cube; [SerializeField] public Canvas canvas; void Update() { var pos = Vector2.zero; var worldCamera = mainCamera; var canvasRect = canvas.GetComponent<RectTransform>(); Vector3 position = new Vector3( cube.transform.position.x, cube.transform.position.y + 1f, cube.transform.position.z ); var screenPos = RectTransformUtility.WorldToScreenPoint(worldCamera, position); RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPos, uiCamera, out pos); this.GetComponent<RectTransform>().localPosition = pos; } }
呼び出し方サンプル
Example.cs
void LabelCall() { Camera camera = GameObject.Find("FPS Camera").GetComponent<Camera>(); GameObject zombie = GameObject.Find("EnemyObject"); GameObject obj = GameObject.Find("LabelText"); LabelPosition labelPosition = obj.GetComponent<LabelPosition>(); labelPosition.mainCamera = camera; labelPosition.uiCamera = camera; labelPosition.cube = zombie; labelPosition.canvas = GameObject.Find("Canvas").GetComponent<Canvas>(); }