Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity 2D:获取原始图像颜色的像素_C#_User Interface_Unity3d_Color Picker - Fatal编程技术网

C# Unity 2D:获取原始图像颜色的像素

C# Unity 2D:获取原始图像颜色的像素,c#,user-interface,unity3d,color-picker,C#,User Interface,Unity3d,Color Picker,我想知道如何获得我的原始图像纹理的像素颜色 这是我的场景: 公共类颜色选择器:MonoBehavior,IPoClickHandler { 公共游戏对象立方体; 公共void OnPointerClick(PointerEventData事件数据) { if(Input.GetMouseButtonUp(1)) { Vector3 localPosition=transform.InverseTransformPoint(eventData.pressPosition); 颜色颜色=(GetC

我想知道如何获得我的原始图像纹理的像素颜色

这是我的场景:

公共类颜色选择器:MonoBehavior,IPoClickHandler
{
公共游戏对象立方体;
公共void OnPointerClick(PointerEventData事件数据)
{
if(Input.GetMouseButtonUp(1))
{
Vector3 localPosition=transform.InverseTransformPoint(eventData.pressPosition);
颜色颜色=(GetComponent().texture as Texture2D).GetPixel(Convert.ToInt32(localPosition.x),
转换为32(localPosition.y));
Cube.GetComponent().material.color=颜色;
}
}
}
正如您所看到的,使用这段代码,它可以工作,但不可缩放

事实上,我够不到蓝色。我只能到达广场的顶端

你能帮我在按下右键时如何得到颜色吗


感谢您使用的鼠标位置

Input.mousePosition 
在屏幕空间中(表示您获得的位置与屏幕大小相关)

您想要得到的是鼠标在画布空间中的位置(相对于画布大小,因此您不必担心画布大小)

您可以通过在ColorPicker脚本中实现IPointerClickHandler来实现这一点(这也比使用Input.mousePosition更好)

PointerEventData包含很多有用的信息,您可以在unity文档中获得更多信息

您可能仍然需要使用转换鼠标位置

transform.InverseTransformPoint(eventData.pressPosition);

因为我还没有测试过这个。但我希望这能为你指明正确的方向

尝试将其转换为
2DTexture
,然后您可以使用
Texture2D.GetPixels
函数。

为什么要使用
OnGUI()
?正如@m.rogalski指出的,您应该使用
Update
进行此行为,您没有在GUI上执行任何操作,因此不建议使用
OnGUI
。感谢您的回复。但我也有一个同样的问题,就好像我的Y不起作用一样。我已经编辑了我的原始帖子。
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
  }
}
transform.InverseTransformPoint(eventData.pressPosition);