将盒子碰撞器缩放到Unity中的画布中的图像

Poo*_*kie 2 c# unity-game-engine

我有两个用Paddle's渲染SpriteRenderer.他们已经BoxCollider附着在他们身上,他们工作得很好.但是,它们无法使用不同的分辨率正确缩放.所以我转而Image在画布上使用's.它们完美地扩展.但是,我似乎无法BoxCollider正确地使用Paddle's'.我搜索了互联网并找到了一些解决方案,但他们完全错了.根据我所看到的大部分内容,我得出了以下结论:

 GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;
Run Code Online (Sandbox Code Playgroud)

这根本不起作用.

这是我需要的图像,以防它不清楚.

在此输入图像描述

绿色框是该图像中的正确尺寸,但这不是发生的事情,这就是我需要发生的事情.

所以,基本上我需要一种方法来缩放BoxCollider2D到的大小ImageCanvas.

下面是检查人员的图像PaddleCanvas(注:Paddle有剧本,我就剪下来,因为它没有工作,反正):

在此输入图像描述

还要注意:我需要对撞机的原因是因为我正在检查两个GameObjects,球和桨之间的碰撞.这是乒乓球.

Pro*_*mer 5

自从你切换SpriteImage.你必须删除Box Collider 2D你的Image.图像不需要碰撞器工作.只需确保Image Image附加了脚本,并确保选中了Raycast Target.

删除下面的代码.

GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;
Run Code Online (Sandbox Code Playgroud)

您现在必须更改您的游戏逻辑代码.您的所有Sprite点击检测代码必须从#1更改为#2.

SPRITE VS IMAGE/RAWIMAGE点击检测

1.如果您尝试检测触摸的对象是Image/ Canvas,那么这不是如何执行此操作.要使用Image/Canvas检测触摸,您必须使用它们派生IPointerDownHandler或从中IPointerClickHandler实现这些功能.

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

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

}
Run Code Online (Sandbox Code Playgroud)

2.现在,如果要检测触摸的GameObject只是2D纹理或Sprite,请使用以下代码:

if (Input.GetMouseButtonDown(0))
{
    Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);

    if (cubeHit)
    {
        Debug.Log("We hit " + cubeHit.collider.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

为此,您必须附加Collider2D到2D纹理或Sprite.通过重新调整碰撞器大小,确保碰撞器覆盖2D纹理或精灵.由于这是一个2D游戏,collider你使用的任何游戏都必须以2D结尾.例如,有一个Box Collider,有一个Box Collider 2D.你必须附上Box Collider 2D.到精灵/纹理.