facebook twitter hatena line email

「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("Zombie" + wordcnt + "Object");
+
         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>();
}

参考:http://tsubakit1.hateblo.jp/entry/2016/03/01/020510