如何调整/拉伸世界空间 UI?

Posted

技术标签:

【中文标题】如何调整/拉伸世界空间 UI?【英文标题】:How to resize / stretch World Space UI? 【发布时间】:2021-10-23 06:58:03 【问题描述】:

我的 3d 游戏中有一些带有世界空间渲染模式的滑块和按钮的画布。以不同距离连接到不同游戏对象的画布。

如何根据相机的放大或缩小调整画布大小?

重要!所有画布必须同时执行此操作。

例如:Canvas 应该在相机放大时收缩或在缩小时拉伸。

现在我是这样的(但在我看来有更好的方法):

 if (Vector3.Distance(_camera.transform.position, transform.position) < 70)
 
    var scaleFactor = Vector3.Lerp(transform.localScale, new Vector3(0.5f, 0.5f, 0.5f), 0.01f);
    transform.localScale = scaleFactor;
  
  else
   
    //Because default canvas scale is 1, 1, 1
    var scaleFactor = Vector3.Lerp(transform.localScale, Vector3.one, 0.01f);
    transform.localScale = scaleFactor;
  

【问题讨论】:

【参考方案1】:

只是问一下,您可以将画布与覆盖屏幕或覆盖相机一起使用,无论您放大或缩小或滑动,它都会始终以屏幕大小显示在您的屏幕上。 或者您可以制作一个包含两个孩子的父游戏对象。一个孩子是画布附加到的游戏对象,另一个是画布并在父级上应用变换,我猜它也适用于两个孩子。

【讨论】:

以上是关于如何调整/拉伸世界空间 UI?的主要内容,如果未能解决你的问题,请参考以下文章

Unity UI跟随3D物体,世界坐标转UI坐标

UE4 Material 101学习笔记——30-37 植物叶片(透光/mask/面片隐藏/法线调整/AO/渐隐/世界空间色彩/随风舞动)

glm::unProject 问题,世界到屏幕空间对齐错误

统一3d。如何获取ui元素的屏幕或世界位置

如何让 ui 元素指向统一的世界坐标中的位置?

Unity - 如何在屏幕覆盖画布上方显示世界空间画布?