「Unity/3d/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("HumanObject"); |
GameObject obj = GameObject.Find("LabelText"); | GameObject obj = GameObject.Find("LabelText"); | ||
LabelPosition labelPosition = obj.GetComponent<LabelPosition>(); | LabelPosition labelPosition = obj.GetComponent<LabelPosition>(); | ||
2021年2月24日 (水) 05:43時点における版
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("HumanObject");
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>();
}
