2017-10-11 37 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