• UGUI世界坐标转换为UI本地坐标


    以下是实现hud跟随3D物体的脚本,只是测试用,不是开发中的代码,脚本挂在任意游戏物体上 demo下载

    using UnityEngine;

    public class SceneFollowUI : MonoBehaviour
    {
    public RectTransform hud; //Hud
    public RectTransform canvas;//UI的父节点
    public Transform parent; //跟随的3D物体
    public Camera uiCamera; //UICamera

    Vector3 offset; //hud偏移量
    Vector3 cachePoint;
    float originalDistance;
    float factor = 1;
    bool visiable = true;

    void Start()
    {
    offset = hud.localPosition - WorldPointToUILocalPoint(parent.position);
    cachePoint = parent.position;
    originalDistance = GetCameraHudRootDistance();
    UpdateVisible();
    }

    void LateUpdate()
    {
    if (cachePoint != parent.position)
    {
    float curDistance = GetCameraHudRootDistance();
    factor = originalDistance / curDistance;
    UpdatePosition(); //更新Hud位置
    UpdateScale(); //更新Hud的大小
    UpdateVisible(); //更新Hud是否可见,根据需求设置:factor或者根据和相机距离设置,一定范围内可见,相机视野范围内可见 等等
    }
    }


    private void UpdateVisible()
    {

    }

    private void UpdatePosition()
    {
    hud.localPosition = WorldPointToUILocalPoint(parent.position) + offset * factor;
    cachePoint = parent.position;
    }

    private void UpdateScale()
    {
    hud.localScale = Vector3.one * factor;
    }

    private float GetCameraHudRootDistance()
    {
    return Vector3.Distance(Camera.main.transform.position, parent.position);
    }

    private Vector3 WorldPointToUILocalPoint(Vector3 point)
    {
    Vector3 screenPoint = Camera.main.WorldToScreenPoint(point);
    Vector2 localPoint;
    RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, screenPoint, uiCamera, out localPoint);
    return localPoint;
    }
    }

  • 相关阅读:
    [转]unichar和初始化
    一些语言特性整理——预处理指令、volatile、标准预定义宏
    [开源项目]Adium——MAC下IM聚合客户端
    解决安卓7.0以后https抓不到包的问题
    MOSS2010 客户端对象模型开发(一)
    MOSS2010 客户端对象模型开发(四)
    MOSS2010 工作流不能自动启动问题
    MOSS2010 备份与还原小插曲
    Silverlight 5 研究(1)
    MOSS2010之大文件存储方案
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11044477.html
Copyright © 2020-2023  润新知