物体对象看向相机
public static void LookToCamera(this Transform target, Camera camera, bool IsView = true)
{
if (IsView)
{
Rect screenRect = new Rect(0, 0, Screen.width, Screen.height);
if (screenRect.Contains(camera.WorldToScreenPoint(target.position)))
{
target.LookAt(target.position + camera.transform.rotation * Vector3.forward, camera.transform.rotation * Vector3.up);
}
}
else
{
target.LookAt(target.position + camera.transform.rotation * Vector3.forward, camera.transform.rotation * Vector3.up);
}
}
世界坐标转向UI坐标
public static Vector2 WorldPosToUIPos(this Vector3 worldPos, Camera mainCamera, Camera uiCamera, RectTransform uiRect)
{
Vector3 scrennPos = mainCamera.WorldToScreenPoint(worldPos);
RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRect, scrennPos, uiCamera, out Vector2 uiPos);
return uiPos;
}
public static void SetUIPosByWorldPos(this RectTransform rect, Transform targetTrans, Vector2 offset)
{
var mainCamera = Camera.main;
var uiCamera = QFramework.QUICameraUtil.UICamera;
var mainRect = QFramework.UIManager.Instance.transform as RectTransform;
Vector3 screenPos = mainCamera.WorldToScreenPoint(targetTrans.position);
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(mainRect, screenPos, uiCamera, out Vector2 uiPos))
{
rect.localPosition = uiPos + offset;
}
}
根据对象到相机的距离自动调节自身尺寸大小
public static void AutoSizeByCameraDistance(this Transform trans,float minDistance, float maxDistance, float _value)
{
var _camera = Camera.main;
float distance = Vector3.Distance(trans.position, _camera.transform.position);
distance = Mathf.Clamp(distance, minDistance, maxDistance);
Vector3 scale = Vector3.one * distance * _value;
trans.localScale = scale;
}