【问题标题】:Scaling Box Collider to Image in Canvas in Unity在 Unity 中将 Box Collider 缩放到 Canvas 中的图像
【发布时间】:2016-05-19 14:22:56
【问题描述】:

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

 GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;

这根本不起作用。

这是我需要的图片,以防不清楚。

绿色框是该图像中的正确大小,但这不是发生的事情,这是我需要发生的事情。

所以,基本上我需要一种方法将BoxCollider2D 缩放到CanvasImage 的大小。

这是PaddleCanvas的检查员的图片(注意:Paddle有脚本,我把它剪掉了,反正它不起作用):

另请注意:我需要碰撞器的原因是因为我正在检查两个游戏对象(球和桨)之间的碰撞。这是乒乓球。

【问题讨论】:

  • 不要在 UI 元素上使用碰撞器。如果您想点击 UI 元素,请改用 Button 组件。
  • 我不确定,但我认为它可以提供帮助,您已经从 sprite 渲染器和 boxcollider2D 获得了一个对象的 sprite,您希望 boxcollider2D 以某种方式缩放,因为分辨率会改变您的精灵更改,通过精灵的边界获取精灵的大小,使用 GetComponent().sprite.bounds.size 并类似地获取 GetComponent().bounds.size 并为 boxcollider 创建一个新的边界精灵边界。等式减半或增加你的盒子碰撞器边界

标签: c# unity3d


【解决方案1】:

自从您从Sprite 切换到Image。您必须从您的Image 中删除Box Collider 2D。图像不需要碰撞器来工作。只需确保图像附加了Image 脚本并确保选择了Raycast Target

删除下面的代码。

GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;

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

SPRITE VS IMAGE/RAWIMAGE CLICK DETECTION

1。如果您尝试检测触摸的对象是Image/Canvas,那么这不是执行此操作的方法。要使用 Image/Canvas 检测触摸,您必须从 IPointerDownHandlerIPointerClickHandler 派生,然后实现它们的功能。

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

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

}

2。现在,如果您要检测触摸的游戏对象只是 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);
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2014-12-21
    • 1970-01-01
    • 2020-05-04
    • 2017-06-20
    • 2012-05-18
    相关资源
    最近更新 更多