2017-01-09 3 views
2

rawImage 텍스처의 픽셀 색상을 어떻게 얻을 수 있는지 알고 싶습니다. Unity 2D : Raw 이미지의 색상 픽셀 얻기

내 장면 :

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; 
     } 
    } 
} 

그리고 당신이 볼 수 있듯이,이 코드와 함께, 그것은 작동하지만 scalled되지 않습니다.

사실, 나는 파란 색에 다다를 수 없다. 나는 단지 나의 정방형의 꼭대기를 얻을 수있다.

마우스 오른쪽 버튼을 클릭하면 색상을 얻는 방법을 알려줄 수 있습니까? 당신이

Input.mousePosition 

를 사용하여 얻을

덕분에

+2

왜 'OnGUI()'를 사용하고 있습니까? –

+0

@ m.rogalski가 지적한 것처럼,이 동작에 대해'Update'를 사용해야합니다. GUI에서는 아무런 작업도하지 않으므로'OnGUI'는 권장하지 않습니다. – Rob

답변

1

마우스 위치 (당신이 얻을 위치가 화면 크기를 기준으로 의미) 화면 공간입니다.

원하는 것은 캔버스 공간에서의 마우스 위치입니다 (캔버스 크기에 비례하므로 캔바스 크기에 대해 걱정할 필요가 없습니다).

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

관련 문제