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到的大小Image的Canvas.
下面是检查人员的图像Paddle和Canvas(注:Paddle有剧本,我就剪下来,因为它没有工作,反正):
还要注意:我需要对撞机的原因是因为我正在检查两个GameObjects,球和桨之间的碰撞.这是乒乓球.
自从你切换Sprite到Image.你必须删除Box Collider 2D你的Image.图像不需要碰撞器工作.只需确保Image Image附加了脚本,并确保选中了Raycast Target.
删除下面的代码.
GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;
Run Code Online (Sandbox Code Playgroud)
您现在必须更改您的游戏逻辑代码.您的所有Sprite点击检测代码必须从#1更改为#2.
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.到精灵/纹理.
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |