2017-01-09 10 views
2

Я хочу знать, как я могу получить пиксельный цвет моей текстуры rawImage.Unity 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; 
     } 
    } 
} 

И как вы можете видеть, с этим кодом, он работает, но это не scalled.

Фактически, я не могу достичь синего цвета. Я могу получить только верхнюю часть своей площади.

Можете ли вы помочь мне, как получить цвет, когда я нажимаю правый клик?

Благодаря

+2

Почему вы используете 'OnGUI()'? –

+0

Как указано в @ m.rogalski, вы должны использовать 'Update' для этого поведения, вы не делаете никакой работы с графическим интерфейсом здесь, поэтому использование OnGUI не рекомендуется. – Rob

ответ

1

положение мыши вы получите с помощью

Input.mousePosition 

в экранном пространстве (то есть позиция вы получаете по сравнению с размером экрана).

То, что вы хотите получить, - это положение мыши в пространстве холста (относительно размера холста, поэтому вам не нужно беспокоиться о размере холста).

Вы можете сделать это, выполнив IPointerClickHandler в сценарии ColorPicker (что также лучше, чем использование 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

 Смежные вопросы

  • Нет связанных вопросов^_^