2017-10-11 40 views
0

原始图像似乎只用于UI。不过看起来UI对象(面板或画布)不能包含对撞机。是否有可能将Box Collider组件包含到原始图像游戏对象中以检测碰撞?

我尝试的相反的解决方案是使用3D面板,但我不知道如何将原始图像(PNG文件)转换为材质。是否有任何其他方式在平面游戏对象中显示png图像?

我想包括像一块代码:

void OnTriggerStay(Collider col) 
{ 
    // TODO called when the game object that includes this script is collided 
    //  (if it has a Collider component with isTrigger enabled) 
} 

我的解决方法迄今为止使用具有一对撞机以及与所述原始图像分离的UI游戏对象3D游戏对象。这对我来说似乎是一个烂摊子,但也许这是最好的解决方案!

回答

1

您可以在Unity中创建材质非常简单。只需将您的图像导入Unity,然后单击“资源” - >“创建” - >“材质”。选择你的材料并将你的图像拖到你的检查员(应该有一个名为“无(纹理2D)”或类似的字段)。然后你可以将你的材料应用到你想要的任何物体上。

+0

谢谢。我没那么容易。但是我需要在运行时执行它。我需要用脚本来做:我想这也是可能的! – chelder

2

是的,这是可能的,但对撞机并不意味着与UI组件一起使用。

如果你想这样做,改变画布渲染模式,以世界空间:

enter image description here

然后手动修改对撞机以适应RawImage。给它的深度也因此,它是不平坦:

enter image description here


如果你决定使用3D对象,然后VTodorov的回答应该这样做。

用一个简单的平面,你可以做到这一点从脚本:

public Texture2D yourTeture; 
public GameObject plane; 

void Start() 
{ 
    MeshRenderer meshRenderer = plane.GetComponent<MeshRenderer>(); 
    meshRenderer.material.mainTexture = yourTeture; 
} 
+0

注意:任何时候画布要求事件相机*总是分配它*世界空间画布不需要分配此字段(与Camera Space画布不同),但这意味着它调用了'Camera.main'在内部使用'GameObject.FindObjectWithTag(“MainCamera”)'*并且不被缓存。*我们都知道滞后诱导'GameObject.Find'是... – Draco18s

+0

@ Draco18s我不知道这件事。 – Programmer

+1

直到我遇到一位Unity人谈论YouTube时,我才想到。让我看看......不是[这一个](https://www.youtube.com/watch?v=n-oZa4Fb12U)或[这一个](https://www.youtube.com/watch?v = _wxitgdx-UI)。两者都值得关注。 – Draco18s