软件编程
位置:首页>> 软件编程>> C#编程>> unity实现UI元素跟随3D物体

unity实现UI元素跟随3D物体

作者:夸克电子浆  发布时间:2021-11-15 02:00:48 

标签:unity,跟随,3D物体

本文实例为大家分享了unity实现UI元素跟随3D物体的具体代码,供大家参考,具体内容如下

在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;
 }
}
}

效果如下:

unity实现UI元素跟随3D物体

来源:https://blog.csdn.net/nnew_hande/article/details/78501309

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com