我有一个关于OnMouseDown()事件的问题。这个脚本所属的对象是一个计算机机箱,可以单击它来执行某些操作。但是我卡在了第一个方格上。我已经尝试在网上搜索这个问题有一段时间了,但是似乎没有人有同样的问题,其他的解决方案也没有完美的工作。有人能帮帮我吗?我很困惑。
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");
}
}
8条答案
按热度按时间c6ubokkw1#
检查以下几点:
希望有帮助,祝你好运!
92dk7w1h2#
试试这个:
您可能还希望使用
void Awake()
而不是void Start()
:wko9yo5t3#
这些函数非常容易使用,但是它们的实现充满了隐藏的情况,使得它们的使用存在问题。
例如,如果对象C设置了碰撞器,但没有刚体,并且是具有刚体的对象P的子对象,则当您与C交互时,父对象P将调用其方法,而C的方法将不被调用。
即使对象P根本没有碰撞器,这种不希望的行为也会发生。
刚体(它没有边界)和鼠标输入有什么关系?一点关系都没有。
我想到的唯一解决方法是用无用的刚体(重力=假的和运动学的,也许)来散布你所有的鼠标感知对象,以避免它们的鼠标事件被窃取。这样做的开销是多少?这是一个谜。
Unity对此的想法非常聪明和简单,但似乎实现得很差。
qyuhtwio4#
调试日志是否给予“鼠标按下”消息?如果是,则问题可能出在RotateforDisplay类中。
你的问题里没有这个。
shstlldc5#
我也有同样的问题,根本原因似乎是在你的相机和你想点击的物体之间有碰撞器的物体的数量。
它最终是基于光线投射的,所以如果在两者之间有任何东西,光线很可能没有击中游戏对象。
epggiuax6#
有一件事是要检查是确保箱碰撞大小属性周围的对象,你希望得到的点击事件,因为这是什么难倒我。
kknvjkwl7#
OnMouseDown()仅在单击其所附加的对象时才有效
lf3rwulv8#
如果您使用新的输入系统,则需要为相机添加
PhysicRaycast
。