C# 用于重叠三维对象的OnPointerDown

C# 用于重叠三维对象的OnPointerDown,c#,unity3d,C#,Unity3d,我的场景中有两个相同的3D对象。它们都有一个布尔属性:isSelected。对于其中一个对象,isSelected为true。对于另一方来说,选择是错误的 这两个对象都附加了一个脚本,该脚本实现了IPInterDownHandler接口 在游戏中的某个时刻,两个3D对象具有相同的坐标(绝对相同的坐标,对象彼此重叠)。如果我用鼠标单击一个对象,有没有办法预测OnPointerDown事件将为哪个对象触发?我只希望为isSelected==true的对象触发OnPointerDown事件 有没有办法

我的场景中有两个相同的3D对象。它们都有一个布尔属性:isSelected。对于其中一个对象,isSelected为true。对于另一方来说,选择是错误的

这两个对象都附加了一个脚本,该脚本实现了IPInterDownHandler接口

在游戏中的某个时刻,两个3D对象具有相同的坐标(绝对相同的坐标,对象彼此重叠)。如果我用鼠标单击一个对象,有没有办法预测OnPointerDown事件将为哪个对象触发?我只希望为isSelected==true的对象触发OnPointerDown事件


有没有办法做到这一点?我应该使用光线投射吗?非常感谢您的帮助。

您的问题似乎很简单,我可能会误解您的意思

if (!isSelected) return;
.. your handling code ..
另一个想法是,在Unity中,您应该大量使用组件,它们是事物的自然组成部分。别忘了你的每一个c#脚本都是一个“组件”

谷歌“Unity3d禁用组件”用于

你说

我只希望为isSelected==true的对象触发OnPointerDown事件

因此,也许只需使用布尔值关闭整个组件

Collider c = GetComponent<Collider>();
c.enabled = false;
另一个很酷的想法是:使用布尔值关闭碰撞器

Collider c = GetComponent<Collider>();
c.enabled = false;
碰撞器c=GetComponent(); c、 启用=错误; 那你就真的不能参加比赛了,明白吗

关于你的另一个问题

有一种方法可以预测OnPointerDown事件将为哪个对象触发

既然你说的是3D对象

1) 如果一个离摄像机更近,那就是那个


2) 如果它们处于完全相同的3D位置,这是永远不会发生的:不,绝对没有办法判断,这是“随机的”。

我不会回答这个问题,因为这只是一个建议。当OnPointerDown事件触发时,检查isSelected是否为真,如果不是,则从当前触摸/鼠标位置发射光线,并检查所有碰撞器的组件(已实现IPInterDownHandler),并检查其中是否有isSelected设置为真。如果是,则手动触发事件。正如Jerry所说,这很容易!“谢谢,”乔·布鲁说。我现在正在尝试“关闭对撞机”的方法,效果非常好。非常好,这绝对是让你自己熟悉的关键技术,享受吧!