我统一制作2D游戏,需要您的帮助。
游戏是随机创建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
如何以期解决这个问题?为什么它不能立即连接?