Unity 知道世界坐标系转换成UI上对应的位置

方法一:

public class WorldToCanvas
{
    public static Vector2 Compute(RectTransform rectTransform, Camera wordCamera, Camera UIcamera, Transform game)
    {
        //rectTransform; //画布节点
        //wordCamera; //场景相机
        //UIcamera; //画布相机
        //game; //测试用的场景对象,世界坐标系中的物体

        Vector2 canvasSize = rectTransform.sizeDelta;
        Vector3 viewPortPos3d = wordCamera.WorldToViewportPoint(game.position);
        Vector2 viewPortRelative = new Vector2(viewPortPos3d.x - 0.5f, viewPortPos3d.y - 0.5f);
        Vector2 cubeScreenPos = new Vector2(viewPortRelative.x * canvasSize.x, viewPortRelative.y * canvasSize.y);
        return cubeScreenPos;
    }
}

方法二:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RocketRotate : MonoBehaviour
{
    //画布位置,
    public RectTransform UGUICanvas;
    //哪个camera
    public Camera mainCamera;

    void Update()
    {
        Vector3 mousePos;
        if (Input.GetMouseButtonDown(0))
        {
            //类似ScreenPointToWorldPoint
            RectTransformUtility.ScreenPointToWorldPointInRectangle(UGUICanvas, new Vector2(Input.mousePosition.x, Input.mousePosition.y), mainCamera, out mousePos);
            float z;
            if (mousePos.x > transform.position.x)
            {
                z = -Vector3.Angle(Vector3.up, mousePos - transform.position);
            }
            else
            {
                z = Vector3.Angle(Vector3.up, mousePos - transform.position);
            }
            transform.localRotation = Quaternion.Euler(0, 0, z);
        }
    }

正交模式下的相机适配:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值