我遇到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");
}
}
答案 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() 仅在您单击它所连接的对象时起作用