方法一:
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);
}
}
}
正交模式下的相机适配: