So I have a custom map editor, everything is working correctly except for the painting part. I have the logic correctly laid out and it should be working. However, it still selects the gameobject I clicked on when I called Event.current.Use(); I also tried HandleUtility.AddDefaultControl(0); and still didn’t work.
Here is my logic for detecting a click.
private void OnSceneGUI()
{
if (paintingActive)
{
//Debug.Log(Event.current);
if ((Event.current.type == EventType.MouseDown || Event.current.type == EventType.MouseDrag) && Event.current.button == 0)
{
Debug.LogError("Mouse down or drag");
if (currentBrushMaterial != null)
{
var hits = Physics.RaycastAll(HandleUtility.GUIPointToWorldRay(Event.current.mousePosition));
foreach (var hit in hits)
{
if (hit.collider.gameObject.tag == Tags.terrainBlock)
{
hit.collider.gameObject.GetComponent<MeshRenderer>().material = currentBrushMaterial;
hit.collider.gameObject.GetComponent<EditorMapBlock>().data.terrainType = currentTerrainSelected;
Event.current.Use();
Debug.Log("Event used");
HandleUtility.AddDefaultControl(0);
break;
}
}
}
}
}
}
I get exactly one log for “Mouse down and drag” and “Event used” for each click; the material is also correctly applied. Can someone help me out here, this should be fairly simple as it is a common use case.
EDIT- I tried to use mouse up instead, still didn't work. It didn't paint at all at the point.
EDIT- I just reread my post and realized it might not be clear what my problem is. I am trying to consume a mouse click event. I call the function Event.current.Use() to accomplish this. It is getting called and everything else works, however, the event is still being raised to select the gameobject I clicked on and am trying to paint inside the SceneView. I need the action of selecting the gameobject to be blocked otherwise I cannot continue painting other objects. Hope that makes sense!
EDIT - I still cant figure this out, some direction would be very appreciated!
EDIT- One more push then I will be posting on forums. Thanks!