为什么Unity中的Physics2D Raycast无法检测对象?

时间:2018-08-10 13:21:12

标签: unity3d collider

我统一制作2D游戏,需要您的帮助。

Example

游戏是随机创建9个彩色的点,如图所示。 播放器必须将点与相应的颜色相连。我做了这一切。

问题: 当我单击一个点并立即移动到另一个点以进行连接时,它不会立即连接,而是大约1秒钟后。 如果我单击一个点并保持大约1秒钟,然后快速移动到下一个点,则它会连接。

也就是说,我需要等待第一点或第二点。

事实证明,这一切都是由于对撞机和Raycast造成的。 他没有时间检查。

我的代码示例(非常短)

Vector3 startPos;
Vector3 endPos;

Vector3 mousePos;
Vector2 mousePos2D;
RaycastHit2D hit;

void Update() {

mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos2D = new Vector2 (mousePos.x, mousePos.y);
hit = Physics2D.Raycast (mousePos2D, Vector2.zero);

// Here comes the creation of the first point and the connection 
if (Input.GetMouseDown(0)) {
if (hit.collider != null) {
color = hit.collider.tag;
startPos = hit.collider.transform.position;
endPos = mousePos2D;
}
}

// Here comes the creation line between dots 
if (Input.GetMouse(0)) {
if (hit.collider != null) {
if (hit.collider.tag == color) {
endPos = hit.collider.transform.position;
// Here is instantiated new line and with startPos and endPos and I set
startPos = endPos;
endPos = mousePos2D;
}
}
}

// Here points are deleted if connected 
if (Input.GetMouseUp(0)) {
    // Nothing important
}
}

问题在于:在“ Input.GetMouseDown(0)”中,即使鼠标经过对象“ hit.collider等于null”,大约1秒钟后,hit.collider也不会为null并给出颜色标签。

视频示例: https://www.youtube.com/watch?v=8x6TSBfBIzc

所有代码脚本: https://drive.google.com/open?id=1QKRInr26acu-E4zXPUf-DbW0h9zbsnUr

如何以期解决这个问题?为什么它不能立即连接?

0 个答案:

没有答案