我的场景中有两个相同的3D对象。它们都有一个布尔属性: isSelected 。对于其中一个对象,isSelected为true。对于另一个 - isSelected是错误的。
两个对象都附加了一个脚本,它实现了IPointerDownHandler接口。
在游戏中的某个时刻,两个3D对象具有相同的坐标(绝对相同的坐标,对象彼此重叠)。如果我用鼠标单击一个对象,有没有办法让我预测触发OnPointerDown事件的对象是什么?我只想要使用isSelected == true来触发OnPointerDown事件。
有没有办法实现这个目标?我应该使用光线投射吗?感谢任何帮助。谢谢。
答案 0 :(得分:2)
你的问题似乎很容易让我误解你!
if (!isSelected) return;
.. your handling code ..
另一个想法是,在Unity中你应该真正使用很多组件,它们是事物的自然组成部分。不要忘记你的每个c#脚本确实是一个“组件”。
Google“Unity3d禁用basic tutorial
的组件”yourComponent.enabled = false;
你说
我只希望用isSelected == true触发对象的OnPointerDown事件。
因此,也许只是使用布尔值关闭整个组件。
另一个很酷的想法是: 使用布尔值关闭对撞机 。
Collider c = GetComponent<Collider>();
c.enabled = false;
那么你真的不会得到这个活动,你知道吗?
关于你的单独问题
有一种方法可以预测触发OnPointerDown事件的对象
由于您正在谈论3D对象,
1)如果一个更接近相机,那就是那个
2)如果他们处于真正相同的3D位置,这绝不应该发生:不,绝对没有办法说出来,这是“随机的”。