Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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#_C#_Unity3d - Fatal编程技术网

添加可点击的游戏对象c#

添加可点击的游戏对象c#,c#,unity3d,C#,Unity3d,因此,我将动态地从json文件/url向scrollview添加图像 我喜欢让图像成为可点击的游戏对象,但不知道如何在c#(void OnMouseDown())中实现这一点 IEnumerator AddFeedItem(int索引) { WWW=newwww(ModelURL);//imgURL 收益率; GameObject newsimageObject=tempFeedItem.transform.FindChild(“newsimage”).GameObject; Image new

因此,我将动态地从json文件/url向scrollview添加图像

我喜欢让图像成为可点击的游戏对象,但不知道如何在c#(void OnMouseDown())中实现这一点

IEnumerator AddFeedItem(int索引)
{
WWW=newwww(ModelURL);//imgURL
收益率;
GameObject newsimageObject=tempFeedItem.transform.FindChild(“newsimage”).GameObject;
Image newimage=newsimageObject.GetComponent();
Texture2D testex=照片[索引%10];
SpriteRenderer renderer=newsImage.GetComponent();
精灵精灵=新精灵();
sprite=sprite.Create(www.texture,newrect(0,0455230),newvector2(0,0),100.0f);
newsImage.sprite=sprite;
}

尝试创建一个绑定到该游戏对象的BoxCollizedR2D对象,然后使用

Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Mouse.position),Vector2.zero)


测试鼠标位置是否有碰撞器。

这是一张
图像
/
画布
。您应该避免
Raycast
OnMouseDown
。要检测图像/画布的触摸,您必须使用从
ipointerndownhandler
ipointernclickhandler
派生,然后从中实现功能<如果对象是3D模型,或者如果对象是
Sprite
而不是
画布下的精灵,则应使用
OnMouseDown
Raycast
。在这种情况下,需要一个对撞机。在本例中,您使用的是
图像
组件,因此我假设它位于
画布

public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
   public void OnPointerClick(PointerEventData eventData)
   {
      Debug.Log("Clicked");
   }

   public void OnPointerDown(PointerEventData eventData)
   {
      Debug.Log("Down");
   }

}

有两种方法。首先,您可以使用
Image
并将每个对象放到UI上。其次,您可以创建具有SpriteRender的对象。在第一种情况下,您可以使用Unity UI中包含的
ScrollView
,并使用事件来处理输入?只需使用Unity内置的UI系统。你所做的简直是疯了!好的,我现在添加了BoxCollizedR2D,
Physics2D.Raycast(Cam…
go?我总是在Update()中写入它。只有当目标点中有任何碰撞器时,Raycast才会返回RaycastHit2D)。。。否则返回false。如果(HitInfo){}嘿,有什么理由应该避免它们吗?我只是好奇,因为我知道光线投射非常有效,可以多次调用-这只是界面方式更容易使用吗?这是正确的,但我得到
Assets/scripts/clickTest.cs(5,60):错误CS0246:找不到类型或命名空间名称
IPointerClickHandler'。是否缺少using指令或程序集引用`@ryrich应该避免使用它们,因为您使用的是图像/画布。UI事件就是为了这个。您必须将“碰撞器”附加到图像上,以便进行光线投射和OnMouseDown处理图像组件。这不是如何使用图像组件。永远不要将碰撞器附加到图像组件。浪费时间和资源。@kevinver使用UnityEngine.UI添加
和<代码>UnityEngine.EventSystems到脚本的顶部。
public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
   public void OnPointerClick(PointerEventData eventData)
   {
      Debug.Log("Clicked");
   }

   public void OnPointerDown(PointerEventData eventData)
   {
      Debug.Log("Down");
   }

}