zoukankan      html  css  js  c++  java
  • 在Canvas不同的渲染模式(RenderMode)下实现UI跟随3D物体

    当Canvas.RenderMode为Screen Space-Overlay时

     利用WorldToScreenPoint(worldPos)将物体的世界坐标转换成屏幕坐标,实时更新UI的坐标:

    using UnityEngine;
    using System.Collections;
    
    public class FollowWorldObj : MonoBehaviour {
        [SerializeField]
        GameObject worldPos;//3D物体(人物)
        [SerializeField]
        RectTransform rectTrans;//UI元素(如:血条等)
        public Vector2 offset;//偏移量
    
        // Update is called once per frame
        void Update () {
            Vector2 screenPos=Camera.main.WorldToScreenPoint(worldPos.transform.position);
            rectTrans.position = screenPos + offset;
        }
    }

    当Canvas.RenderMode为Screen Space-Camera时

    利用RectTransformUtility.ScreenPointToLocalPointInRectangle换算出UI元素在Canvas的2D坐标:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.EventSystems;
    
    public class UI_FollowObj : MonoBehaviour {
        [SerializeField]
        Camera UI_Camera;//UI相机
        [SerializeField]
        RectTransform image;//UI元素
        [SerializeField]
        GameObject obj;//3D物体
        [SerializeField]
        Canvas ui_Canvas;
        // Update is called once per frame
        void Update () {
            UpdateNamePosition();
        }
        /// <summary>
        /// 更新image位置
        /// </summary>
        void UpdateNamePosition()
        {
            Vector2 mouseDown = Camera.main.WorldToScreenPoint(obj.transform.position);
            Vector2 mouseUGUIPos = new Vector2();
            bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(ui_Canvas.transform as RectTransform, mouseDown, UI_Camera, out mouseUGUIPos);
            if (isRect)
            {
                image.anchoredPosition = mouseUGUIPos;
            }
        }
    }

    转载自(侵删):https://blog.csdn.net/nnew_hande/article/details/78501309

    这里着重强调一下RectTransformUtility.ScreenPointToLocalPointInRectangle这个方法:场景->屏幕->UI,所以当场景中的UI是相机模式的UI时,这个方法起到了转换作用

  • 相关阅读:
    虚拟机下linux系统安装spark一个小提示
    寒假学习记录第七天
    寒假学习记录第六天
    寒假学习记录第五天
    快捷键
    yum安装软件内容
    常见问题处理
    linux目录详解
    linux三剑客
    linux符号与正则表达式
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/13624583.html
Copyright © 2011-2022 走看看