2017-01-09 122 views
2

我想知道如何獲得我的rawImage紋理的像素顏色。統一2D:獲取原始圖像的顏色像素

這是我的場景:

enter image description here

public class ColorPicker : MonoBehaviour, IPointerClickHandler 
{ 
    public GameObject Cube; 

    public void OnPointerClick(PointerEventData eventData) 
    { 
     if (Input.GetMouseButtonUp(1)) 
     { 
      Vector3 localPosition = transform.InverseTransformPoint(eventData.pressPosition); 

      Color color = (GetComponent<RawImage>().texture as Texture2D).GetPixel(Convert.ToInt32(localPosition.x), 
       Convert.ToInt32(localPosition.y)); 
      Cube.GetComponent<Renderer>().material.color = color; 
     } 
    } 
} 

正如你所看到的,有了這個代碼,它的工作,但它不是縮減規模。

事實上,我無法達到藍色。我只能得到我的廣場的頂部。

當我點擊右鍵時,你能幫助我如何獲得顏色嗎?

感謝

+2

爲什麼你使用'OnGUI()'? –

+0

正如@ m.rogalski所指出的那樣,您應該使用'Update'來處理這種行爲,因此您不需要在GUI上做任何工作,所以不建議使用'OnGUI'。 – Rob

回答

1

鼠標的位置,你開始使用

Input.mousePosition 

是在屏幕空間(這意味着你得到的位置是相對於屏幕大小)。

你想得到的是在畫布空間中的鼠標位置(相對於畫布尺寸,所以你不必擔心畫布尺寸)。

您可以通過在ColorPicker腳本中實現IPointerClickHandler來完成此操作(這也比使用Input.mousePosition更好)。

using UnityEngine.EventSystems;  

    public class ColorPicker : MonoBehaviour, IPointerClickHandler{ 

    public GameObject Cube; 

    void OnPointerClick(PointerEventData eventData) 
    { 
    //eventData.position 
    //Vector3 localPosition = transform.InverseTransformPoint(eventData.pressPosition); 
    //ignore z coordinate 
    } 
} 

的PointerEventData包含了很多有用的信息,你可以在統一的文檔https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData.html

你可能還需要使用

transform.InverseTransformPoint(eventData.pressPosition); 

,因爲我要轉換你的鼠標位置在獲得更多信息還沒有測試過。但我希望這能指出你朝着正確的方向發展!

+0

感謝您的回覆。但我有同樣的問題,就好像我的Y沒有工作。我編輯了我的原始文章。 – Naografix

+0

未解決。需要幫忙。 – Naografix