【问题标题】:Unity C# OnMouseDown() does not work.. Why?Unity C# OnMouseDown() 不起作用.. 为什么?
【发布时间】:2021-03-28 03:03:32
【问题描述】:

我对 OnMouseDown() 事件有疑问。该脚本所属的对象是一个可以点击执行某些动作的电脑柜。但我被困在第 1 格。我已经尝试在网上搜索这个问题一段时间了,但几乎没有人似乎有同样的问题,其他解决方案也没有完美运行。有人可以帮帮我吗?我很困惑..

public class ComputerScript : MonoBehaviour 
{
    private RotateForDisplay displayRotation;
    private GameObject displayObjects;

    private void Start()
    {
        displayObjects = GameObject.Find("DisplayObjects");
        displayRotation = displayObjects.GetComponent<RotateForDisplay>();
    }

    // This does not seem to work for some reason..
    private void OnMouseDown()
    {
        displayRotation.isRotating = false;
        Debug.Log("Mouse is down");
    }

}

【问题讨论】:

  • 标签unity的第一句是“不要在关于UNITY游戏引擎的问题上使用(使用:unity3d代替)!!”
  • 请不要包含 start 或 update 为空。

标签: c# unity3d onmousedown


【解决方案1】:

检查以下几点:

  • 检查您的目标是否有对撞机(此系统的工作方式类似于使用光线投射)并且已启用
  • 检查碰撞器是否未调整大小或移动。
  • 检查您是否没有任何其他物体之间有碰撞器。

希望对你有帮助,祝你好运!

【讨论】:

  • 第一次遇到这个问题的时候,原因是没有collider。
【解决方案2】:

试试这个:

void OnMouseOver(){
if(Input.GetMouseButtonDown(0){
displayRotation.isRotating = false;
Debug.Log("Mouse is down");
}
}

您可能还想使用void Awake() 而不是void Start()

void Awake()
{
    displayObjects = GameObject.Find("DisplayObjects");
    displayRotation = displayObjects.GetComponent<RotateForDisplay>();
}

【讨论】:

    【解决方案3】:

    这些函数非常易于使用,但它们的实现充满了隐藏的情况,使得它们的使用存在问题。

    例如,如果对象 C 设置了对撞机但没有刚体,并且是对象 P 的子对象且具有刚体,则当您与 C 交互时,父对象 P 将调用其方法,以及 C 的方法将不会被调用。

    即使对象 P 根本没有碰撞器,也会发生这种不良行为。

    刚体(没有边界)与鼠标输入有什么关系?什么都没有。

    我想到的唯一解决方法是用无用的刚体(重力=假和运动学,也许)散布所有鼠标感知对象,以避免它们的鼠标事件被盗。这样做的间接成本是多少?这是个谜。

    Unity 对此的想法非常巧妙和简单,但似乎实现起来很糟糕。

    【讨论】:

      【解决方案4】:

      它是否会在调试日志中显示“鼠标按下”消息?如果是,那么问题可能出在您的 RotateforDisplay 类中。

      您的问题中未包含哪些内容。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,根本原因似乎是在您的相机和您要点击的对象之间有碰撞器的对象数量。

        它最终基于光线投射,所以如果中间有任何东西,很可能光线没有击中游戏对象。

        【讨论】:

          【解决方案6】:

          检查的一件事是确保盒子碰撞器大小属性围绕您希望获得点击事件的对象,因为那是困扰我的原因。

          【讨论】:

            【解决方案7】:

            OnMouseDown() 仅在您单击它所附加的对象时才起作用

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-12-15
              • 1970-01-01
              • 1970-01-01
              • 2022-08-03
              • 1970-01-01
              • 2022-08-19
              • 2017-11-07
              相关资源
              最近更新 更多