请问大佬们
我想用一个不规则图形做button,希望鼠标仅滑到图片范围内会出现
cursor: pointer 的样子。
搜索了一下似乎需要添加一个碰撞组件如下。
然后怎么办嘞?怎么样可以让鼠标只滑到梯子上说的时候变成cursor: pointer的样子?
请问大佬们
我想用一个不规则图形做button,希望鼠标仅滑到图片范围内会出现
cursor: pointer 的样子。
搜索了一下似乎需要添加一个碰撞组件如下。
然后怎么办嘞?怎么样可以让鼠标只滑到梯子上说的时候变成cursor: pointer的样子?
你把mouseWorldPosition和polygonWorldPoints代入进来。
let mouseWorldPosition = v2();
let polygonWorldPoints = new PolygonCollider2D().worldPoints;
let isHit = Intersection2D.pointInPolygon(mouseWorldPosition, polygonWorldPoints);
if (isHit) {
console.log("进入区域");
} else {
console.log("未进入区域");
}
实现的时候发现我好像不太会把
event.getLocation()的坐标转换成 世界坐标。
请问如何把这个转换成世界坐标呢?
渲染你触摸节点的Camera有API,screenToWorld
let mousePosition = event.getLocation();
let mouseWorldPosition = this.camera.screenToWorld(v3(mousePosition.x, mousePosition.y));
let polygonWorldPoints = new PolygonCollider2D().worldPoints;
let isHit = Intersection2D.pointInPolygon(mouseWorldPosition, polygonWorldPoints);
if (isHit) {
console.log("进入区域");
} else {
console.log("未进入区域");
}
谢谢你呀,太感谢啦
解决的话,麻烦选我为解决方案~
不好意思啊 还得请教你一下这个问题。
点击图片的任意一点,得到的世界坐标变化不大,所以isHit的结果一直是true…
是不是我的节点结构有问题?
节点结构如下:

Log:
代码:
const polygonWorldPoints = this._polygonCollider2D.worldPoints;
const mousePosition = evt.getLocation();
const pos = new Vec3();
const mouseScreenPosition = new Vec3(mousePosition.x, mousePosition.y, 0);
const canvasNode = find("Canvas");
const canvas = canvasNode.getComponent(Canvas);
const uiCamera = canvas.cameraComponent.camera;
const mouseWorldPosition = uiCamera.screenToWorld(pos, mouseScreenPosition);
const isHit = Intersection2D.pointInPolygon(
mouseWorldPosition,
polygonWorldPoints,
);
console.log("mouseWorldPosition:", mouseWorldPosition, polygonWorldPoints);
if (isHit) {
console.log("进入区域");
} else {
console.log("未进入区域");
}
这行代码有问题,第一个参数是要转换的坐标,你写成out,第二个参数是out你写成了要转换的坐标。
需要改一下
uiCamera.screenToWorld(mouseScreenPosition, pos)
亲测, 题主代码没有问题。你别误导了
为何不弄一个 长方体, 然后改一下角度,斜过来, 然后贴合上去。 哈哈