当一个对象被点击时,如何使图片出现在播放器相机的中心?



所以我正在构建一个虚拟画廊,用户可以在其中走动并看到图片。当他点击一张图片时,我希望这张图片会弹出占据整个屏幕并显示一些关于图片的元数据,或者读取与图片相关的文本文件?我该怎么做呢?我是Unity的新手,所以任何帮助都会非常感激。我使用下面的代码来检测游戏对象。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class ObjectClicker : MonoBehaviour
{
public LayerMask interactableLayermask = 6;
UnityEvent onInteract;
void Start()
{

}


void Update()
{
RaycastHit hit;
if(Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 2, interactableLayermask))
{
Debug.Log(hit.collider.name);
}
}
}
```[I want to click on them and that image pops up and takes up the screen and displays some metadata about it.][1]

[1]: https://i.stack.imgur.com/skz8H.png

你可以创建一个面板(Unity UI),添加一些元素(按钮,图像等),然后创建一个UIManager对象和脚本。

现在,你可以为那个UIManager创建方法:

  • bool showArtInfo (int index)
  • bool isPanelActive ()
  • void closePanel ()

和参考面板及其图片,脚本中的文本。您可以向该对象添加图像和文本数组。注意指数很重要!(或者您可以使用其他类型的集合而不是数组)

最后,对于分配给ObjectClicker脚本的每个对象,您可以添加一个唯一的常量索引,以便它可以指示UIManager的对象。也为UIManager添加一个引用字段,这样你就可以将UIManager脚本绑定到这个家伙(你必须绑定到你拥有的每个画廊对象-如果你有很多对象,有更好的方法,但这很简单)。

现在,在ObjectClickerUpdate()中,您可以添加如下调用:

if(Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 2, interactableLayermask)) {
if (! uiManager.isPanelActive ()) {
showArtInfo (myIndex);
}
}

如何实现showArtInfo?您必须根据索引从数组中设置图像,设置文本和使面板。你也可以让它看起来更漂亮。

如何实现isPanelActive?报告它是否被启用,如果动画说明这可能还不够-实验看看什么是好的。

如何设置图像?我不记得细节了,但也许这可能是有用的:我如何改变Unity图像组件的源图像?

还需要注意的是,Unity UI面板不需要是平面的2D,它也可以在World Space中渲染,所以它会随着你的3D元素移动!也许有很多更好的方法来做到这一点!如果使用许多对象,您可以使用自定义组件在对象本身上存储详细信息,并在击中游戏对象时将GetComponent传递给UIManager-这将更容易管理。

最新更新