在 Unity 中将鼠标悬停在对象上时,OnMouseEnter 不起作用



我遇到了一个问题,当鼠标悬停在Unity中的对象上时,OnMouseEnter方法不能真正工作。我使用Unity 2021

这是我的代码:

public class Node : MonoBehaviour
{
public Color hoverColor;
private Renderer rend;
private Color startColor;
void Start()
{
rend = GetComponent<Renderer>();
startColor = rend.material.color;
}
void OnMouseEnter()
{
rend.material.color = hoverColor;
}
}

如果您已经安装并仅激活了新的输入系统,这些功能将无法正常工作

我安装了新的输入系统并学习了它,然后偶然发现了文档中关于OnMouseOver的部分。我急于试用它们,但令我沮丧的是,它们什么都没做。。。

由于我刚刚安装了新的输入系统(并禁用了旧的(,我想知道这是否相关。你猜怎么着。。。是…

因此,如果您安装输入系统包并希望激活它以及旧的输入管理器,则需要在"项目设置">播放器>配置>主动输入处理,您将有一个下拉列表,允许您使用旧系统或新系统,并且两者都有。我两者都选了。现在鼠标悬停触发器正在工作。

这对下一个人有多大帮助!

让你的gameObject有一个对撞机,它需要一个对撞器来检测它,例如,如果你把脚本附加到一个立方体上,你的立方体也需要一个盒子对撞机来检测鼠标是否在它上面

确保您的对象有某种类型的碰撞器,通常是长方体、球体或胶囊。要实现自动化,您可以使用[RequireComponent(typeof(BoxCollider((]属性,代码如下所示。

`

[RequireComponent(typeof(BoxCollider))] 
public class Node : MonoBehaviour
{
public Color hoverColor;
private Renderer rend;
private Color startColor;
void Start()
{
rend = GetComponent<Renderer>();
startColor = rend.material.color;
}
void OnMouseEnter()
{
rend.material.color = hoverColor;
}
}

`

我可以用任何其他对撞机替换BoxCollider。

如果需要的话,还可以通过将对象移动到层(2(IgnoreRaycast来禁用这些功能。这样,即使它有碰撞器,OnMouse事件也不会工作,如果你不想删除或消失对象,这很有用。

gameObject.layer = 2;

由于通常OnMouse功能在除第2层之外的所有层中都与标准Raycast一起工作

  1. 确保对象有一个BoxCollider2D
  2. 如果在添加精灵渲染器之前添加了碰撞器,则BoxCollider2D在X和Y上的默认值为0.00001大小
  3. 因此,请检查对撞机的大小。我的BoxCollider在X和Y坐标上默认为0.00001,因为我的SpriteRenderer中没有精灵。如果使用"编辑碰撞器">按钮,则边界框会变小,因此将的"大小"编辑碰撞器'键来适应对象
  4. 另一种方法是删除BoxCollider2D,确保SpriteRenderer中有一个精灵,然后添加BoxCollider2DBoxCollider2D将看到精灵并默认为Size

希望这能帮助

最新更新