Unity C#OnMouseDown()不起作用..为什么?

时间:2015-03-07 15:47:41

标签: c# unity3d onmousedown

我遇到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");
    }

}

7 个答案:

答案 0 :(得分:3)

试试这个:

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>();
}

答案 1 :(得分:3)

检查以下几点:

  • 检查您的目标是否有碰撞器(此系统的工作方式与使用光线投影相同)并启用它
  • 检查对撞机是否未调整大小或移动。
  • 检查中间是否有任何其他带有对撞机的物体。

希望它有所帮助,祝你好运!

答案 2 :(得分:0)

它是否为调试日志提供了“Mouse Down”消息?如果是,那么问题可能在您的RotateforDisplay类中。

您的问题中未包含此内容。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

要检查的一件事是,确保对撞机尺寸属性包围您希望为其获取click事件的对象,因为那真是令人沮丧。

答案 5 :(得分:0)

这些函数易于使用,但是它们的实现充满了隐藏的情况,使它们难以使用。

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

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

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

对我来说,唯一解决的方法是在所有鼠标感知对象上撒上无用的刚体(重力= false和运动学特性),以避免其鼠标事件被盗。这样做的间接费用是多少?这是一个谜。

Unity的想法非常聪明和简单,但实施起来似乎效果很差。

答案 6 :(得分:0)

OnMouseDown() 仅在您单击它所连接的对象时起作用