【发布时间】:2015-04-01 07:33:54
【问题描述】:
版本: Unity3D 4.6.2f1
我有一个瓷砖网格(立方体 GameObjects 附有 Tile 脚本)。它们位于索引位置[x][y] = (x, y, z=0) World Coordinates。
我正在尝试实现类似于扫雷的行为:释放左键时,除非有右键单击,否则释放鼠标的图块会显露出来。下面,我尝试获取释放鼠标左键的图块的坐标。
进入代码之前:
OnMouseDown()- 当用户在 GUIElement 或 Collider 上按下鼠标按钮时调用 OnMouseDown。OnMouseUp()- OnMouseUp 在用户释放鼠标按钮时调用。
基于这些定义,我假设(错误?)OnMouseUp() 将被其上方的对象调用,鼠标左键被释放。
在Tile 脚本上,我有以下内容:
public class Tile : MonoBehaviour
{
// variables
private Vector2 _gridPosition = Vector2.zero;
public Vector2 GridPosition
{
get { return _gridPosition; }
set { _gridPosition = value; }
}
// functions
string Vec2toText(Vector2 v)
{
return String.Format("(" + v.x + ", " + v.y + ")");
}
void OnMouseDown()
{
Debug.Log("TILE:: ON_MOUSE_DOWN:: " + Vec2toText(_gridPosition));
}
void OnMouseUp()
{
Debug.Log("TILE:: ON_MOUSE_UP:: " + Vec2toText(_gridPosition));
}
void OnMouseEnter()
{
Debug.Log("TILE:: MOUSE_ENTER: " + Vec2toText(_gridPosition));
}
void OnMouseExit()
{
Debug.Log("TILE:: MOUSE_EXIT: " + Vec2toText(_gridPosition));
}
}
而here 是输出:
TILE:: MOUSE_ENTER: (15, 15)
TILE:: MOUSE_DOWN: (15, 15)
TILE:: MOUSE_EXIT: (15, 15)
TILE:: MOUSE_ENTER: (14, 15)
TILE:: MOUSE_UP: (15, 15) %% This line
TILE:: MOUSE_EXIT: (14, 15)
如果我可以在OnMouseUp() 函数上获得(14,15),我会直接找到要显示的图块,但显然我不能。我认为我的目标的解决方法是保留static bool _isDragging 并在if 块中的OnMouseEnter() 中使用它来分配要正确显示的图块。这是 - 即使我按下左键单击某个对象并将其释放到另一个对象上,也通过同一个对象调用两个函数? - 故意的?这种情况有更好的解决方法吗?
【问题讨论】:
标签: c# events unity3d callback